drf路由分發、解析/渲染模塊配置、使用admin、自動序列化配置、APIView的請求生命週期

APIView的請求生命週期

重寫的as_view方法

"""
1)as_view方法完成路由配置,返回配置函數是 csrf_exempt(view),也就是禁用了csrf認證規則
結論:全部繼承APIView的子類,都不受csrf認證規則的限制

2)將請求處理的任務交給dispath方法完成
"""

重寫的dispatch方法

"""
完成了三大核心任務:
1)請求對象的處理:請求渲染模塊

2)請求過程的處理:三大認證模塊 => 本身代碼完成處理

3)請求結果的響應:異常模塊處理異常響應 | 響應渲染模塊處理正常響應
"""

drf路由分發配置

主路由:數據庫

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

當項目上線:爲了安全通常把瀏覽器渲染關閉框架

drf使用後臺admin

如今admin.py種寫入:而後一切正常iview

from django.contrib import admin

from . import models

admin.site.register(models.User)

drf序列化組件

serializers.py:

from rest_framework import serializers


from . import models
class UserModelSerializer(serializers.ModelSerializer):

    class Meta:
        # 該序列化類是輔助於那個Model類的
        model = models.User

        fields = ['name', 'age', 'height']

views.py:單查羣查

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)

測試:

連表操做

配置圖片和性別

測試:

相關文章
相關標籤/搜索