项目执行命令
runserver
python manage.py runserver
:在本地查看项目。
superadmin
python manage.py createsuperuser
建立superuser,有权限访问所有后台数据。
startapp
python manage.py startapp app-name
:在当前总项目的项目文件夹新建一个application,django会自动生成一系列初始文件。如下所示。
__init__.py
为空。
admin.py
用于注册models.py
中的数据库的表,让数据库的操作不再依赖于shell中的代码,而是通过GUI操作。
apps.py
说明一些和当前app相关的信息,比如在startapp后面跟着的app-name。
models.py
用于建立数据库表,一般形式是声明一个class代表一个表,所有数据的类型定义都来自于from django.db import models
库。如下所示。
1 | from django.db import models |
urls.py
决定当前app的路由,和views.py
的内容相关联。path('about/', views.about, name='blog-about')
第一个参数是路由路径,第二个参数是views.py
中定义的页面,第三个参数是赋予页面的唯一的名称,由这个页面名称可以反向获得页面路径。django中的路由解析是按照分级解析来运行的。在django_project
的根目录的下一级同名子目录中可以发现另一个urls.py,这是路径搜索的开始,遇到匹配的就一级一级向其他app延伸。搜索结束django_project
中的urls.py
后,继续去掉已经搜索的url部分,匹配blog
中的urls.py
,直到匹配到特定的视图。
views.py
中,每一个视图/页面/组件,都以class的形式被声明,并通过from django.shortcuts import render
的render函数返回。需要为render函数传入templates文件夹中的html页面,以及models.py
中的数据,如return render(request, 'blog/about.html', {'title': 'About'})
。
migration
为什么需要database migration?
这让我们在建立一个数据库之后,就算数据库中已经存在数据,我们依然能够修改数据库。如果django项目组没有database migration,而我们有需要对数据库的数据修改,我们需要使用一些sql code去update data structure。
相当于用python的方式去update sql。
python manage.py makemigrations
基于项目中models.py的内容变化准备数据库同步,每一次执行makemigrations后migrations文件夹中都会生成XXXX_initial.py
,这个文件只在makemigrations的时候生成。(这里的XXXX。是每一次migrations的数字,migration number)
python manage.py migrate
将已有的变化同步到数据库,主要就是执行makemigrations的时候生成的XXXX_initial.py
文件。
python manage.py sqlmigrate app-name migration-number
会自动生成并显示每一次migration会生成的具体的sql代码。
shell
python manage.py shell
可以提供一个python prompt让我们用python的方式去查询数据库。
首先需要导入数据库中的表。在这里通过from django.contrib.auth.models import User
导入User Table。其次,为了查询User Table中的各个项目,使用点访问法找出其内容User.objects
。需要注意查询返回的是一个单个的对象,还是包含对象的集合QuerySet。
为已经导入的表新建一个元组/插入一条新的数据,直接把导入的Table当作函数调用,并传入参数。每一次新建的一个元组都要保存到表才可以查询并显示。
如何探寻多个表之间的关系?比如上面就是一个User Table,一个Post Table。我们希望找到一个用户发布的所有帖子,该怎么做?这在数据库查询中十分常见。在python shell中,可以直接使用user.post_set
,它会返回一个可查询对象,继续对该对象使用all/first/last/filter
等查询语句即可返回具体的内容。另外,还可以对该查询对象进行create
操作,意思是为该用户新建一条帖子。
- 本文标题:Django基础
- 本文作者:徐徐
- 创建时间:2021-02-11 21:13:05
- 本文链接:https://machacroissant.github.io/2021/02/11/django-basics/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!