zoukankan      html  css  js  c++  java
  • Django

    主要内容

    • 1. URLconf配置
    • 2.命名URL和URL反向解析
    • 3.namespace 
    • 4.路由系统的本质(路由的分发)

    1. URLconf配置

    1.1 基本格式

    from django.conf.urls import url
    urlpatterns = [
             url(正则表达式,view视图,参数,别名)
    ]

    参数说明:

    • 正则表达式:一个正则表达式字符串
    • view视图:一个可调用对象,通常为一个视图函数
    • 参数:可选的要传递给视图函数的默认参数(字典形式)
    • 别名:一个可选的name参数

    注意:

    Django 2.0版本中的路由系统是下面的写法

    官方文档:https://docs.djangoproject.com/en/1.11/topics/http/urls/

    from django.conf.urls import path,re_path
    urlpatterns = [
             path(正则表达式,view视图,参数,别名)
    ]

    1.2 正则表达式

    (1)分组匹配

    #匹配到参数,按照位置参数的方式传递给视图函数  视图函数需要定义形参接收变量
    url(r'^del_publisher/(d+)', views.del_publisher),

    注:

    若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。

    从URL上捕获的参数都是字符串类型

    (2)命名分组

    #示例
    url(r'^blog/(?P<year>d{4})/[1-9]{2}/$', views.blog)

    1.3 include 其他的urls.py

    from django.conf.urls import url,include
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'app01/',include('app01.urls')),
        url(r'app02/',include('app02.urls'))
    ]

    2.URL的命名和URL反向解析

    2.1 普通url

    (1)命名

    #以命名publisher_list为例
    url(r'^publisher_list/', views.publisher_list, name='publisher'),

    (2)使用

    • 在视图中使用
      from django.urls import reverse
      reverse('publisher')
    • 在模板中使用
      {% url 'publisher'%} 

     2.2 使用分组

    (1)命名

    url(r'^blog/(d{4})/([1-9]{2})/$', views.blog, name='blog')

    (2)使用

    • 在视图中使用
      reverse('blog',args=('2018','12'))  
    • 在模板中使用
      {% url  ’blog‘  ’2018‘  ’12‘  %}    

    2.3 使用命名分组

    (1)定义

    url(r'^blog/(?P<year>d{4})/(?P<month>[1-9]{2})/$', views.blog, name='blog')

    (2)使用

    • 视图中使用
      reverse('blog',args=('2018','12'))         ‘/blog/2018/12/'
      
      reverse('blog', kwargs={'month': '12', 'year': '2018'})
    • 模板中使用
      {% url 'blog'  '2018' '12' %}     ——》 ‘/blog/2018/12/'
      
      {% url 'blog'  year='2018' month='12' %}    ——》  ‘/blog/2018/12/'
      
      {% url 'blog'  month='12' year='2018'  %}    ——》  ‘/blog/2018/12/'

     3.namespace

    (1)定义

    url(r'app01/',include('app01.urls',namespace='app01')),
    url(r'app02/',include('app02.urls',namespace='app02'))
    url(r'^home/$', views.home, name='home'),   # app01

    (2)使用

    • 视图
      reverse(’app01:home‘)    ——》 /app01/home/
      
      reverse(’app02:home‘)    ——》 /app02/home/
    • 模板
      {% url 'app01:home' %}   —》 /app01/home/

    ---恢复内容结束---

    主要内容

    • 1. URLconf配置
    • 2.命名URL和URL反向解析
    • 3.namespace 

    1. URLconf配置

    1.1 基本格式

    from django.conf.urls import url
    urlpatterns = [
             url(正则表达式,view视图,参数,别名)
    ]

    参数说明:

    • 正则表达式:一个正则表达式字符串
    • view视图:一个可调用对象,通常为一个视图函数
    • 参数:可选的要传递给视图函数的默认参数(字典形式)
    • 别名:一个可选的name参数

    注意:

    Django 2.0版本中的路由系统是下面的写法

    官方文档:https://docs.djangoproject.com/en/1.11/topics/http/urls/

    from django.conf.urls import path,re_path
    urlpatterns = [
             path(正则表达式,view视图,参数,别名)
    ]

    1.2 正则表达式

    (1)分组匹配

    #匹配到参数,按照位置参数的方式传递给视图函数  视图函数需要定义形参接收变量
    url(r'^del_publisher/(d+)', views.del_publisher),

    注:

    若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。

    从URL上捕获的参数都是字符串类型

    (2)命名分组

    #示例
    url(r'^blog/(?P<year>d{4})/[1-9]{2}/$', views.blog)

    1.3 include 其他的urls.py

    from django.conf.urls import url,include
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'app01/',include('app01.urls')),
        url(r'app02/',include('app02.urls'))
    ]

    2.URL的命名和URL反向解析

    2.1 普通url

    (1)命名

    #以命名publisher_list为例
    url(r'^publisher_list/', views.publisher_list, name='publisher'),

    (2)使用

    • 在视图中使用
      from django.urls import reverse
      reverse('publisher')
    • 在模板中使用
      {% url 'publisher'%} 

     2.2 使用分组

    (1)命名

    url(r'^blog/(d{4})/([1-9]{2})/$', views.blog, name='blog')

    (2)使用

    • 在视图中使用
      reverse('blog',args=('2018','12'))  
    • 在模板中使用
      {% url  ’blog‘  ’2018‘  ’12‘  %}    

    2.3 使用命名分组

    (1)定义

    url(r'^blog/(?P<year>d{4})/(?P<month>[1-9]{2})/$', views.blog, name='blog')

    (2)使用

    • 视图中使用
      reverse('blog',args=('2018','12'))         ‘/blog/2018/12/'
      
      reverse('blog', kwargs={'month': '12', 'year': '2018'})
    • 模板中使用
      {% url 'blog'  '2018' '12' %}     ——》 ‘/blog/2018/12/'
      
      {% url 'blog'  year='2018' month='12' %}    ——》  ‘/blog/2018/12/'
      
      {% url 'blog'  month='12' year='2018'  %}    ——》  ‘/blog/2018/12/'

     3.namespace

    (1)定义

    url(r'app01/',include('app01.urls',namespace='app01')),
    url(r'app02/',include('app02.urls',namespace='app02'))
    url(r'^home/$', views.home, name='home'),   # app01

    (2)使用

    • 视图
      reverse(’app01:home‘)    ——》 /app01/home/
      
      reverse(’app02:home‘)    ——》 /app02/home/
    • 模板
      {% url 'app01:home' %}   —》 /app01/home/ 

     4.路由系统的本质(路由的分发)

    4.1 使用include实现路由的分发

    • 根urls.py中
      from django.conf.urls import url,include
      from django.contrib import admin
      
      
      #  return (urlconf_module, app_name, namespace)
      urlpatterns = [
          url(r'^admin/', admin.site.urls),
          url(r'^rbac/', include('app01.urls,nameapace='rbac)
      ]
    • app01.urls.py
      from django.conf.urls import url,include
      from app01 import views
      
      urlpatterns = [
          url(r'^login/', views.login,name='l1'), #'rbac:l1'
          url(r'^logout/', include('app01.urls2'))
      ]
    • 又一级的分发 app01.urls2.py
      from django.conf.urls import url,include
      from app01 import views
      
      urlpatterns = [
          url(r'^x1/', views.login,name='l2'), # rbac:l2
          url(r'^x2/',views.login,name='l3'),  #rbac:l3
      ]

    4.2不使用include实现路由分发

    (1)include的本质

    #在include的源码中 返回的是一个元祖
    def include(arg, namespace=None, app_name=None):
        #其中元祖的第一项是放置路由关系的列表
        return (urlconf_module, app_name, namespace)

    (2) 不使用include实现路由分发

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        # 源码内部实际上是一个列表,存放路由关系
        url(r'^rbac/', ([
                            url(r'^login/', views.login),
                            url(r'^logout/', views.logout),
                            url(r'^x1/', ([
                                              url(r'^add/', views.add,name='n1'),
                                              url(r'^change/', views.change,name='n2')
                                          ], None, 'xxx'))
                        ], None, 'rbac')),
    
    ]
  • 相关阅读:
    详解应对平台高并发的分布式调度框架TBSchedule
    利用httpd配置虚拟目录创建下载站点
    在centos7下用http搭建配置svn服务
    centos7/rhel7下配置PXE+Kickstart自动安装linux系统
    centos7破解安装confluence5.9.11
    centos7破解安装jira6.3.6(含Agile)
    mysql5.6做单向主从复制Replication
    解决忘记mysql中的root用户密码问题
    centos7安装mysql5.6(rpm包安装)
    centos7/RHEL7最小化系统安装gnome图形界面
  • 原文地址:https://www.cnblogs.com/wcx666/p/10071062.html
Copyright © 2011-2022 走看看