如何将参数日期传递给 url 调度程序但作为命名参数

时间:2021-02-10 01:25:24

标签: django django-rest-framework

我一直在阅读大量教程和 stackoverflow 问题,但我还没有找到如何做到这一点。我需要在 URL 上的 GET 调用中传递一个 Date 类型的参数。 我知道这听起来很简单,但我是 Django 的新手,我发现的主要是这样的:

Django url that captures yyyy-mm-dd date

如果我想要一个像这样的 URL,所有这些答案都可以解决问题

http:www.myweb.com/2021/09/02

如果我想为博客或网站编写 url 那就太好了,但我是为端点做的,就我而言,我需要这样的东西

/some-action-endpoint/?created_at_gte=2020-01-01

因此,我需要捕获一个值为 2020-02-01 的参数(希望命名为 created_at_gte)(如果我可以立即将其捕获为 Date 对象,那就太棒了,但我可以使用字符串)

所以,我的问题是: 1.- 创建这样的组就足够了

url(r'^my-endpoint/(?P<created_at_gte>[(\d{2})[/.-](\d{2})[/.-](\d{4})]{4})/$', views.my_view),

注意_:顺便说一句,前一个不起作用,如果有人知道为什么它会非常感激。

2.-端点需要两个参数:created_at_gte 和 created_at_lte。我该如何处理?我需要在 url 模式中添加两个 url 吗?

我使用的是 Django 1.11 和 Python 2.7。不能使用其他版本。

1 个答案:

答案 0 :(得分:0)

查询参数不是 URL 匹配行为的一部分,因此不幸的是,您需要将它们作为查询参数而不是 URL 路径元素来处理,这意味着您必须自己做更多的事情,而不是依赖模式匹配来拒绝错误的请求。

只要您的基本 URL 模式(在您的示例中为 ^my-endpoint/)是明确的,并且您愿意处理参数可能未设置或可能设置为某些内容的可能性,您就可以做您想做的事情这不会在您的视图中解析为日期,但您不会获得正则表达式派生的保证或将它们绑定到查看函数参数的能力。

相反,您必须从 request.GET QueryDict 对象中提取它们。看起来像这样:

在您的网址格式中:

url(r'^my-endpoint/$', views.my_view),

然后在您的视图中:

def my_view(request):
    created_at_start = request.GET.get("created_at_gte")
    created_at_end = request.GET.get("created_at_lte")
    # you now have no guarantees about these values except that if not None they'll be strings
    # remember to do something appropriate for None, empty strings, strings that aren't dates, strings where end is before the start, etc
相关问题