Django路由系统

分组命名匹配

​ 在上述基本配置示例中,使用了简单的正则表达式分组匹配来捕获URL中的值并以位置参数的形式传递给视图,例如url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive)。而更高级的用法是,使用分组命名正则表达式组来捕获URL中的值并以关键字参数的形式传递给视图。

​ 在Python的正则表达式中,分组命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式。

【示例】

  1. from django.conf.urls import url
  2. from . import views
  3. urlpatterns = [
  4. url(r'^articles/2003/$', views.special_case_2003),
  5. url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
  6. url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
  7. url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
  8. ]

这个实现与前面的示例只有一个小的差别:捕获的值作为关键字参数而不是位置参数传递给视图函数。

  1. urlpatterns = [
  2. url(r'^admin/', admin.site.urls),
  3. url(r'^jjzz/(?P<year>[0-9]{4})/$', views.Index.as_view()),
  4. ]
  5. # 当通过/jjzz/2019/进行访问时,就相当于以 views.Index.as_view(request,year='2019')
  6. # 在views函数中要加上关键字参数或者使用**kwagrs接收参数,如下:
  7. class Index(View):
  8. jjzz = 'jjzz on the world'
  9. def get(self, request,**kwargs):
  10. print(kwargs)
  11. print(kwargs["year"])
  12. return JsonResponse({'jjzz': self.jjzz})
  13. 或者def get(self, request,year):

分组命名匹配的特点

​ 使用分组命名匹配的方式可以让URLconf 更加明晰且不容易产生参数顺序问题的错误;但是一定程度上认为,分组命名组语法太丑陋、繁琐。

URLconf匹配的位置

​ URLconf 在请求的URL 上查找,将它当做一个普通的Python 字符串。不包括GET和POST参数以及域名。

​ 例如,http://www.example.com/myapp/ 请求中,URLconf 将查找 /myapp/ 。

​ 在http://www.example.com/myapp/?page=3 请求中,URLconf 仍将查找 /myapp/ 。

​ URLconf 不检查请求的方法。也就是说,所有的请求方法 —— 同一个URL的POSTGETHEAD等等 —— 都将路由到相同的函数。

捕获的参数永远都是字符串

​ 无论正则表达式使用的是什么匹配方式,每个在URLconf中捕获的参数都作为一个普通的Python字符串传递给视图。例如,下面这行URLconf 中:

  1. url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),

传递到视图函数views.year_archive() 中的year参数永远是一个字符串类型。

视图函数中指定默认值

  1. urls配置中
  2. urlpatterns = [
  3. url(r'^jjzz/', views.Index.as_view()),
  4. url(r'^jjzz/(?P<year>[0-9]{4})/$', views.Index.as_view()),
  5. ]
  6. views配置中
  7. class Index(View):
  8. jjzz = 'jjzz on the world'
  9. def get(self, request, year='2019'):
  10. return JsonResponse({'jjzz': self.jjzz})

​ 在上述的配置前提下,两个URL模式指向相同的view views.Index.as_view() 但是第一个模式并没有从URL中捕获任何东西。如果第一个模式匹配上了,gte()函数将使用其默认参数year='2019',如果第二个模式匹配,page()将使用正则表达式捕获到的year的值。

include其他的URLconfs

当urls配置在APP中时,这时需要使用include函数将其从APP中引用到主urls中。

  1. # 在项目urls中的配置
  2. from django.conf.urls import url
  3. from django.conf.urls import include
  4. from django.contrib import admin
  5. urlpatterns = [
  6. url(r'^admin/', admin.site.urls),
  7. url(r'^app01/', include("app01.urls")),
  8. ]
  9. # 在app01中的配置
  10. from django.conf.urls import url
  11. from . import views
  12. urlpatterns = [
  13. url(r'^jjzz/(?P<year>[0-9]{4})/$', views.Index.as_view()),
  14. url(r'^fileupload/$', views.Upload.as_view()),
  15. ]
  16. # 访问时的路由地址
  17. http://127.0.0.1:8000/app01/jjzz/2019/
  18. # 相当 主目录 指到 子目录 再指到 函数,类似于路径的拼接

给视图函数传递额外的参数

​ 上篇博客介绍过URL的基本格式,其中第三个位置可以以字典的形式向视图传递参数,官方定义django.conf.urls.url() 可以接收一个可选的第三个参数,它是一个字典,表示想要传递给视图函数的额外关键字参数。

​ 【示例】

  1. urlpatterns = [
  2. url(r'^admin/', admin.site.urls),
  3. url(r'^jjzz/(?P<year>[0-9]{4})/$', views.Index.as_view(),{"type":"XXXXXX"}),
  4. url(r'^fileupload/$', views.Upload.as_view()),
  5. ]
  6. # 在视图的对应函数中,需要定义额外参数来接收
  7. class Index(View):
  8. jjzz = 'jjzz on the world'
  9. def get(self, request,**kwargs):
  10. print(kwargs)
  11. print(kwargs["year"])
  12. print(kwargs["type"])
  13. return JsonResponse({'jjzz': self.jjzz})

Django路由系统-分组命名匹配的更多相关文章

  1. Django路由系统-URL命名&URL反向解析

    命名URL和URL反向解析 前言 起始样式,HTML中的href是写死的,不能更改,如下示例代码: # urls中 urlpatterns = [ url(r'^admin/', admin.site ...

  2. Python--day67--Jsonresponse响应介绍和路由系统的分组命名匹配方式(简单介绍)

    1,Jsonresponse响应介绍: ,2,路由系统的分组命名匹配方式:(简单介绍)

  3. Django url配置 正则表达式详解 分组命名匹配 命名URL 别名 和URL反向解析 命名空间模式

    Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11版本 ...

  4. Django 路由系统

    Django 路由系统 基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 参数说 ...

  5. python 终极篇 --- django 路由系统

                          URL配置                        基本格式: from django.conf.urls import url urlpattern ...

  6. 【python】-- Django路由系统(网址关系映射)、视图、模板

    Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...

  7. Django 路由系统(URL)

    介绍 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是以这种方式告 ...

  8. python django 路由系统

    URL配置                        基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views ...

  9. Django路由系统的简介与使用

    Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL 与 为该URL调用的视图函数之间的映射表. ...

随机推荐

  1. Android WebView js混合cookie和localStorage存储

    一.cookie存储和取出: (1)存储: ------------------- **在loadURL之前调用** -------------------- /** * 同步一下cookie */ ...

  2. [Javascirpt] What’s new in JavaScript (Google I/O ’19)

    Private variable in class: class Counter { #count = 0; // cannot be access publicly get value () { r ...

  3. 使用nodejs进行开发,concurrently模块,使我们同时执行多个命令。

    concurrently模块使用. 安装模块 npm install concurrently 配置concurrently 运行多个服务 当我们使用nodejs和vue混合开发的时候.当要同时启动后 ...

  4. apache nginx 配置

    <VirtualHost *:80> ServerAdmin test@biuuu.com DocumentRoot E:\web\OTHER\test ServerName zjh.co ...

  5. js中彻底删除对象属性

    delete运算符可以删除对象的属性,但是仅仅是断开了属性和宿主对象的联系,而不会去操作被删除属性的属性值,所以就需要彻底删除的出现 function myDelete(obj,propertyNam ...

  6. python学习用到的网站

    官方地址:https://www.python.org/ 玩蛇网:http://www.iplaypython.com/

  7. 【转】vue 手动挂载$mount() 获取 $el

    原文:https://www.cnblogs.com/CyLee/p/8425183.html 手动挂载$mount() 如果没有挂载的话,没有关联的 DOM 元素.是获取不到$el的. https: ...

  8. Java线程之Timer

    简述 java.util.Timer是一个定时器,用来调度线程在某个时间执行.在初始化Timer时,开启一个线程循环提取TaskQueue任务数组中的任务, 如果任务数组为空,线程等待直到添加任务: ...

  9. [ubuntu] 外挂硬盘

    1. 查看磁盘信息 fdisk -l 这里我需要对sda进行分区,所以要进到sda中 2. 进到欲分区磁盘中 $ sudo fdisk /dev/sda Welcome to fdisk (util- ...

  10. 访问zabbix首页无法正常登陆

    访问: http://IP/zabbix/ (1) You should see the first screen of the frontend installation wizard. (2) 检 ...