从别的地方找来的一张图:
还有一些需要补充的地方:
1、路由的概念
- 维护视图视图函数映射关系的结构,在Web框架中,称之为路由
- Django把这种映射关系叫做URLConf(URL配置),URL配置把URL映射到相应的视图函数中,我们以这种方式告诉Django,“访问这个URL时调用这些代码,访问那个URL时调用那些代码”
2、正向路由
通过url地址,查找到视图函数,从而响应给浏览器
1)正则
2)截取url地址中的信息
#在匹配过程中,使用()可以将匹配信息传递到视图函数,要求定义视图函数的时候,将参数定义好
urlpatterns = [
#映射关系
re_path('r^detail/(\d+)/$',视图函数,name='标识1') #\d+标识可以是一个或者多个数字
]
位置参数有时候并不能很好的描述用户意图,所以Django也提供在匹配URL时对截取信息进行命名参数的传递,采用的方法就是用 ?P<名称> 符号来进行名称命名
P-----Param(参数)
re_path(r'^book/(?P<book_id>\d+)/$',book_views.detail)
'''
名称必须和函数形参一致
'''
#对比一下
urlpatterns = [
#位置参数
re_path('r^detail/(\d+)/$',视图函数,name='标识1')
#命名参数
re_path(r'^detail/(?P<id>\d+)/$',视图函数,name='标识1'),
]
3、反向路由
- 在python的代码中,视图函数中如何得到url
- reverse(“路由匹配的标识”,args=[])
命名空间,多个应用下的views.py中都可能定义了一个index视图函数。
主路由与子路由之间
主路由:
#主路由和子路由之间才有命名空间
#命名空间在反向路由时采用,正向路由无影响(多个应用下的views.py中都可能定义了一个index视图函数)
urlpatterns = [
re_path(r'^book/$',include("book.urls",namespace="命名空间"))
]
子路由:
urlpatterns = [
re_path(r'^detail/(?P<id>\d+)/$',detail,name = 'detail')
]
reverse("命名空间:detail",args=(1111,))