Django RESTFrame 路由问题

路由分为3中:

  a. 自定义路由

  b. 半自动路由

  c. 全自动路由

1.自定义路由

urls.py

from django.conf.urls import url, include
from web.views import s11_render

urlpatterns = [
    url(r'^test/$', s11_render.TestView.as_view()),
    url(r'^test.(?P<format>[a-z0-9]+)$', s11_render.TestView.as_view()),
    url(r'^test/(?P<pk>[^/.]+)/$', s11_render.TestView.as_view()),

]

views.py

 1 from rest_framework.views import APIView
 2 from rest_framework.response import Response
 3 from .. import models
 4 
 5 
 6 class TestView(APIView):
 7     def get(self, request, *args, **kwargs):
 8         print(kwargs)
 9         print(self.renderer_classes)
10         return Response('...')

2.半自动路由

urls.py

from django.conf.urls import url, include
from web.views import s10_generic

urlpatterns = [
    url(r'^test/$', s10_generic.UserViewSet.as_view({'get': 'list', 'post': 'create'})),
    url(r'^test/(?P<pk>d+)/$', s10_generic.UserViewSet.as_view(
        {'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy'})),   # 各个请求,对应view类中,要执行的方法
]

views.py

from rest_framework.viewsets import ModelViewSet
from rest_framework import serializers
from .. import models


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UserInfo
        fields = "__all__"


class UserViewSet(ModelViewSet):
    queryset = models.UserInfo.objects.all()
    serializer_class = UserSerializer

3.全自动路由

urls.py

from django.conf.urls import url,include

from rest_framework import routers   # 用于全自动路由的类
router = routers.DefaultRouter()       # 用于全自动路由
router.register(r'test', pagination.TestView,base_name='my_test')


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

views.py

 1 from rest_framework.viewsets import ModelViewSet
 2 from rest_framework import serializers
 3 from .. import models
 4 
 5 
 6 class UserSerializer(serializers.ModelSerializer):
 7     class Meta:
 8         model = models.User
 9         fields = "__all__"
10 
11 # 在这里指定数据库的类、以及序列化的类之后,就能自动存取数据了
12 # 执行get方法,就自动取到数据
13 # 执行post,就能向当前model表存入数据
14 class TestView(ModelViewSet):
15     queryset = models.User.objects.all()
16     serializer_class = UserSerializer
原文地址:https://www.cnblogs.com/fengqing89/p/8513235.html