Django路由系统

分组命名匹配

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

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

【示例】

from django.conf.urls import url

from . import views

urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
]

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

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

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

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

视图函数中指定默认值

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

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

include其他的URLconfs

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

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

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

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

​ 【示例】

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^jjzz/(?P<year>[0-9]{4})/$', views.Index.as_view(),{"type":"XXXXXX"}),
url(r'^fileupload/$', views.Upload.as_view()),
] # 在视图的对应函数中,需要定义额外参数来接收
class Index(View):
jjzz = 'jjzz on the world'
def get(self, request,**kwargs):
print(kwargs)
print(kwargs["year"])
print(kwargs["type"])
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. 根据传入url请求,返回json字符串

    /** * 根据传入url请求,返回json字符串 * @param url * @return * @throws UnsupportedEncodingException */ public st ...

  2. 【三】材质反射属性模型BRDF

    双向反射分布函数(BRDF:Bidirecitonal Reflectance Distribution Function) 用来描述物体表面对光的反射性质 预备知识 BRDF的定义和性质 BRDF模 ...

  3. 【bug解决】ios微信浏览器中背景音乐无法播放

    我记得之前在一次项目中,出现过浏览报错: 当时的文档链接如右:[解决]HTML5新标签audio的autoplay自动播放属性失效的解决方案 所以在这次H5的制作中,我使用了iframe来加载音频文件 ...

  4. 解压 压缩 C#

    public class SharpZip { public SharpZip() { } /// <summary> /// 压缩 /// </summary> /// &l ...

  5. The Semantics of Constructors: The Default Constructor (默认构造函数什么时候会被创建出来)

    本文是 Inside The C++ Object Model, Chapter 2的部分读书笔记. C++ Annotated Reference Manual中明确告诉我们: default co ...

  6. 博弈dp入门 POJ - 1678 HDU - 4597

    本来博弈还没怎么搞懂,又和dp搞上了,哇,这真是冰火两重天,爽哉妙哉. 我自己的理解就是,博弈dp有点像对抗搜索的意思,但并不是对抗搜索,因为它是像博弈一样,大多数以当前的操作者来dp,光想是想不通的 ...

  7. ssh链接取消密码

    进入到存放秘钥的文件夹,输入 ssh-add id_rsa 然后输入两次密码即可.

  8. html基础(选择器,font属性 )

    css选择器    css与html的关系   css以html为基础 css主要设置的就是html标签中的属性样式,css进行网页布局.   css语法 选择器{属性:值,属性:值}   css选择 ...

  9. Java 全栈知识体系 - 个人博客

    摘自:https://www.pdai.tech/ 著作权归https://www.pdai.tech所有. 链接:https://www.pdai.tech/ Java 全栈知识体系 包含: Jav ...

  10. LeetCode 81. 搜索旋转排序数组 II(Search in Rotated Sorted Array II)

    题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] ). 编写一个函数来判断给定的目标值是否存在 ...