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实现Linux命令xxd -i功能
Mar 06 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
Python中property函数用法实例分析
Jun 04 Python
Python延时操作实现方法示例
Aug 14 Python
python实现感知器算法(批处理)
Jan 18 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
Python如何计算语句执行时间
Nov 22 Python
python实现将range()函数生成的数字存储在一个列表中
Apr 02 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 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中的Cannot modify header information 问题
2013/08/12 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
javascript定时器完整实例
2015/02/10 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
node.js到底要不要加分号浅析
2018/07/11 Javascript
python自动化测试实例解析
2014/09/28 Python
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
Python 操作 MySQL数据库
2020/09/18 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
性能测试工程师的面试题
2015/02/20 面试题
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
日本语毕业生自荐信
2014/02/01 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
妇女工作先进事迹
2014/08/17 职场文书
python标准库ElementTree处理xml
2022/05/20 Python