Обрабатывать много ViewSets с одним URL в Django остальные рамки? - PullRequest
2 голосов
/ 02 мая 2020

Я хочу обработать три ViewSet с одним URL отношением к предоставленному request.data.

Давайте сделаем это более понятным, углубившись в код:

Вот мой router.py

# vim: ts=4 sw=4 et

from django.conf.urls import url, include
from rest_framework.routers import DefaultRouter
from . import viewsets

router = DefaultRouter()
router.register(r'endpoint', viewsets.MyViewSet, 'my-viewset')

notification_urls = [
    url(r'^', include(router.urls)),
]

Вопрос1:

Можно ли обработать три ViewSet с одним URL?

Например, , согласно отправленным данным, я хочу динамически выбрать другой ViewSet вместо назначенного MyViewSet.

---> /endpoint/ ---- | request.data['platform'] == 1 ----> ViewSet1 
                     | request.data['platform'] == 2 ----> ViewSet2
                     | request.data['platform'] == 3 ----> ViewSet3

и I знаю, что я могу вызвать другие методы ViewSet в MyViewSet что-то вроде этого Вопрос , но это действительно грязный.

Вопрос2:

Можно ли динамически передавать дополнительные параметры относительно данных, отправленных во ViewSet?

Например, , согласно отправленным данным, я хочу передать дополнительный параметр в MyViewSet.

Я знаю, что могу сделать все это вещи в методе ViewSet initial, например:

def initial(self, request, *args, **kwargs):
    self.set_platform()
    super(NotificationViewSet, self).initial(request, *args, **kwargs)

Но я хочу, чтобы эти вещи обрабатывались при MyViewSet создании.

ПРИМЕЧАНИЕ: Может быть, я справлюсь с этим, написав Middleware, но если есть другие варианты, я был бы очень признателен за то, что поделился ими со мной.

...