- URL配置就像Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。
# 示例:urlpatterns = [ ???path(route, view, kwargs=None, name=None), ???re_path(正则表达式, views视图函数, 参数, 别名),]# 参数说明:# ??一个正则表达式字符串# ??一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串# ??可选的要传递给视图函数的默认参数(字典形式)# ??一个可选的name参数# 示例一:# mysite/mysite/urls.pyfrom django.urls import path, re_pathfrom blog import viewsurlpatterns = [ ???path('cur_time', views.cur_time), ???path('userInfo', views.userInfo), ???re_path(r'^articles/2003/$', views.special_case_2003), ???re_path(r'^articles/([0-9]{4})/$', views.year_archive) ???re_path(r'^articles/([0-9]{4})/([0-9]{2})/', views.month_archive)]# mysite/blog/views.pydef special_case_2003(req): ???return HttpResponse('2003')def year_archive(req, y): ??????# 参数y接收: ([0-9]{4}) 传入的值 ???return HttpResponse('year':y) ??def month_archive(req, y, m): ???return HttpResponse('year:'+y+'month:'+m) ???# 参数y接收: ([0-9]{4}) 传入的值, m 接收([0-9]{2})# 示例二: Named groups# 预备知识: 正则表达式import reret = re.search('(?P<id>\d{3})/(?P<name>\w{3})', 'wwwwwfffttt555/ooo')print(ret.group()) ?????????# 输出: 555/oooprint(ret.group('id')) ?????# 输出: 555print(ret.group('name')) ???# 输出: ooo# mysite/mysite/urls.pyfrom django.urls import path, re_pathfrom blog import viewsurlpatterns = [ ???re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.month_archive)]# mysite/blog/views.pydef month_archive(req, year, month): ??????????# 此处形参必须为 year,month ???return HttpResponse('year:'+year+'month:'+month) ???# 示例三:# mysite/mysite/urls.pyfrom django.urls import path, re_pathfrom blog import viewsurlpatterns = [ ???re_path(r'^index/(?P<name>[0-9]{4})/', views.index, {'name':'xiaohu'})]# mysite/blog/views.pydef index(req, name): ??????????# 此处形参必须为 name ???return HttpResponse(name) ??????????# 参数 {'name':'xiaohu'} 会覆盖URL中的参数# 示例四:# mysite/mysite/urls.pyfrom django.urls import path, re_pathfrom blog import viewsurlpatterns = [ ???re_path(r'^index/', views.index, name='book') ???# name表示URL的别名 ???re_path(r'^/movie/index/', views.index, name='book')]# mysite/blog/views.pydef index(req): ?????????????if req.method=='POST': ???????username=req.POST.get('username') ???????pwd=req.POST.get('pwd') ???????if username=='xiaohu' and pwd=='123': ???????????return HttpResponse('登录成功!') ???return render(req, 'login.html')# mysite/templates/login.html<body> ???<!-- 相比于 action='/index/', URL地址更灵活 -- ???<form action="{% url 'book' %}" method="post"> ???????<input type="text" name="username"> ???????<input type="password" name="pwd"> ???????<input type="submit" value="submit"> ???</form></body># 访问地址:http://localhost:8080/indexhttp://localhost:8080/movie/index
参考资料
- Python 全栈