zoukankan      html  css  js  c++  java
  • Django的路由层详情

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

    url(r'index', views.index)
    #这里的index 解析都可以被解析到的, abcindex   index   indexabc
    url(r'^index', views.index)
    #这里的index 解析是index  indexabc
    url(r'^index/$', views.index)
    #这里的index 解析是精确解析 只有index 才可以被解析
    
    例题:
    url(r'index/', 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(r'login/', 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(r'login/', 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(r'login/',views.login,name='login'), #无参数
        url(r'login/(d+)/$',views.login,name='login'),  #无名分组
        url(r'login/(?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')
    '''
    案例综合运用
  • 相关阅读:
    [LintCode] 最长上升子序列
    [LintCode] 最长公共前缀
    [LintCode] A + B 问题
    [hihoCoder] 拓扑排序·一
    [LintCode] 拓扑排序
    [LintCode] 第k大元素
    [LintCode] 最小路径和
    [LeetCode] Factorial Trailing Zeros
    [LintCode] 尾部的零
    [LeetCode] Length of Last Word
  • 原文地址:https://www.cnblogs.com/gukai/p/10770859.html
Copyright © 2011-2022 走看看