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中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
django实现分页的方法
May 26 Python
python黑魔法之参数传递
Feb 12 Python
python操作 hbase 数据的方法
Dec 18 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
python ddt实现数据驱动
Mar 14 Python
python基于http下载视频或音频
Jun 20 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
Pytest测试框架基本使用方法详解
Nov 25 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的FTP学习(一)
2006/10/09 PHP
关于Intype一些小问题的解决办法
2008/03/28 PHP
PHP中去掉字符串首尾空格的方法
2012/05/19 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
详解python while 函数及while和for的区别
2018/09/07 Python
Python 移动光标位置的方法
2019/01/20 Python
Python列表推导式实现代码实例
2020/09/09 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
文明家庭先进事迹材
2014/01/27 职场文书
银行服务感言
2014/03/01 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
党员个人年度总结
2015/02/14 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
python中数组和列表的简单实例
2022/03/25 Python