【发布时间】:2015-08-25 06:22:40
【问题描述】:
我正在开发一个 web 应用程序,让您可以在给定日期轮询 Django 后端以获取 IRC 日志。我的网址结构是:
example.tld/weblogs/<example channel>/dl/<example date>.<example format>
用户可以通过 GET 查询以下 url 方案:
example.tld/weblogs/<example channel>/
获取最后 100 行 IRC 数据。
当请求是显式 GET 时,我的 URL 匹配文件正确路由到正确的视图 (views.download),但是我无法仅在 example.tld/weblogs/<example channel>/dl/ 上执行 POST 并将 POST 后的表单数据发送到与显式 GET 相同的视图。
例如,如果用户键入显式 URL example.tld/weblogs/foo/dl/2015-01-01.json,请求将被正确路由到正确的视图。
但是,如果表单向example.tld/weblogs/foo/dl/ 提交 POST,则 POST 请求将发送到处理对 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
【问题讨论】:
-
正则表达式模式按预期工作,问题出在其他地方。