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先序遍历二叉树问题
Nov 10 Python
Django 使用logging打印日志的实例
Apr 28 Python
使用matplotlib画散点图的方法
May 25 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
Python装饰器原理与基本用法分析
Jan 07 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
python如何写个俄罗斯方块
Nov 06 Python
Python基础详解之描述符
Apr 28 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的Json中文处理解决方案
2016/09/29 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
离婚协议书包括哪些内容
2014/10/16 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
班主任寄语2016
2015/12/04 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android