python云端系统开发(Django)MOOC笔记整理week3(A)URL路由机制
Django框架进阶
1,URL路由机制
2,视图响应类型
3,视图流式响应机制
4,模板引擎与模板使用
5,模板语言入门
URL路由机制
URL->定义,转换,传参,命名等->views
Django的URL路由配置
settings.py文件中ROOT_URLCONF变量指定全局路由文件名称
ROOT_URLCONF = '<工程名字>.urls' #默认对应工程目录下urls.py文件
Django使用urlpatterns变量表示路由(urls.py),该变量是列表类型,由path()或re_path()作为元素组成
注意:
Django的路由不考虑http请求方式,仅根据URL进行路由,即,只要URL相同,无论POST,GET等哪种请求方式都指向同一个操作函数
路由:path()和re_path()
path()处理字符串路由,re_path()出路正则表达式路由
path(route,view)#route即URL字符串,view为对应的处理函数
re_path(route,view)#route即正则表达式
路由函数path
path(route,view,kwargs=None,name=None)
route:URL或URL模式,Django定义的URL转换语法
view:处理(视图)函数的名称,或include()类
kwargs:向处理函数提供的额外参数,以字典形式表示
name:给URL模式的命名
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/',views.special_case_2003),
path('articles/<int:year>/',views.year_archive),
path('articles/<int:year>/<int:month>/',views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/',views.article_detail),
}
Django支持三种方式表达route
1,精确字符串格式:articles/2003/
一个精确URL匹配一个操作函数
最简单形式,适合对静态URL的响应
URL不以/开头,但要以/结尾
2,Django的转换格式:<类型:变量名>,articles/<int:year>/
一个URL模板,匹配URL同时在其中获得一批变量作为参数
常用形式,目的是通过URL进行参数获取和传递
采用<类型:变量名>格式获取参数
3,正则表达式格式:articles/(?P<year>[0-9]{4}/
借助正则表达式丰富语法表达一类URL(不是一个)
可以通过<>提取变量作为处理函数的参数,高级用法
使用re_path()函数articles/([0-9]{4})/
使用re_path()函数,两种具体形式:
简单形式(pattern),不提取参数:articles/([0-9]{4})/
命名形式(?P<name>pattern
),提取参数,统一为str类型:
articles/(?P<year>[0-9]{4})/
view的使用
view包括两种类型:处理函数和include()函数
处理函数:views.py中处理URL的对应函数,URL处理的归宿
include()函数:包含其他路由信息的函数,分段路径组合形成总路径
#urls.py
urlpatterns = [
path('entry/',include(appA.urls')),
]
#appA/urls.py
urlpatterns = [
path('help/',views.help),
path('sub/',views.sub),
]
include()用法:
1,附加本地路由
2,路由去重
urlpatterns = [
path('<page_slug>-<page_id>/history/',views.history),
path('<page_slug>-<page_id>/edit/',views.edit),
path('<page_slug>-<page_id>/discuss/',views.discuss),
path('<page_slug>-<page_id>/permissions/',views.permissions),
]
路径去重后,可以减少代码修改,降低出错概率
urlpatterns = [
path('<page_slug>-<page_id>/',include([
path('history/',views.history),
path('edit/',views.edit),
path('discuss/',views.discuss),
path('permissions/',views.permissions),
])),
]
URL根目录处理
http://127.0.0.1:8000/的响应
#全局urls.py文件
urlpatterns = [
path('',<根目录处理函数>),
re_path('^$',<根目录处理函数>),#或者,二选一
]