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实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
Python使用MONGODB入门实例
May 11 Python
详解Swift中属性的声明与作用
Jun 30 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
Python实现的选择排序算法示例
Nov 29 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
解决Python2.7中IDLE启动没有反应的问题
Nov 30 Python
Python使用Socket实现简单聊天程序
Feb 28 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 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中explode的负数limit用法分析
2015/02/27 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
javascript 主动派发事件总结
2011/08/09 Javascript
jQuery拖动布局其结果保存到数据库
2015/10/09 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
Python生成随机密码
2015/03/10 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
Python模拟三级菜单效果
2017/09/11 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
python双向链表原理与实现方法详解
2019/12/03 Python
python接口自动化框架实战
2020/12/23 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
质检的岗位职责
2013/11/17 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
2014年物流工作总结
2014/11/25 职场文书
高三语文复习计划
2015/01/19 职场文书
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python