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函数式编程指南(三):迭代器详解
Jun 24 Python
python数据结构之链表的实例讲解
Jul 25 Python
利用python3随机生成中文字符的实现方法
Nov 24 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
Python/ArcPy遍历指定目录中的MDB文件方法
Oct 27 Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 Python
PyQt5实现简易电子词典
Jun 25 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
基于selenium及python实现下拉选项定位select
Jul 22 Python
PyTorch device与cuda.device用法
Apr 03 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
PHP4在Windows2000下的安装
2006/10/09 PHP
PHP学习笔记之二
2011/01/17 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
javascript连续赋值问题
2015/07/08 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
学生实习推荐信范文
2013/11/26 职场文书
企业挂职心得体会
2014/09/10 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
化妆品促销活动总结
2015/05/07 职场文书
元旦主持词开场白
2015/05/29 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
深入理解go slice结构
2021/09/15 Golang
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android