Python的Django框架中从url中捕捉文本的方法


Posted in Python onJuly 20, 2015

每个被捕获的参数将被作为纯Python字符串来发送,而不管正则表达式中的格式。 举个例子,在这行URLConf中:

(r'^articles/(?P<year>\d{4})/$', views.year_archive),

尽管 \d{4} 将只匹配整数的字符串,但是参数 year 是作为字符串传至 views.year_archive() 的,而不是整型。

当你在写视图代码时记住这点很重要,许多Python内建的方法对于接受的对象的类型很讲究。 许多内置Python函数是挑剔的(这是理所当然的)只接受特定类型的对象。 一个典型的的错误就是用字符串值而不是整数值来创建 datetime.date 对象:

>>> import datetime
>>> datetime.date('1993', '7', '9')
Traceback (most recent call last):
  ...
TypeError: an integer is required
>>> datetime.date(1993, 7, 9)
datetime.date(1993, 7, 9)

回到URLconf和视图处,错误看起来很可能是这样:

# urls.py

from django.conf.urls.defaults import *
from mysite import views

urlpatterns = patterns('',
  (r'^articles/(\d{4})/(\d{2})/(\d{2})/$', views.day_archive),
)

# views.py

import datetime

def day_archive(request, year, month, day):
  # The following statement raises a TypeError!
  date = datetime.date(year, month, day)

因此, day_archive() 应该这样写才是正确的:

def day_archive(request, year, month, day):
  date = datetime.date(int(year), int(month), int(day))

注意,当你传递了一个并不完全包含数字的字符串时, int() 会抛出 ValueError 的异常,不过我们已经避免了这个错误,因为在URLconf的正则表达式中已经确保只有包含数字的字符串才会传到这个视图函数中。
决定URLconf搜索的东西

当一个请求进来时,Django试着将请求的URL作为一个普通Python字符串进行URLconf模式匹配(而不是作为一个Unicode字符串)。 这并不包括 GET 或 POST 参数或域名。 它也不包括第一个斜杠,因为每个URL必定有一个斜杠。

例如,在向 http://www.example.com/myapp/ 的请求中,Django将试着去匹配 myapp/ 。在向 http://www.example.com/myapp/?page=3 的请求中,Django同样会去匹配 myapp/ 。

在解析URLconf时,请求方法(例如, POST , GET , HEAD )并 不会 被考虑。 换而言之,对于相同的URL的所有请求方法将被导向到相同的函数中。 因此根据请求方法来处理分支是视图函数的责任。

 

Python 相关文章推荐
Python 文件重命名工具代码
Jul 26 Python
Python类属性的延迟计算
Oct 22 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
python微信公众号之关键词自动回复
Jun 15 Python
numpy中的ndarray方法和属性详解
May 27 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
python 实现任务管理清单案例
Apr 25 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
Jun 09 Python
python 密码学示例——凯撒密码的实现
Sep 21 Python
如何利用Python 进行边缘检测
Oct 14 Python
Django框架中处理URLconf中特定的URL的方法
Jul 20 #Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 #Python
python通过socket查询whois的方法
Jul 18 #Python
Python字符串匹配算法KMP实例
Jul 18 #Python
Python通过正则表达式选取callback的方法
Jul 18 #Python
Django的URLconf中使用缺省视图参数的方法
Jul 18 #Python
Python的Django框架中URLconf相关的一些技巧整理
Jul 18 #Python
You might like
php header示例代码(推荐)
2010/09/08 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
javascript hashtable实现代码
2009/10/13 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
详解Python中的四种队列
2018/05/21 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
幼教简历自我评价
2014/01/28 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
成绩单公证书
2014/04/10 职场文书
科技工作者先进事迹
2014/08/16 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
反腐倡廉观后感
2015/06/08 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android