urlpatterns = [path( 要匹配的路径(可以是正则表达式), 视图函数, 参数, 别名)]
参数说明:
django的路由系统作用:
使views里面处理数据的视图函数(类)与请求的url建立映射关系。使请求到来之后,根据urls.py里的关系条目,去查找到与请求对应的处理方法,从而返回给客户端http页面数据。
from django.urls import re_path
正则表达式的格式:r'^xxxx/$'
一些常用的正则表达
最基础的URL映射
url(r'^$', views.index),
urls.py 文件
from django.contrib import admin
from django.urls import path,re_path
from demo01 import views
urlpatterns = [
re_path(r'^lawang4/$',views.laowang4),#匹配laowang4/路径
re_path(r'$',views.laowang5),#匹配空路径 例如: http://127.0.0.1:8000
re_path(r'lawang6/',views.laowang6),#不设置结尾,可以匹配多个路径 例如: http://127.0.0.1:8000/ee//egg
re_path(r'[a-zA-Z][0-9]/$',views.laowang7)
#[a-zA-Z]表示匹配所有英文字母中的任意一个字母
] #[0-9]表示任意一个数字
views.py 文件
from django.shortcuts import render
#初始 正则
def laowang4(request):
return render(request,'laowang4.html')
#匹配空路径
def laowang5(request):
return render(request,'laowang5.html')
#匹配多个路径
def laowang6(request):
return render(request,'laowang6.html')
#模糊匹配
def laowang7(request):
return render(request,'laowang7.html')
1.正则分组匹配:
格式:(正则内容)
正则表达式分组匹配是通过小括号”()”来捕获URL中的值并以位置参数形式传递给对应视图函数的位置参数。
视图函数接受的是内容时字符串类型。
urls.py
文件
re_path(r'^laowang8/(\d+)/$',views.laowang8),
views.py
文件
def laowang8(request,num):
print(num)
return render(request,'laowang8.html')
2. 正则分组命名匹配:
分组命名正则表达式组的语法
(?P pattern)
其中:
匹配成功后会将内容以关键词参数传递给对应的是视图函数,因此,视图函数的形参命名必须和正则分组匹配的’<名称>'相同。和先后顺序无关。
捕获的值作为 关键字参数 而不是位置参数传递给视图函数。
urls.py
文件
re_path(r'^laowang9/(?P[0-9]{4})/$',views.laowang9),
re_path(r'^laowang10/(?P[0-9]{4})/(?P[0-9]{2})/$',views.laowang10),
views.py
文件
def laowang9(request,year):
print(year)
return render(request,'laowang9.html')
def laowang10(request,month,year):
print(month)
return render(request,'laowang10.html')
如果匹配成功,则覆盖默认值,使用传递过来的值。
如果不能匹配成功,则使用默认值。
urls.py
文件
re_path(r'^laowang11/(?P[0-9]{4})/$',views.laowang11),
views.py
文件
def laowang11(request,year='2019'):
return render(request,'laowang11.html',{'year':year})
其中 year='2019
是指定的默认值
路由系统的第三个参数(字典参数)
字典的key必须和视图函数中的形参相同,否则报错
urls.py
文件:
re_path(r'^laowang12/(?P[0-9]{2})/$',views.laowang12,{'year':'2019'}),
其中:{'year':'2019'}
给的额外参数,值必须是字符串。
views.py
文件:
def laowang12(request,year,month):
return render(request,'laowang12.html',{'year':year,'month':month})
其中:year
必须和字典的key
对应。
下面就使用反向代理和没有使用反向代理的 区别进行比较:
urls.py
文件: re_path(r'^laowang13/$',views.laowang13),
re_path(r'^laowang14/$',views.laowang14),
views.py
文件:
def laowang13(request):
return render(request,'laowang13.html')
def laowang14(request):
return render(request,'laowang14.html')
laowang13的html.py
文件:
Title
点我14
urls.py
文件:
re_path(r'^laowang13/$',views.laowang13),
re_path(r'^laowang141/$',views.laowang14,name='lw14'),
其中:name='lw14'
就是反向代理
views.py
文件:
def laowang13(request):
return render(request,'laowang13.html')
def laowang14(request):
return render(request,'laowang14.html')
laowang13的html.py
文件:
Title
老王13
转跳到laowang14页面
转跳到laowang14页面
当把re_path(r'^laowang141/$',views.laowang14,name='lw14'),
中的laowang14
改成laowang141
使用反向代理还是可以访问laowang14.html
name=’xxx’
。urls.py
文件:re_path(r'^laowang13/$',views.laowang13),
re_path(r'^laowang15/(?P[0-9]{4})/(?P[0-9]{2})/$',views.laowang15,name='lw15'),
views.py
文件:
def laowang13(request):
return render(request,'laowang14.html')
def laowang15(request,year,month):
return render(request,'laowang15.html')
laowang13的html.py
文件:
Title
跳转到老王15页面
跳转到老王15页面