首页 > 其他 > 详细

Django的路由层详情

时间:2019-04-25 21:33:11      阅读:133      评论:0      收藏:0      [点我收藏+]

1. Django的路由解析: 是从上往下进行匹配的

技术分享图片
url(rindex, views.index)
#这里的index 解析都可以被解析到的, abcindex   index   indexabc
url(r^index, views.index)
#这里的index 解析是index  indexabc
url(r^index/$, views.index)
#这里的index 解析是精确解析 只有index 才可以被解析

例题:
url(rindex/, views.index),
url(r^app1_index/, app1_views.index),
url(r^app2_index/, app2_views.index),
这里的解析是先 解析 index  后面的app1_index   app2_index 都不会被解析到的
匹配模式

2. url 的分组模式,分为无名分组 和 有名分组两大类

技术分享图片
url(r^delete/(\d+)/(\d+)$, views.delete)  #这里是无名分组
def delete(request, n1, n2)   #可以在views 内设置 n1,n2 随便设置
请求路径: http://127.0.0.1/delete/1/2
n1 拿到的值为1  n2 拿到的值为2

url(r^delete/(?P<id>\d+)/(?P<num>\d+)$, views.delete) #这里就是有名分组
def delete(request, id, pwd):  #这里是在 一定要写id 和pwd 次序不能乱
请求路径:http://127.0.0.1/delete/1/2
id 拿到的值为 1   pwd 拿到的值为2
有名分组和无名分组的区别

3. 有多个app的共存路由区分

技术分享图片
from  app1 import  views as app1_views
from  app2 import  views as app2_views
#当出现app1 和app2 多个app存在时, 可以取别名来认识 as app1_views | app2_views
url(r^app1_index/, app1_views.index),
url(r^app2_index/, app2_views.index),
#各自去自己的index 内拿想要的信息 ,不会冲突,因为有别名来识别
在settings.py 文件内 添加最后的信息app1.apps.App1Config,app2.apps.App2Config,
INSTALLED_APPS = [
    django.contrib.admin,
    django.contrib.auth,
    django.contrib.contenttypes,
    django.contrib.sessions,
    django.contrib.messages,
    django.contrib.staticfiles,
    app.apps.AppConfig,
    app1.apps.App1Config,
    app2.apps.App2Config,
]
区分多个app的路由方法一
技术分享图片
例题:
    1.from django.conf.urls import include
    # 在总路由里面添加 include
    2.urlpatterns = [
        url(r^app01/, include(app01.urls)),
        url(r^app02/, include(app02.urls)),
      ]
    #  在总路由写include 分发出去
    3. 在各自的app 创建一个 urls.py 文件 并写入以下代码
       from django.conf.urls import url

       from app1 import views

        urlpatterns = [
            url(rlogin/, views.login, name=login),
        ]

    #注意: http访问的时候不能直接输入http://127.0.0.1:8080/login 这样识别不了
    # 一定要输入http://127.0.0.1:8080/app1/login 如果是app2内的 就要输入app2 不能直接输入login
方法二: 通过路由分发

4. 小知识路由别名与方向解析的用法

技术分享图片
6. 路由别名是干什么用的: 主要是吧路由的名字自定义,这样路由名字修改了,前台显示的也不需要修改
    1. urlpatterns = [
        url(rlogin/, views.login ,name=login),
       ]
    #这里name = ‘login‘ 这里就是定义路由别名的名字

    2. <a href="{% url ‘login‘ %}"> dianwo </a>
    #在模板层 输入 {% url ‘别名‘ %}  这样就是定义好了路由别名

7. 反向解析的作用可以后台映射拿到前面模板的内容信息:    注意:反向解析,解析的是路由别名,使用反向解析一定要先设置好路由别名
例题:
1. 在views 界面 添加  reverse
from django.shortcuts import render, HttpResponse, redirect, reverse

2. url(rlogin/,views.login,name=login), #无参数
    url(rlogin/(\d+)/$,views.login,name=login),  #无名分组
    url(rlogin/(?P<id>\d+)/$,views.login,name=login), #有名分组

3. {% url index %} #无参数 在模板层
    {% url index 123 %   } # 无名分组 在模板层
    {% url index id=446 %} # 又名分组 在模板层

4.  url =reverse(login)   #无参数
    url = reverse(index,args=(123,)) #无名参数
    url = reverse(login, kwargs={id:446}) #有名参数

例题:
def delete_flag_ready(request, id):

        print("可以删除")

        url = reverse(delete_flag_test, kwargs={id: id})  # 反解对有名分组传参
        url = reverse(delete_flag_test, args=(id, ))  # 反解对无名分组传参
        print(>>>, url)
        return redirect(url)
    else:
        # 直接返回 index
        print("无需删除")
        url = reverse(index)      #注意,这里的反向解析,‘index‘是路由别名
        return redirect(url)
解析与路由别名

5. 案例:

技术分享图片
‘‘‘
主路由:
from django.conf.urls import include
urlpatterns = [
    url(r‘^app01/‘, include(‘app01.urls‘, namespace=‘app01‘)),
    url(r‘^app02/‘, include(‘app02.urls‘, namespace=‘app02‘)),
]

app01应用下路由
from django.conf.urls import url
from app01 import views
urlpatterns = [
    url(r‘^test/‘, views.test, name=‘test‘)
]

app02应用下路由
from django.conf.urls import url
from app02 import views
urlpatterns = [
    url(r‘^test/‘, views.test, name=‘test‘)
]

前端页面反向解析:{% url ‘app01:test‘ %} | {% url ‘app02:test‘ %}
视图函数reverse方法:url = reverse(‘app01:test‘) | url = reverse(‘app02:test‘)
‘‘‘
案例综合运用

 

Django的路由层详情

原文:https://www.cnblogs.com/gukai/p/10770859.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!