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 相关文章推荐
改进Django中的表单的简单方法
Jul 17 Python
Windows下搭建python开发环境详细步骤
Jul 20 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
Python方法的延迟加载的示例代码
Dec 18 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
配置 Pycharm 默认 Test runner 的图文教程
Nov 30 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
Oct 06 Python
pymysql模块的操作实例
Dec 17 Python
Python中Selenium模块的使用详解
Oct 09 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 Python
Python之matplotlib绘制饼图
Apr 13 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+Mysql无限分类的方法汇总
2015/03/02 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
Python中自定义函数的教程
2015/04/27 Python
python复制文件到指定目录的实例
2018/04/27 Python
如何用python整理附件
2018/05/13 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
Python箱型图处理离群点的例子
2019/12/09 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
国庆宣传标语
2014/06/30 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
Consul在linux环境的集群部署
2022/04/08 Servers
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android