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内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
Mar 16 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
python随机取list中的元素方法
Apr 08 Python
python定时检测无响应进程并重启的实例代码
Apr 22 Python
Django后台管理系统的图文使用教学
Jan 20 Python
python数据预处理 :数据抽样解析
Feb 24 Python
Python如何使用队列方式实现多线程爬虫
May 12 Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 Python
Python3 ffmpeg视频转换工具使用方法解析
Aug 10 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 Python
python turtle绘图命令及案例
Nov 23 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 判断服务器操作系统的类型
2014/02/17 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
JS控制表格隔行变色
2006/06/26 Javascript
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python+django实现文件下载
2016/01/17 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
python实现支付宝转账接口
2019/05/07 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
logging level级别介绍
2020/02/21 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
启动一个线程是用run()还是start()
2016/12/25 面试题
音乐教师求职信
2014/06/28 职场文书