Dynami c и пользовательские URL - PullRequest
0 голосов
/ 09 января 2020

В настоящее время я работаю над своим первым 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

URL должен быть динамически построен. Второй путь в моем фрагменте кода urls.py - это обходной путь, но этот URL не создается динамически. Моей первой идеей было просто установить значения NULL, но в результате мы получили большой URL без информации.

Я уже пытался работать с полем поиска, но вы можете использовать его только с одним значением.

Есть ли другой встроенный django или django rest подход для достижения этого динамического c URL с динамическими c параметрами запроса?

1 Ответ

0 голосов
/ 18 января 2020
  • Django получить справку от диспетчеров URL-адресов для запроса маршрутизатора к соответствующему представлению.
  • Django предоставляет как (stati c, так и динамические c) параметры для URL.
  • В django, если вы хотите сгенерировать динамический c URL, вам понадобится регулярное выражение
  • https://docs.djangoproject.com/en/3.0/topics/http/urls/#using -регулярные выражения
...