restful api中method的使用:
增
POST /users/ # 新增一個(gè)用戶
刪
DELETE /users/1 # 刪除一個(gè)用戶
改
PUT /users/1/ # 全部修改
patch /users/1/ # 局部修改
查
get /users/ # 用戶列表
/users/1/ # 單個(gè)用戶
因此我們通常需要兩種路由規(guī)則來(lái)匹配url中有無(wú)ID傳入:
urlpatterns = [
url(r'^users/$', views.TestView.as_view()), # http://127.0.0.1:8000/users/
url(r'^users/(?P<pk>\d+)/$', views.TestView.as_view()), # http://127.0.0.1:8000/users/1/
]
django-restframework中又添加了兩種規(guī)則,方便我們決定在頁(yè)面上顯示哪種格式的數(shù)據(jù):
urlpatterns = [
# http://127.0.0.1:8000/api/v1/test/
url(r'^test/$', s11_render.TestView.as_view()),
# http://127.0.0.1:8000/api/v1/test.json/ 頁(yè)面顯示json格式
url(r'^test\.(?P<format>[a-z0-9]+)$', s11_render.TestView.as_view()),
# http://127.0.0.1:8000/api/v1/test/1/
url(r'^test/(?P<pk>[^/.]+)/$', s11_render.TestView.as_view()),
# http://127.0.0.1:8000/api/v1/test/1.json/ 頁(yè)面顯示json格式
url(r'^test/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)$', s11_render.TestView.as_view())
]
使用
自定義路由系統(tǒng)
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()),
url(r'^test/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)$', s11_render.TestView.as_view())
]
views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from .. import models
class TestView(APIView):
def get(self, request, *args, **kwargs):
print(kwargs)
print(self.renderer_classes)
return Response('...')
半自動(dòng)路由
urls.py
from django.conf.urls import url, include
from web.views import s10_generic
"""
在路由中做method與處理視圖函數(shù)的映射
get
- /test/ - list 獲取多個(gè)
- /test/1/ - retrieve 獲取單個(gè)
post
- /test/ - create 新增
put
- /test/1/ - update 全部修改
patch
- /test/1/ - partial_update 局部修改
delete
- /test/1/ - destroy 刪除
"""
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'})),
]
views.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
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
全自動(dòng)路由
urls.py
from django.conf.urls import url, include
from rest_framework import routers
from web.views import s10_generic
router = routers.DefaultRouter()
router.register(r'users', s10_generic.UserViewSet) # 自動(dòng)生成匹配規(guī)則
"""
在路由中做method與處理視圖函數(shù)的映射
get
- /test/ - list 獲取多個(gè)
- /test/1/ - retrieve 獲取單個(gè)
post
- /test/ - create 新增
put
- /test/1/ - update 全部修改
patch
- /test/1/ - partial_update 局部修改
delete
- /test/1/ - destroy 刪除
"""
urlpatterns = [
url(r'^', include(router.urls)),
]
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