Django小结-1-路由配置

1.路由流程

 


 

 

2.路由表达式的分类

 


 

 

 

  2.1 精确字符串规格式

 


 

    如articles/2018/

 

    2.2 转换格式:

 


 

      也称路径转换器,如果想要让捕获的参数符合条件,那么我们会用到路径转化器符号是冒号 : eg:<int:age>常用的路径转化器,例如articles/<int:year>

 

  • int : 匹配任意整数
  • path : 匹配任意非空字符
  • str : 匹配除了 / 路径分隔符外所有字符串
  • uuid : 格式化id
  • sulg : 匹配任意ASCII字符和连字符及下划线

  2.3 正则表达式

 


 

    第一种是分组的,在视图中根据参数名传参:

     re_path(r'plan/(?P<year>\d\d\d\d)/(?P<month>[0-9]|1[0-2])/',plan), 

   第二种是不分组的,在视图中安位置传参:

     re_path(r'plan/(\d{4})\([0-9]|1[0-2]/',plan), 

 

3.路由转换器

 


 

  3.1 path路由转换器

 


 

     path(route,view,kwargs=None,name=None) 

route : (必须有)是一个字符串的url规则

view : (必须有)是个视图

kwargs :(可有可无)额外参数,是字典类型,传递给view

name :(可有可无)url名字

 

    

from django.urls import path
from login import views

urlpatterns = [
    path('index/',views.index),                        #精准字符串
    path('register/',views.register,name='register'),  #精准字符串
    path('index/index_action/',views.index_action,name='index_action'),
    path('main/',views.main)
]

 

from django.contrib import admin
from django.urls import path, re_path

from blog import views

urlpatterns = [
    path('index/',views.index),

    re_path(r'^article/(?P<article_id>[0-9]+)$',views.article_page, name='article_page'),                 #正则表达式
    re_path(r'article/edit/(?P<article_id>[0-9]+)$',views.article_edit_page,name='article_edit_page'),
    path('article/action/',views.article_edit_page_action,name='article_edit_page_action'),
    re_path(r'article/delete/(?P<article_id>[0-9]+)$',views.article_delete_page,name='article_delete_page'),
]

  3.2 re_path转换器(老版的url)


 

from django.urls import path, re_path

from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),          #正则表达式
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
]

4.路由的分发


 

通常,我们会在每个app里,各自创建一个urls.py路由模块,然后从根路由出发,将app所属的url请求,全部转发到相应的urls.py模块中。

根路由urls:

from django.contrib import admin
from django.urls import path, include

import blog
import login
from blog import  urls
from login import urls


urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/',include((blog.urls,'blog'),namespace='blog')),
    path('login/',include((login.urls,'login'),namespace='login')),
]

include((targe_url,'命名'),namespace='命名’)

子路由url

from django.urls import path
from login import views

urlpatterns = [
    path('index/',views.index),
    path('register/',views.register,name='register'),
    path('index/index_action/',views.index_action,name='index_action'),  #name命名
    path('main/',views.main)
]

5.反向解析

 


 

 

 

 

 

 HttpResponseRedirect(reverse('news-year-archive', args=(year,))) # 同redirect("/path/")

 

 

 

 

 

posted @ 2020-10-06 22:00  /匿名用户/  阅读(115)  评论(0编辑  收藏  举报