我正在开发一个网络应用程序,让您可以在给定日期轮询 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/