笔记主要基于官方文档,从中提取要点和记录笔记,关键处包含了官方文档链接。详见官方文档。
官方文档:Django documentation
博客推荐:Django2.2教程
官方文档视图层:视图层
目录
......
视图负责接受Web请求HttpRequest,进行逻辑处理,与M和T进行交互,返回Web响应HttpResponse给请求者。也可能重定向 redirect,还可以返回json数据。
使用视图的过程
视图就是一个python函数,被定义在"应用/views.py"文件中。 使用视图时需要进行两方面操作,两个操作不分先后。
1)在"应用/views.py"中定义视图。
2)配置URLconf,将视图函数和url对应起来
1.URL路由
部分相关官方文档:
- path函数等:django.urls functions for use in URLconfs、
- URL调度器(处理请求、路径转换器、使用正则表达式、URLconf匹配URL中的哪些部分、包含其它的URLconfs(路由转发)、URL 的反向解析 等)
博客:https://www.liujiangblog.com/course/django/134
Django开发的网站,由哪一个视图进行处理请求,是由url匹配找到的。所以需要配置URLconf,将视图函数和url对应起来。
URL路由在Django项目中的体现就是urls.py
文件,提倡项目有个根urls.py
,各app下各有一个app urls.py
,既集中又分治,是一种解耦的模式。
注:路由的编写方式是Django2.x和1.x最大的区别所在。Django官方将原来的正则匹配表达式,改为更加简单的path表达式,但依然通过re_path()方法保持对1.x版本的兼容
1.1.URL配置过程(重要)
- 在项目的urls文件中包含具体应用的urls文件,在具体应用的urls文件中包含具体url和视图的对应关系。
- url配置项是定义在一个名叫urlpatterns的列表中,其中的每一个元素就是一个配置项,每一个配置项都调用url函数。
具体配置例子和path函数可参考入门篇的:编写视图和URLConf
1.2.Django 如何处理一个请求(了解)
可能在URL配置过程中,可能会知其然而不知其所以然,这就需要了解Django 如何处理一个请求(跳转官方文档)。
当用户请求一个页面时,Django根据下面的逻辑执行操作:
- 决定要使用的根URLconf模块。。通常,这是
ROOT_URLCONF
设置的值,但如果传入HttpRequest
对象拥有urlconf
属性(通过中间件设置),它的值将被用来代替ROOT_URLCONF
设置。通俗的讲,就是可以自定义项目入口url是哪个文件!- Django 加载该模块并寻找可用的
urlpatterns
。它是django.urls.path()
和(或)django.urls.re_path()
实例的一个列表(sequence)。- Django 依次匹配每个URL 模式,在与请求的URL 匹配的第一个模式停下来。即url匹配是从上往下的短路操作,所以url在列表中的位置非常关键。
- 一旦有 URL 匹配成功,Djagno 导入并调用相关的视图,这个视图是一个简单的 Python 函数(或基于类的视图 class-based view )。视图会获得如下参数:
- 一个
HttpRequest
实例。- 如果匹配的 URL返回了没有命名的组,那么匹配的内容将作为位置参数提供给视图。
- 关键字参数由表达式匹配的命名组组成,并由
django.urls.path()
或django.urls.re_path()
的可选kwargs
参数中指定的任何参数覆盖。- 如果没有 URL 被匹配,或者匹配过程中出现了异常,Django 会调用一个适当的错误处理视图。参加下面的错误处理( Error handling )。
1.3.路径转换器
默认情况下,Django内置下面的路径转换器:
str
:匹配任何非空字符串,但不含斜杠/
,如果你没有专门指定转换器,那么这个是默认使用的;int
:匹配0和正整数,返回一个int类型slug
:可理解为注释、后缀、附属等概念,是url拖在最后的一部分解释性字符。该转换器匹配任何ASCII字符以及连接符和下划线,比如building-your-1st-django-site
;uuid
:匹配一个uu