Python的Django框架中从url中捕捉文本的方法

作者:goldensun 时间:2023-08-29 11:13:13 

每个被捕获的参数将被作为纯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的所有请求方法将被导向到相同的函数中。 因此根据请求方法来处理分支是视图函数的责任。

 

标签:Django,URLconf
0
投稿

猜你喜欢

  • opencv python在视屏上截图功能的实现

    2021-04-14 04:00:30
  • 利用Python和C语言分别实现哈夫曼编码

    2021-08-12 09:59:49
  • python 中的 BeautifulSoup 网页使用方法解析

    2022-06-25 19:09:26
  • Python名片管理系统+猜拳小游戏案例实现彩(色控制台版)

    2021-10-26 03:52:44
  • Python实现的最近最少使用算法

    2022-07-10 22:48:27
  • JavaScript实现Tab标签页切换的最简便方式(4种)

    2024-04-17 10:30:36
  • Go语言JSON解析器gjson使用方法详解

    2024-02-10 20:11:08
  • python通过pil模块将raw图片转换成png图片的方法

    2021-08-25 00:37:31
  • python实现彩色图转换成灰度图

    2022-03-11 02:41:30
  • Python利用Flask-Mail实现发送邮件详解

    2023-09-29 03:02:18
  • Burp Suite Pro安装和配置使用教程详解

    2023-12-18 06:56:43
  • python实现查找excel里某一列重复数据并且剔除后打印的方法

    2021-01-23 10:27:45
  • 解析mysql 缓存如何使用内存

    2024-01-19 05:21:32
  • Pycharm添加虚拟解释器报错问题解决方案

    2022-05-28 04:07:53
  • python时间序列按频率生成日期的方法

    2021-10-04 22:38:40
  • PHP面向接口编程 耦合设计模式 简单范例

    2023-10-24 09:18:27
  • 使用Pytorch实现two-head(多输出)模型的操作

    2023-08-20 07:00:05
  • MYSQL教程:查询优化之调度和锁定

    2009-02-27 15:58:00
  • python 命令行传参方法总结

    2021-06-04 20:51:00
  • Python 批量下载阴阳师网站壁纸

    2023-12-28 15:01:42
  • asp之家 网络编程 m.aspxhome.com