路由系统
1、路由系统基本格式
urlpatterns = [
path( 要匹配的路径(可以是正则表达式), 视图函数, 参数, 别名)
]
2、参数说明
(1) 正则表达式:一个正则表达式字符串
(2) 视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
(3) •参数:要传递给视图函数的默认参数(字典形式,可选)
(4) •别名:一个可选的name参数
3、正则表达式详解
(1) 在python中使用 re_path模块来写正则表达式
(2) 正则表达式的开始使用“^”表示。
(3) 正则表达式的结束使用“$”表示。
(4) “r” 元字符串 防止正则表达式中的转义。
练习:正则路径:
在导入路径之前先在urls.py文件中导入正则路径模块:
from django.urls import path,re_path
然后在urls.py文件中创建路径:
urlpatterns = [
re_path(r'^lw4$',views.lw4)
]
在views.py文件中定义视图函数:
def lw4(request):
return render(request,'lw4.html')
在创建lw4.html文件:
4、正则表达式分组及分组命名匹配
(1) 分组匹配:
正则表达式分组匹配是通过小括号”()”来捕获URL中的值并以位置参数形式传递给视图。
在urls.py文件中创建路径:
urlpatterns = [
re_path(r'^lw6/(\d+)/',views.lw6),#\d表示任意数字,+表示至少出现一次。
]
在views.py文件中定义视图函数:
def lw6(request,num):
"""
:param request:
:param num: 接受urls传递过来的参数
:return:
"""
print(num)
print(type(num))
return render(request,'lw6.html')
注意:视图函数接受的是内容时字符串类型。
再创建自己的lw6文件。
运行后,下图的两个路径都可以打开lw6.html的内容:
因为正则匹配了路径后可匹配任意数字。
(2) 分组命名匹配:
分组命名正则表达式组的语法是(?Ppattern),
其中name是组的名称,pattern是要匹配的模式。
捕获的值作为关键字参数而不是位置参数传递给视图函数。
例:
在urls.py文件中创建路径:
urlpatterns = [
re_path(r'^lw7/(?P<year>[0-9]{4})/$',views.lw7)
]
在views.py文件中定义视图函数:
def lw7(request,year='2019'):
print(year)
return render(request,'lw7.html',{'year':year})
不给year传参的时候,year返回的就是默认值2019,传参时就是传入浏览器的那个值。
在创建lw7.html文件:
7、Url反向代理(别名)
使用url反向代理,解决硬编码问题。
在urls.py文件中创建路径:
urlpatterns = [
re_path(r'^lw9$',views.lw9),
re_path(r'^lw10$',views.lw10),
re_path(r'^lw11$',views.lw11,name='changePage')
]
在views.py文件中定义视图函数:
def lw9(request):
return render(request,'lw9.html')
def lw10(request):
return render(request,'lw10.html')
def lw11(request):
return render(request,'lw11.html')
创建两个html文件:
在lw9.html中创建超链接,第一个是直接使用另一个文件名作为链接,第二个是使用文件的别名来实现跳转。使用别名的好处是改变链接文件名的时候,依然可以跳转到此页面不用再在lw9.html中修改路径。
创建lw10.html文件:
创建lw11.html文件:
在浏览器里先打开lw9,点击相应的超链接就可以转到响应的html页面。