-
django请求生命周期流程图
浏览器
发送请求(HTTP协议)
web服务网关接口:
1、请求来的时候解析封装
响应走的时候打包处理
2、django默认的wsgiref模块不能承受高并发 最大只有1000左右
上线之后会替换成uwsgi来增加并发量
3、WSGI跟wsgiref和uwsgi的关系:
WGSCI是协议
wsgiref和uwsgi是实现该协议的功能模块
Django后端:
1、django中间件:
类似于django的保安 门户
2、urls.py 路由层
识别路由匹配对应的视图函数
3、views.py 视图层
网站整体的业务逻辑
4、templates文件夹 模板层
网站所有的html文件
5、models.py 模型层
ORM
-
路由匹配
一.path方法函数
1 path('网址后缀',函数名) 2 一旦网址后缀匹配上了就会自动执行后面的函数并结束整个路由的匹配 3 4 path(route,view,kwargs,name) 5 它可以接收 4 个参数,其中前两个是必填参数后两个为可选参数
1.route
route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项,然后执行该项映射的视图函数或者 include 函数分发的下级路由
2.view
view 指的是处理当前 url 请求的视图函数。当 Django 匹配到某个路由条目时,自动将封装的 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式,传递给该条目指定的视图函数。
3.kwargs
kwargs 指使用字典关键字传参的形式给关联的目标视图函数传递参数。
4.name
name 给 URL 起个别名,常用于 url 的反向解析,避免在模板中适应硬编码的方式使用嵌入 url
二.path转换器
1 当网址后缀不固定的时候 可以使用转换器来匹配 2 'int': IntConverter(), # 匹配正整数,包含0; 3 'path': PathConverter(), # 匹配格式化的 uuid 4 'slug': SlugConverter(), # 匹配字母、数字以及横杠、下划线组成的字符串; 5 'str': StringConverter(), # 匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式; 6 'uuid': UUIDConverter(), # 匹配格式化的 uuid 7 path('func/<int:year>/<str:info>/', views.func) 8 转换器匹配到的内容会当做视图函数的关键字参数传入 9 转换器有几个叫什么名字 那么视图函数的形参必须对应 10 def func(request,year,info): 11 pass
三.re_path正则匹配
在django1.11中 只支持正则匹配 并且方法是 url()
django2,3,4中 path() re_path() 等价于 url()
1 re_path(正则表达式,函数名) 2 一旦网址后缀的正则能够匹配到内容就会自动执行后面的函数 3 并结束整个路由的匹配 4 re_path('^test/$', views.test) 5 当网址后缀不固定的时候 可以使用转换器来匹配
四 .正则匹配之无名分组
1 re_path('^test/(\d+)/', views.test) 2 正则表达式匹配到的内容会当做视图函数的位置参数传递给视图函数
五.正则匹配之有名分组
1 re_path('^test/(?P<year>\d+)/(?P<others>.*?)/', views.test) 2 正则表达式匹配到的内容会当做视图函数的关键字参数传递给视图函数
-
反向解析
1 页面上提前写死了很多路由 一旦路由发送变化会导致所有页面相关链接失效 2 为了防止出现该问题 我们需要使用反向解析 3 """ 4 反向解析:返回一个结果 该结果可以访问到对应的路由 5 """ 6 1.路由对应关系起别名 7 path('register/', views.reg, name='reg_view') 8 2.使用反向解析语法 9 html页面 10 {% url 'reg_view' %} 11 后端 12 from django.shortcuts import reverse 13 reverse('reg_view') 14 ps:反向解析的操作三个方法都一样path() re_path() url()
-
无名有名反向解析
1 path('reg/<str:info>/', views.reg, name='reg_view') 2 当路由中有不确定的匹配因素 反向解析的时候需要人为给出一个具体的值 3 reverse('reg_view', args=('jason',)) 4 {% url 'reg_view' 'jason' %} 5 6 ps:反向解析的操作三个方法都一样path() re_path() url()
-
路由分发
1 django中的应用都可以有自己独立的 2 urls.py templates文件夹 static文件夹 3 能够让基于django开发的多个应用完全独立 便于小组开发 4 5 总路由 6 path('app01/', include('app01.urls')), 7 path('app02/', include('app02.urls')), 8 子路由 9 path('after/', views.after) # app01 10 path('after/', views.after) # app02 11 """ 12 当项目特别大 应用特别多的时候 可以使用路由分发 非常方便!!! 13 """
-
名称空间
1 有路由分发场景下多个应用在涉及到反向解析别名冲突的时候无法正常解析 2 解决方式1 3 名称空间 4 namespace 5 path('app01/', include(('app01.urls', 'app01'), namespace='app01')) 6 path('app01/', include(('app01.urls', 'app02'), namespace='app02')) 7 解决方式2 8 别名不冲突即可 9 """ 10 保证django项目下没有重复的别名即可 11 """标签:匹配,函数,视图,django,分组,path,解析,路由 From: https://www.cnblogs.com/tai-yang77/p/16647653.html