Django 路由层URLconf的实现
分组
分组的目的:让服务端获得url中的具体数据,通过分组,把需要的数据按函数传参的方式传递给服务器后台
1-无名分组
若要从URL中捕获一个值,只需要在它周围放置一对圆括号
#app01/urls.py fromdjango.urlsimportpath,re_path fromapp01importviews app_name="app01" urlpatterns=[ path("login/",views.login,name="Log"), re_path(r"articles/([0-9]{4})/([0-9]){2}/",views.articles), ]
#app01/views.py defarticles(request,year,month): print(year,month) returnHttpResponse(year+"-"+month)
2-有名分组
在更高级的用法中,可以使用命名的正则表达式组来捕获URL中的值并以关键字参数传递给视图。
在Python正则表达式中,命名正则表达式组的语法是(?P
#app01/urls.py fromdjango.urlsimportpath,re_path fromapp01importviews app_name="app01" urlpatterns=[ path("login/",views.login,name="Log"), re_path(r"articles/(?P[0-9]{4})/(?P [0-9]{2}/)",views.articles), ]
捕获的值作为关键字参数而不是位置参数传递给视图函数
#app01/views.py defarticles(request,month,year): print(year,month) returnHttpResponse(year+"-"+month)
分发
分发的目的:解决一个django项目中因为存在多个应用app导致project下面的urls臃肿和分配混乱的问题
分发的具体操作流程是:
step1:项目文件下的urls.py,使用include()
#project/urls.py fromdjango.contribimportadmin fromdjango.urlsimportpath,include urlpatterns=[ path('admin/',admin.site.urls), path(r"app01/",include("app01.urls")), ]
step2:app下的具体url
#app01/urls.py fromdjango.urlsimportpath fromapp01importviews urlpatterns=[ path("login/",views.login), ]
step3:视图函数render时模板路径前缀
#app01/views.py fromdjango.shortcutsimportrender #Createyourviewshere. deflogin(request): returnrender(request,"app01/login.html")
step4:模板
#app01/templates/app01/login.htmlapp01_title app01_login
用户名
密码