python - Django URL 正则表达式与 GET 正确匹配但与 POST 不匹配

标签 python regex django http

我正在开发一个网络应用程序,让您可以在给定日期轮询 Django 后端以获取 IRC 日志。我的网址结构是:

example.tld/weblogs/<example channel>/dl/<example date>.<example format>

用户可以 GET 查询以下 url 方案:

example.tld/weblogs/<example channel>/

同时获取 IRC 数据的最后 100 行。

当请求是显式 GET 时,我的 URL 匹配文件正确地路由到正确的 View ( views.download ),但是我无法仅对 example.tld/weblogs/<example channel>/dl/ 执行 POST并将 POST 形式的数据发送到与显式 GET 相同的 View 。

例如,如果用户键入显式 URL example.tld/weblogs/foo/dl/2015-01-01.json请求将被正确路由到正确的 View 。 但是,如果表单提交 POST 到 example.tld/weblogs/foo/dl/ , POST 请求被发送到处理请求的 View example.tld/weblogs/foo (在这种情况下)。

项目 urls.py :

from django.conf.urls import include, url
from django.contrib import admin
from log import views

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^weblog/', include('log.urls')),
]

log.urls :

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.weblogs, name='weblogs'),
    url(r'^(?P<channel>[^, ]{1,200})/$', views.channel, name="channel"),
    url(r'^(?P<channel>[^, ]{1,200})/dl/(?P<date>[0-9]{4}-[0-9]{2}-[0-9]{2}).(?P<format>(html|json|yaml|xml))', views.download),
]

GET 请求如下所示:

"GET /weblog/example/dl/2015-08-20.yaml/ HTTP/1.1" 200 4621

POST 请求如下所示:

"POST /weblog/example/dl/ HTTP/1.1" 200 74

最佳答案

在您的正则表达式中,[^, ] 匹配除逗号和空格之外的任何字符,包括正斜杠。

要排除正斜杠,请将其更改为 [^,/]。或者,类似 [-\w] ​​+ 的内容可能是合适的。

关于python - Django URL 正则表达式与 GET 正确匹配但与 POST 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32196844/

相关文章:

python - Python 中的正则表达式用于匹配可能包含或不包含某些部分的模式

c# - C# 正则表达式中的反向引用问题

django - 无法通过管道从 python 命令输出

Django 只在表单中提交 csrf token ?

python直方图单线

python - 使用pywinauto连接远程桌面

python - App Engine 中的 db.ReferenceProperty() 与 ndb.KeyProperty

python - 更改 IP 地址 Python Selenium

regex - R:提取包含在两个子字符串之间的所有子字符串的最快方法

django - 如果引发ValidationError,则删除链接在Django admin嵌入式表单集中消失。