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.py2 from django.shortcuts import reverse3 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 #导入include2 3 urlpatterns = [4 ????path(‘admin/‘, admin.site.urls),5 ????path(‘app1/‘,include(‘app1.url‘))6 ]
此时访问形如 address/app1/XXX 的url时会进入app1 -> url.py 中查找urlpatterns
django-urls(路由)
原文地址:https://www.cnblogs.com/baird/p/9542586.html