创建应用程序
前面打开的终端窗口运行着runserver,再打开一个终端窗口,并切换到manage.py所在的目录。激活该虚拟环境,执行命令startapp
;
twr@twr-911K:~/learning_log$ source ll_env/bin/activate
(ll_env) twr@twr-911K:~/learning_log$ python manage.py startapp learning_logs
(ll_env) twr@twr-911K:~/learning_log$ ls
db.sqlite3 learning_log learning_logs ll_env manage.py
(ll_env) twr@twr-911K:~/learning_log$ ls learning_logs
admin.py apps.py __init__.py migrations models.py tests.py views.py
定义模型
models.py中导入了模块models,我们可以自行定义模型
激活模型
打开settings.py,将INSTALLED_APPS修改如下:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#myapps
'learning_logs',
]
让Django修改数据库,在终端窗口中执行下面的命令:
(ll_env) twr@twr-911K:~/learning_log$ python manage.py makemigrations learning_logs
Migrations for 'learning_logs':
learning_logs/migrations/0001_initial.py
- Create model Topic
迁移修改:
(ll_env) twr@twr-911K:~/learning_log$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, learning_logs, sessions
Running migrations:
Applying learning_logs.0001_initial... OK
Django管理网站
创建超级用户
终端输入如下命令:
python manage.py createsuperuser
向管理网站注册模型
修改admin.py
from django.contrib import admin
# Register your models here.
from learning_logs.models import Topic
admin.site.register(Topic)
访问http://localhost:8000/admin/
创建网页
映射url
learning_log中的urls.py文件:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('learning_logs.urls',namespace='learning_logs')),
]
admin.site.urls模块定义了可在管理网站中请求的所有url
下面一行则将learning_logs的url同项目中的url区分开来。
在learning_logs文件夹中创建一个新的url.py:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
app_name = 'learning_logs'
from django.conf.urls import url
:导入函数url,用来将url映射到视图
from . import views
:导入模块views,其中的句点将当前的urls.py模块所在的文件夹中导入视图。
urlpatterns
:列表,包含可在应用程序learning_logs中请求的网页。里面是对函数url()的调用,函数中有三个实参。第一个是一个正则表达式。定义了Django可查找的模式(查找开头和结尾之间没有任何东西的url)。第二个实参指定了要调用的视图函数,请求的url与前述正则表达式匹配时,Django将调用views.index。第三个实参将这个url模式的名称指定为index。
编写视图
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, 'learning_logs/index.html')
render()提供了两个实参:原始请求对象以及一个可用于创建网页的模板。