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实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
Apr 18 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
树莓派实现移动拍照
Jun 22 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 Python
python实现简单的名片管理系统
Apr 26 Python
整理Python中常用的conda命令操作
Jun 15 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中模拟链表和链表的基本操作示例
2016/02/27 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
基于JavaScript实现轮播图效果
2021/01/02 Javascript
Python入门篇之数字
2014/10/20 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
python多线程与多进程及其区别详解
2019/08/08 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
详解python with 上下文管理器
2020/09/02 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
Nike德国官网:Nike.com (DE)
2018/11/13 全球购物
幼儿园实习自我鉴定
2013/12/15 职场文书
关于安全的标语
2014/06/10 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
出国签证在职证明范本
2014/11/24 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server