Ich habe eine eine API in dem Ruhe-Framework Django gebaut. Die erste Version eines Modells unterstützte post/create nicht. Ich füge jetzt v2 meiner API mit der beschriebenen URL-Pfad-Methode here hinzu.hinzufügen in Version 2 Erstellen von Django REST API Methode
Hier ist meine Haupt-URL-Router:
from django.conf.urls import include, url
from rest_framework.authtoken.views import obtain_auth_token
from board.urls import router
urlpatterns = [
url(r'^api/token/', obtain_auth_token, name='api-token'),
url(r'^api/', include(router.urls)),
url(r'^api/(?P<version>(1.0|2.0))/', include(router.urls)),
]
Hier mein projektspezifische URL-Router ist:
from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()
router.register(r'sprints', views.SprintViewSet)
router.register(r'tasks', views.TaskViewSet)
router.register(r'users', views.UserViewSet)
Hier ist meine Ansicht:
class SprintViewSet(DefaultsMixin, viewsets.ReadOnlyModelViewSet):
def get_serializer_class(self):
if self.request.version == '2.0':
return SprintSerializer2
return SprintSerializer
queryset = Sprint.objects.order_by('end')
Meine Frage ist: Wie kann ich basierend auf der Version von dieser schreibgeschützten Ansicht zu einer aktualisierbaren Ansicht wechseln?
Ich habe über zwei Ansätze gedacht, aber ich bin nicht sicher, wie entweder zu tun ...
One Route zu einer anderen Ansicht sein würde, aber ich bin mir nicht sicher, wie die Version zu bekommen aus der enthaltene Router.
Die zweite wäre irgendwie Django zu sagen, die dynamisch unterstützt post/erstellen, basiert auf der Version.
[Anmerkung: Dieser Code wird von einem über vereinfachten Tutorial genommen, aber drückt das Problem, das ich in eine anspruchsvollere Anwendung haben]
Wenn ich diesen Weg zu gehen war, was den richtigen Weg ist, das zu handhaben, da die Versionsnummer ist am Anfang der URL, wo der erste Router sucht, aber ich möchte den Schalter in den spezifischeren, enthaltenen Router machen? –
also schlug ich vor, diese Methode http://www.django-rest-framework.org/api-guide/versioning/#urlpathversioning zu machen, anstatt zu versuchen, Namensraumumwandlungen zu machen –