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之编写简单乘法口诀表实现代码
Feb 27 Python
Python numpy 点数组去重的实例
Apr 18 Python
python和shell获取文本内容的方法
Jun 05 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
python读csv文件时指定行为表头或无表头的方法
Jun 26 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
python SVD压缩图像的实现代码
Nov 05 Python
Python 2种方法求某个范围内的所有素数(质数)
Jan 31 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 Python
用于ETL的Python数据转换工具详解
Jul 21 Python
scrapy redis配置文件setting参数详解
Nov 18 Python
python爬虫中url管理器去重操作实例
Nov 30 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/02/11 PHP
php跨服务器访问方法小结
2015/05/12 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
PHP7 弃用功能
2021/03/09 PHP
JavaScript中链式调用之研习
2011/04/07 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
js表头排序实现方法
2015/01/16 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
理解javascript对象继承
2016/04/17 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
Python中偏函数用法示例
2018/06/07 Python
Python八皇后问题解答过程详解
2019/07/29 Python
centos7之Python3.74安装教程
2019/08/15 Python
Python常驻任务实现接收外界参数代码解析
2020/07/21 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
搬迁通知
2015/04/20 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers