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 04 Python
Python是编译运行的验证方法
Jan 30 Python
Python中的Numeric包和Numarray包使用教程
Apr 13 Python
Python Sql数据库增删改查操作简单封装
Apr 18 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
解决python 上传图片限制格式问题
Oct 30 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
Jan 10 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 Python
教你如何使用Python下载B站视频的详细教程
Apr 29 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 Python
Python预测分词的实现
Jun 18 Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 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图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
php利用header函数下载各种文件
2016/08/24 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
Vue异步加载about组件
2017/10/31 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
python使用fork实现守护进程的方法
2017/11/16 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
python的scipy实现插值的示例代码
2019/11/12 Python
css3学习心得分享
2013/08/19 HTML / CSS
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
历史系毕业生自荐信
2013/10/28 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js