1.URL改为from django.urls import include, path
以前用url,现在用path
其中,包含4个参数,必须的route、view,非必须的kwargs和name,为url起名可以在任意地方唯一的使用
当包括其它 URL 模式时你应该总是使用 include()
, admin.site.urls
是唯一例外。
2.URL里再也不用正则表达式了,不再有^&这些东西了,应该是已经打包好了,可以直接用<int:pk>这种方式
3.自己写的中间件,不可不继承任何objects了
目前发现其他中间件继承自from django.utils.deprecation import MiddlewareMixin,所以自己写的中间件也可以这么继承
4.外键models.ForeignKey(Question, on_delete=models.CASCADE),现在必须加on_delete参数
外键关系中,1调用n的一方,可以用one.n_set.all()调用,关键是_set。在模板中不加括号
5.在settings.py中,自定义installed_app要写成'yourapp.apps.YourappConfig',
6.在django.shortcuts 中
get_object_or_404()
相当于objects.get,否则404
get_list_or_404()
相当于objects.filter,否则404
7.去除模板中的链接地址硬编码,可以在urls.py中为url设置name,然后在模板中 {% url %} 标签代替它,如
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
这个标签的工作方式是在 polls.urls 模块的 URL 定义中寻具有指定名字的条目。你可以回忆一下,具有名字 'detail' 的 URL 是在如下语句中定义的:
app_name = 'polls' # 在上面加上命名空间
# the 'name' value as called by the {% url %} template tag
path('<int:question_id>/', views.detail, name='detail'),
8.模板中用{{ forloop.counter }}表用{% for %}循环到了第几次,如
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
9.F()函数可以用来解决资源更新的竞争, Avoiding race conditions using F()
-
admin界面可以自己定义,包括label,filter筛选过滤,搜索等
https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial07/ -
Middleware 的执行顺序。在系统根据WSGI的 environ 构造 WSGIRequest 对象后,Middleware的process_request开始顺序执行,然后匹配URL后,具体view执行前(?),Middleware的process_view开始顺序执行,然后开始处理view,最后Middleware的process_response开始逆序执行
网友评论