routage
1, un premier routage écrites - de manière originale
De cette façon, est en face a été écrit;
urls.py
à partir django.conf.urls importation url de App01 importation vues urlpatterns = [ url (r ' ^ livres / $ ' , views.BookView.as_view ()), url (r ' ^ livres / (? P <pk> \ d +) $ ' , views.BookDetailView.as_view ()), ]
views.py
classe LivreVoir (APIView): def get (auto, demande): book_list = models.Book.objects.all () bs = BookSerializers (book_list, beaucoup = True) retour réponse (bs.data) def poster (auto, demande): # 添加一条数据 impression (request.data) bs = BookSerializers (data = request.data) si bs.is_valid (): bs.save () # 生成记录 retour Réponse (bs.data) autre : retour Réponse (bs.errors ) classeBookDetailView (APIView): def get (auto, demande, pk): book_obj = models.Book.objects.filter (pk = pk) .first () bs = BookSerializers (book_obj, beaucoup = False) retour Réponse (bs.data) def mettre (self, demande, pk): book_obj = models.Book.objects.filter (pk = pk) .first () bs = BookSerializers (données = request.data, instance = book_obj) si bs.is_valid): ( bs .save () # mise à jour le retour de réponse (bs.data) autre : le retourRéponse (bs.errors) def supprimer (auto, demande, pk): models.Book.objects.filter (pk = pk) .delete () retour réponse ( "" )
2, le libellé de la deuxième voie - un mode semi-automatique ( vue héritage de classe ModelViewSet )
settings.py enregistré 'rest_framework'
serializer.py
de rest_framework.serializers importer ModelSerializer de App01 importation des modèles de classe PublishSerializers (ModelSerializer): classe Meta: modèle = models.Publish champs = " __all__ "
models.py
à partir django.db importation modèles # Créer vos modèles ici. classe de publication (models.Model): nom = models.CharField (longueur_max = 32 ) city = models.CharField (longueur_max = 64)
makemigrations
émigrer
views.py
de django.shortcuts importer render de App01 importation des modèles de app01 importation sérialiseur de rest_framework.views importer APIView de rest_framework.response importation Réponse de rest_framework.viewsets importer ModelViewSet # 路由的第二种写法: classe PublishView (ModelViewSet): queryset = modèles. Publish.objects.all () serializer_class = serializer.PublishSerializers
urls.py
de django.conf.urls importer url de django.contrib import administration de app01 importation vues urlpatterns = [ url (r ' ^ admin / ' , admin.site.urls), url (r ' ^ publier / $ ' , views.PublishView .as_view ({ ' obtenir ' : ' liste ' , ' après ' : ' créer ' })), url (r ' ^ publier / (P <pk> \ d +?) de $ ', Views.PublishView.as_view ({ ' obtenir ' : ' récupérer ' , ' supprimer ' : ' détruire ' , ' put ' : ' mise à jour ' })), ]
test:
3, une troisième voie écrite - génération automatique
views.py
de django.shortcuts importer rendent de App01 importation des modèles de app01 importation sérialiseur de rest_framework.views importer APIView de rest_framework.response importation Réponse de rest_framework.viewsets importer ModelViewSet # 必须继承ModelViewSet才可以用这种方式的路由 classe PublishView (ModelViewSet): queryset = models.Publish.objects.all () serializer_class = serializer.PublishSerializers
urls.py
de django.conf.urls importation URL, le comprennent de django.contrib importation ADMIN de APP01 importation vues de rest_framework.routers importation SimpleRouter, defaultrouter # SimpleRouter généré automatiquement deux itinéraires; defaultrouter générant automatiquement quatre routes # Router SimpleRouter = () Router = defaultrouter () # enregistrement; publier chemin est router.register ( ' publier ' , views.PublishView) les urlpatterns = [ URL (R & lt ' ^ / ADMIN ' , admin.site.urls), # Url (r '^ publier / $', views.PublishView.as_view ({ 'get': 'liste', 'post': 'créer'})), # ? URL (r ^ publish / (P <pk > \ d +) $ », views.PublishView.as_view ({ 'get': 'récupérer', 'delete': 'détruire', 'put': 'update'})), url (r '' , include (routeur .urls)) ]