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 相关文章推荐
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
Feb 24 Python
Python中的Numeric包和Numarray包使用教程
Apr 13 Python
python下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
python中装饰器级连的使用方法示例
Sep 29 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
python自定义函数实现一个数的三次方计算方法
Jan 20 Python
Python 判断图像是否读取成功的方法
Jan 26 Python
总结python中pass的作用
Feb 27 Python
详解python项目实战:模拟登陆CSDN
Apr 04 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
python爬取本站电子书信息并入库的实现代码
Jan 20 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
9个PHP开发常用功能函数小结
2011/07/15 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
php判断当前操作系统类型
2015/10/28 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
Javascript注入技巧
2007/06/22 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
使用vue编写一个点击数字计时小游戏
2016/08/31 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
jquery 时间戳转日期过程详解
2019/10/12 jQuery
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python re模块介绍
2014/11/30 Python
python读取word文档的方法
2015/05/09 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
学生操行评语大全
2014/04/24 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
个人委托书范本汇总
2014/10/01 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
五年级语文教学反思
2016/03/03 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
一文简单了解MySQL前缀索引
2022/04/03 MySQL
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript