当前位置: 首页 > Web前端 > HTML

Django基础II(URL路由)

时间:2023-04-02 13:41:47 HTML

URL路由简介对于高质量的Web应用程序,使用简单优雅的URL路由是一个值得尊重的细节。Django可以随心所欲地设计URL,不受框架的约束。要为应用程序设计URL,您需要一个Python模块,通常称为URLconf,该模块是纯URL模式(简单正则表达式)到python函数(视图函数)的简单映射Django如何处理请求是django.conf.urls.url()实例的python列表。Django依次匹配每个URL,在第一个匹配请求URL的url处停止。一旦其中一个正则表达式匹配,Django将导入并调用所有给定的视图,这个视图是一个简单的python函数或类。如果没有匹配到正则表达式,或者过程中出现异常,django会调用相应的错误处理视图:handler404、handler500、handler403、handler400URLconfURLconf是一个python模块,是URL模式(简单正则表达式)到python的映射视图(函数或类)urlpatternsurlpatterns:是url()实例类型的python列表urlpatterns:第一个中的每个正则表达式它们在访问它们时被编译字符串(原始字符串)或简单的正则表达式视图:是视图函数(类)或as_view()kwargs的结果:将附加参数传递给视图名称:url名称包含语法include(module,namespace=None,app_name=None)include(pattern_list)include((pattern_list,app_namespace),namespace=None)include((pattern_list,app_namespace,instance_namwespace))模块:URLconf模块命名空间:URL命名空间app_name:应用程序的命名空间pattern_list:djang.conf.url的可迭代s.url()实例app_namespace:应用名称空间instance_namespace:实例的名称空间实例:-主urls.pyfromdjango.conf.urlsimporturl,includefromdjango.contribimportadminurlpatterns=[url(r'^dashboard/',include('dashboard.urls')),url(r'^admin/',admin.site.urls)]-dashboard.urls配置文件fromdjango.conf.urlsimporturl,includefrom。importviewsurlpatterns=[url(r'^user/',include([url(r'^list/$',view.userlist,name='user_list'),url(r'^info/$',view.userinfo,name='user_linfo'),url(r'^modify/',include([url(r'status/$',view.modifystatus,name='modify_status')]))]))]-dashboard.views视图fromdjango.shortcutsimportrenderfromdjango.httpimportHttpResponse#Createyourviewshere.defindex(request):returnHttpResponse('IndexPage')defuserList(request):returnHttpResponse("UserListPage")defuserStatus(request):returnHttpResponse("UserStatusPage")defUserInfo(request):returnHttpResponse("UserInfoPage")-请请求方式curlhttp://192.168.33.10:8080/dashboard/user/user_list/curlhttp://192.168.33.10:8080/dashboard/user/modify/status/curlhttp://192.168.33.10:8080/dashboard/user/modify/info/urlparameter要从URL中捕获值,只需在它周围放一对括号urlpatterns=[url(r'^article/2003/$',views.special_case_2003,name='special_case_2003'),url(r'^article/(2004)/$',views.articleViewInfo,name='special_case_2003'),url(r'^user/([0-9]{4})/$',views.userInfo),url(r'^date/([0-9]{4})/([0-9]{2})/([0-9]{2})$',views.dateInfo)]对应查看函数defspecial_case_2003(request):returnHttpResponse("2003")defarticleViewInfo(request,*args,**kwargs):print(args)#位置参数获取returnHttpResponse('request2004')defuserInfo(request,*args,**kwargs):返回HttpResponse(json.dumps(args))defdateInfo(request,*args,**kwargs):data={"year":args[0],"month":args[1],"day":args[2]}#returnHttpResponse(json.dumps(data))returnJsonResponse(data)关键字参数语法(?Ppattern)-name是传递给视图参数的名称word,-pattern是正则表达式,也是关键字参数的值实例:url:url(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[0-9]{2})/$',views.articleInfoView)-----------------------查看视图函数defarticleView(request,*args,**kwargs):returnJsonResponse(kwargs)请求方法:http://192.168.33.10:8080/dashboard/articles/2004/12/21/urlparameters-extraparametersURLconfs有一个钩子,可以让你将一个Python字典作为一个额外的参数传递给视图函数django.conf.urls.url()函数可以接受一个可选的第三个参数,它是一个字典,表示额外的关键字要传递给视图函数的参数url:url(r'users/(?P[a-z]+)',views.users,{'extra_args':'hehehe'})viewviewFunction:fromdjango.conf.urls导入urlfrom。importviewsurlpatterns=[url(r'^blog/(?P[0-9]{4})/$',views.year_archive,{'foo':'bar'}),]请求地址:/blog/2005/调用函数:views.year_archive(request,year='2005',foo='bar')url逆向分析django给每个url一个名字,根据id保存每个url和名字的映射关系Django视图和要传递给它的参数的值,得到与之关联的URL。这种方法称为反向URL解析、反向URL匹配、反向URL查询或简单的URL反向查找示例:url:fromdjango.conf.urlsimporturlfrom。导入viewsurlpatterns=[url(r'^articles/([0-9]{4})/$',views.year_archive,name='news-year-archive'),]----------------------视频函数从django.core.urlresolversimportreverse模板:{{yaervar}}Archieve