Django学习之URLconf
Django处理request的步骤:
1.确定根URLconf
2.载入urls.py,找到变量urlpatterns,urlpatterns是django.conf.urls.url()的实例对象(列表)
url(regex, view, kwargs=None, name=None)[source]
regex是一个字符串或者 ugettext_lazy(),字符串包含正则表达式,兼容re模块,字符串通常使用原始字符串语法(r“),以便它们可以包含像\ d这样的序列,而不需要使用另一个反斜杠来转义反斜杠。 view参数是一个视图函数,或者基于类的视图的as_view()的结果,亦或者是一个include()。 kwargs允许像视图函数或者方法传递额外的参数,参见 Passing extra options to view functions查看实例。 name参数的意义查看 Naming URL patterns
Naming URL patterns
为了执行URL反转,您需要使用命名URL模式,如上例所示。 用于URL名称的字符串可以包含您喜欢的任何字符。 当您命名URL模式时,请确保使用不太可能与任何其他应用程序选择的名称冲突的名称。 如果您调用了URL模式注释,而另一个应用程序也执行相同的操作,那么在使用此名称时,不能保证在您的模板中插入哪个URL。 在您的网址名称上放置一个前缀,也许是从应用程序名称派生出来的,可以减少碰撞的几率。 我们建议像myapp-comment而不是comment。
Passing extra options to view functions URLconfs有一个钩子,可以让您传递额外的参数到您的视图函数,作为Python字典。 django.conf.urls.url()函数可以使用一个可选的第三个参数,它应该是一个额外的关键字参数的字典,以传递给view函数。 例如:
from django.conf.urls import url
from . import views urlpatterns = [
url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
]
在联合框架中使用此技术将元数据和选项传递给视图。
在这个例子中,对于/ blog / 2005 /的请求,Django将调用views.year archive(request,year ='2005',foo ='bar')。
处理冲突:
可以使用一个URL模式来捕获命名关键字参数,并在其额外参数的字典中传递具有相同名称的参数。 当这种情况发生时,字典中的参数将被使用,而不是在URL中捕获的参数。
3.Django按顺序执行每一个URL模式,当第一个request的URL匹配即停止向下执行
4.一旦正则表达式匹配成功,Django导入并执行视图函数(或者基于类的视图函数),以下参数可传递到视图函数:
HttpRequest实例对象
如果匹配的正则表达式没有返回任何命名组,那么来自正则表达式的匹配将作为位置参数提供。
关键字参数由正则表达式匹配的任何命名组组成,由在django.conf.urls.url()的可选kwargs参数中指定的任何参数覆盖。
5.如果没有正则表达式匹配,或者在此过程中的任何一点出现异常,Django将调用适当的错误处理视图。 参见下面的错误处理。
命名组
上述示例使用简单的,未命名的正则表达式组(通过括号)捕获URL的位,并将它们作为位置参数传递给视图。 在更高级的使用中,可以使用命名的正则表达式组来捕获URL位,并将它们作为关键字参数传递给视图。
在Python正则表达式中,命名的正则表达式组的语法是(?P <name> pattern),其中name是组的名称,而pattern是某些匹配的模式。
Django学习之URLconf的更多相关文章
- Django学习之十: staticfile 静态文件
目录 Django学习之十: staticfile 静态文件 理解阐述 静态文件 Django对静态文件的处理 其它方面 总结 Django学习之十: staticfile 静态文件 理解阐述 ...
- Django学习笔记(11)——开发图书管理页面
一,项目题目: 开发图书管理页面 该项目主要练习Django对多个数据库进行增删改查的操作. 二,项目需求: 基础需求:75% 1. 列出图书列表.出版社列表.作者列表 2. 点击作者,会列出其出版的 ...
- Django 学习笔记1-- URLconf
今天好像巴黎有点乱,希望明天太阳还会照常升起. 简介 Django 是一个由 Python 编写.开源并采用经典的 MVC 设计模式的 Web Full Stack 应用框架. 在 Django 中, ...
- 今天主要推荐一下django学习的网址!
前言:每个月忙碌的头20天后,在上班时间投入到django理论学习的过程中,花了差不多3天时间简单的研究了一下django,着实废了我不少脑细胞. 采用虫师前辈的一张图和话: 如果你把这过程梳理清晰了 ...
- Django 学习笔记之四 QuerySet常用方法
QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的. 1.建立模型: 2.数据文件(test.txt) 3.文件数据入库(默认的sqlite3) 入库之前执行 数据库同步命 ...
- Django 学习笔记之三 数据库输入数据
假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...
- Django学习系列之Form基础
Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- Django学习笔记(精简版)
dos:安装:python setup.py install 环境变量:D:\Python27;D:\Python27\Lib\site-packages\django\bin; 转到创建的目录:dj ...
随机推荐
- 【tarjan求割顶】BZOJ2730-[HNOI2012]矿场搭建
[题目大意] 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍 ...
- [OpenJudge90][序列DP+乱搞]滑雪
滑雪 总时间限制: 1000ms 内存限制: 65536kB [描述] Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次 ...
- 杂谈PID控制算法——第一篇:三个量
电赛训练了大半个暑假,人渐渐开始进入到了疲倦期.既然这样那就好好休息下自己也好吧. 休息也不能光休息,乘机把平常写过的一些东西好好整理也好. 从第一次训练开始我们就接触到了一个新的名词——PID控制理 ...
- sql-server-on-linux-how-i-think-they-did-it : Anthony Nocentino's Blog
http://www.sqlservercentral.com/blogs/anthony-nocentinos-blog/2016/11/21/sql-server-on-linux-how-i-t ...
- zk介绍
1. 配置管理 Zookeeper提供了这样的一种服务:一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更.这样就省去手动拷贝配置了,还保证了可靠和一致性. ...
- [Git] git merge和rebase的区别
git merge 会生成一个新得合并节点,而rebase不会 比如: D---E test / A---B---C---F master 使用merge合并, 为分支合并自动识别出最佳的同源合并点: ...
- Kubernetes环境下如何运行Coherence缓存集群
Oracle官方出了一个如何在Docker环境下运行Coherence的技术文档,大家可以参考: https://github.com/oracle/docker-images/tree/master ...
- 从配置websocket理解nginx
原文地址:http://www.niu12.com/article/2 今天由于写了一个简单的基于h5 websoceket的聊天室,再本地都是好好了. 但是上到服务器后就发现无法行的通, 查 ...
- python - ImportError: No module named pywintypes
must restart the python shell to avoid this issue after pywin32 installed
- npm模块安装机制
npm 是 Node 的模块管理器,功能极其强大.它是 Node 获得成功的重要原因之一.正因为有了npm,我们只要一行命令:npm install,就能安装别人写好的模块 . 一.从 npm ins ...