目錄python
""" 1)as_view方法完成路由配置,返回配置函數是 csrf_exempt(view),也就是禁用了csrf認證規則 結論:全部繼承APIView的子類,都不受csrf認證規則的限制 2)將請求處理的任務交給dispath方法完成 """
""" 完成了三大核心任務: 1)請求對象的處理:請求渲染模塊 2)請求過程的處理:三大認證模塊 => 本身代碼完成處理 3)請求結果的響應:異常模塊處理異常響應 | 響應渲染模塊處理正常響應 """
主路由:數據庫
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^api/', include('api.urls')) ]
副路由:django
from django.conf.urls import url from . import views from django.views.static import serve from d_priect import settings urlpatterns = [ url(r'users/$',views.UserAPIView.as_view()), url(r'users/(?P<pk>\d+)/$',views.UserAPIView.as_view()), # 暴露文件 url(r'^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}), ]
視圖:json
注意:rest_framework須要先註冊,在settings.py中:api
INSTALLED_APPS = [ # drf框架的部分功能是依賴於註冊後的,全部drf須要在app中註冊 'rest_framework', ]
from rest_framework.views import APIView from rest_framework.response import Response class UserAPIView(APIView): def get(self,request,*args,**kwargs): return Response('get ok') def post(self,*args,**kwargs): return Response('post ok')
from rest_framework.settings import APISettings
# 自定義drf配置 REST_FRAMEWORK = { # 解析模塊 'DEFAULT_PARSER_CLASSES': [ 'rest_framework.parsers.JSONParser', # json數據類型 'rest_framework.parsers.FormParser', # urlencoded數據類型 'rest_framework.parsers.MultiPartParser' # from-data數據類型 ], # 渲染模塊 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', # 數據渲染 'rest_framework.renderers.BrowsableAPIRenderer', # 瀏覽器渲染 ], }
別人知道你後臺用什麼寫的,好攻擊你瀏覽器
效果:數據正常渲染,瀏覽器只有數據。別人不知道你後臺數據怎麼寫的,不容易攻擊你安全
當項目沒上線的時候:通常瀏覽器渲染打開app
當項目上線:爲了安全通常把瀏覽器渲染關閉框架
如今admin.py種寫入:而後一切正常iview
from django.contrib import admin from . import models admin.site.register(models.User)
from rest_framework import serializers from . import models class UserModelSerializer(serializers.ModelSerializer): class Meta: # 該序列化類是輔助於那個Model類的 model = models.User fields = ['name', 'age', 'height']
from . import models from . import serializers class UserAPIView(APIView): def get(self, request, *args, **kwargs): pk = kwargs.get('pk') if pk: # 單查 # 1)數據庫交互拿到資源obj或資源objs # 2)數據序列化成能夠返回給前臺的json數據 # 3)將json數據返回給前臺 obj = models.User.objects.get(pk=pk) serializer = serializers.UserModelSerializer(obj,many=False) # # many=True表示:操做多個數據.默認爲False return Response(serializer.data) else: # 羣查 # 1)數據庫交互拿到資源obj或資源objs # 2)數據序列化成能夠返回給前臺的json數據 # 3)將json數據返回給前臺 queryset = models.User.objects.all() serializer = serializers.UserModelSerializer(queryset, many=True) # many=True表示:操做多個數據 return Response(serializer.data)
測試: