标签:for cut 正则 eve rev 请求方式 blog ESS 查找
Django的路由入口是urls.py的urlpatterns参数。
通过查找urlpatterns中的对应关系分发请求到各个视图函数或类。
一、分发请求到函数
1、应在对应app的views.py中定义好处理函数,如:
1 def business_new(request): 2 return HttpResponse("Django")
2、在urls.py中导入对应的模块
1 from app1 import views
3、在urlpatterns中加入对应关系
1 path(‘app1/‘,views.business_new) #fbv function base view
二、分发请求到类
1、应在对应app的views.py中定义好处理类,如:
1 from django.views import View 2 class Blog(View): #应继承View 3 def dispatch(self, request, *args, **kwargs): 4 print("before") 5 result = super(Blog,self).dispatch(request, *args, **kwargs) #根据请求方式分发 6 print("after") 7 return result 8 9 def get(self,request): 10 return HttpResponse("BLOG") 11 12 def post(self,request): 13 pass
2、在urls.py中导入对应的模块
1 from app1 import views
3、在urlpatterns中加入对应关系
1 path(‘blog/‘,views.Blog.as_view()), #CBV class base view
三、路由的特殊写法
1、使用正则,如:
1 re_path(‘article-(\d+)-(\d+)/‘,views.article) 2 re_path(‘article-(?P<article_type_id>\d+)-(?P<category_id>\d+)/‘,views.article) #分组
可同过形如:address/article-1-2 的方式访问
方法二会将1传给article_type_id,2传给category_id
使用正则时应导入re_path方法
1 from django.urls import path,re_path
2、name属性,如
1 re_path(‘article-(?P<article_type_id>\d+)-(?P<category_id>\d+)/‘,views.article,name=‘article‘)
设置该属性后可以通过reverse方法反向生成url,如:
1 file: views.py 2 from django.shortcuts import reverse 3 def article(request,**kwargs): 4 ...... 5 url = reverse(‘article‘,kwargs=kwargs) 6 print(url) 7 ......
3、分发到app的urls,如:
1 from django.urls import path,include #导入include 2 3 urlpatterns = [ 4 path(‘admin/‘, admin.site.urls), 5 path(‘app1/‘,include(‘app1.url‘)) 6 ]
此时访问形如 address/app1/XXX 的url时会进入app1 -> url.py 中查找urlpatterns
标签:for cut 正则 eve rev 请求方式 blog ESS 查找
原文地址:https://www.cnblogs.com/baird/p/9542586.html