【问题标题】:Dynamic and custom Urls动态和自定义 URL
【发布时间】:2020-04-27 04:10:20
【问题描述】:

我目前正在使用我的第一个 Django REST Api,我对路由有疑问。

我有一个 JSON,它的简短格式如下所示:

{
      "name": "Summer Festival",
      "date": "2020-01-05",
      "deadline": "2020-01-01",
      "address": "Fantasy Road 50",
      "postcode": 12346,
      "location": "New York",
      (...)
}

我使用这个 ViewSet:

class EventViewSet(viewsets.ModelViewSet):
    queryset = Event.objects.all()
    serializer_class = EventSerializer

还有这个序列化器:

class EventSerializer(serializers.ModelSerializer):

    class Meta:
        model = Event
        fields = "__all__"

我的 urls.py:

router = routers.DefaultRouter()
router.register("events", views.EventViewSet)

urlpatterns = [
    path('', include(router.urls)),
    path(
        'events/location=<str:address>&from=<str:from>&to=<str:to>',
         views.EventViewSet.as_view({"get": "list"})),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

场景:

在我的前端有一个表单,您可以在其中选择邮政编码和日期范围。 当用户刚刚插入他的邮政编码时,他今天会获取所有事件,并且 url 应该如下所示:

http://127.0.0.1:8000/events/postcode=12345

当用户选择起始日期和邮政编码时,它应该是这样的:

http://127.0.0.1:8000/events/postcode=12345&from=2019-01-01

使用这样的日期范围 + 邮政编码:

http://127.0.0.1:8000/events/postcode=12345&from=2019-01-01&to=2019-02-01

网址应该是动态构建的。 我的 urls.py 代码 sn-p 中的第二条路径是一种解决方法,但此 url 不是动态创建的。我的第一个想法是将值设置为 null,但结果只是一个没有信息的大 url。

我已经尝试使用查找字段,但您只能将其与单个值一起使用。

是否有另一种内置的 django 或 django rest 方法来实现这个带有动​​态查询参数的动态 url?

【问题讨论】:

  • 你看过 django-filter 吗?它将所有这些过滤选项放入查询字符串中,这很可能是它们所属的位置。尝试在 url 的相对路径中执行此操作似乎很痛苦。
  • 您的过滤网址错误。它们应该是这样的:/events/?postcode=12345(带问号!!)。这样postcode 是一个查询参数,它位于request.GET 中,甚至无需创建新的url。
  • 不,我以前从未听说过。我虽然在 Django Rest 中有一个选项,因为路由器处理 url:django-rest-framework.org/api-guide/routers
  • @dirkgroten 啊好吧我不知道!我会检查一下,希望这可以解决我的问题。

标签: django django-rest-framework


【解决方案1】:

【讨论】:

    猜你喜欢
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2013-04-21
    • 1970-01-01
    • 2022-09-20
    • 2017-07-13
    • 1970-01-01
    相关资源
    最近更新 更多