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判断IP地址合法性的方法实例
Mar 13 Python
Python的另外几种语言实现
Jan 29 Python
python一键升级所有pip package的方法
Jan 16 Python
Python实现连接postgresql数据库的方法分析
Dec 27 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
python实现抽奖小程序
Apr 15 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
Django--权限Permissions的例子
Aug 28 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
Python yield的用法实例分析
Mar 06 Python
Python如何实现Paramiko的二次封装
Jan 30 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
May 17 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写入、删除与复制文件的方法
2015/06/20 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
Python中交换两个元素的实现方法
2018/06/29 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
Python3简单实现串口通信的方法
2019/06/12 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
一份Java笔试题
2012/02/21 面试题
人事行政主管岗位职责
2013/12/22 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
自我推荐信怎么写
2015/03/24 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏