学习笔记,第一个Django应用
Part 1:请求与响应
django-admin startproject mysite
一个新建立的项目结构大概如下:
1 | mysite/ |
python manage.py startapp polls
系统会自动生成 polls应用的目录,其结构如下:
1 | polls/ |
polls/views.py文件中,编写代码:
1 | from django.http import HttpResponse |
urls.py(不要换成别的名字),在其中输入代码如下:
1 | from django.urls import path |
此时,目录的文件结构是这样的:
1 | polls/ |
mysite/urls.py文件,代码如下:
1 | from django.contrib import admin |
Part 2:模型与后台
polls/models.py
1 | from django.db import models |
INSTALLED_APPS中,将该路径添加进去(字符串格式)
python manage.py makemigrations polls
python manage.py sqlmigrate polls 0001#展示SQL语句
python manage.py check#检查项目中的错误,并不实际进行迁移或者链接数据库的操作。
python manage.py migrate#运行migrate命令,在数据库中进行真正的表操作了。
进入Python的shell,请输入命令:
python manage.py shell
相比较直接输入“python”命令的方式进入Python环境,调用manage.py参数能将DJANGO_SETTINGS_MODULE环境变量导入,它将自动按照mysite/settings.py中的设置,配置好你的python shell环境,这样,你就可以导入和调用任何你项目内的模块了。
或者你也可以这样,先进入一个纯净的python环境,然后启动Django,具体如下:
1 | >>> import django |
尝试下面的API吧
1 | >>> from polls.models import Question, Choice # 导入我们写的模型类 |
Part 3:视图和模板
get_object_or_404()方法将一个Django模型作为第一个位置参数,后面可以跟上任意数量的关键字参数,如果对象不存在则弹出Http404错误。
get_list_or_404()方法,和上面的get_object_or_404()类似,只不过是用来替代filter()函数
删除模板中硬编码的URLs
1 | <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li> |
Django会在polls.urls文件中查找name=’detail’的路由,具体的就是下面这行:
1 | path('<int:question_id>/', views.detail, name='detail'), |
让我们将代码修改得更严谨一点,将polls/templates/polls/index.html中的
1 | <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li> |
修改为:
1 | <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li> |
注意引用方法是冒号,不是圆点也不是斜杠!
Part 4:表单和类视图(略)
Part 5:测试
polls/tests.py文件中:
1 | import datetime |
python manage.py test polls
其中都发生了些什么?:
python manage.py test polls命令会查找投票应用中所有的测试程序
发现一个django.test.TestCase的子类
为测试创建一个专用的数据库
查找名字以test开头的测试方法
在test_was_published_recently_with_future_question方法中,创建一个Question实例,该实例的pub_data字段的值是30天后的未来日期。
然后利用assertIs()方法,它发现was_published_recently()返回了True,而不是我们希望的False。
最后,测试程序会通知我们哪个测试失败了,错误出现在哪一行。
Part 6:静态文件
每个templates包含一个与应用同名的子目录,每个static也包含一个与应用同名的子目录。
Part 7:自定义admin
当表单含有大量字段的时候,你更多的是想将表单划分为一些字段的集合。
再次修改polls/admin.py:
1 | from django.contrib import admin |
其他,数据初始化方案(填充初始化数据)
低频操作。
方案1,导出sql
方案2,manage.py的dumpdata和loaddata
django系列
django入门进阶01学习笔记01
django入门进阶02学习笔记02
django入门进阶03学习笔记03
django入门进阶04学习笔记04
django入门进阶05快捷复习手册
django入门进阶06静态文件和模板
django入门进阶07用户模块与权限系统
django入门进阶08数据库事务
django入门进阶09中间件
django入门进阶10部署上线(nginx,uwsgi,supervisor)
django入门进阶11websocket
django入门进阶12信号
django入门进阶13异常之makemigrations