drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、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'))
]

副路由:

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}),

]

视图:

注意:rest_framework需要先注册,在settings.py中:

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',  # 浏览器渲染
    ],
}

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

渲染模块配置

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

浏览器渲染打开

别人知道你后台用什么写的,好攻击你

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

浏览器渲染关闭

效果:数据正常渲染,浏览器只有数据。别人不知道你后台数据怎么写的,不容易攻击你

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

结论

当项目没上线的时候:一般浏览器渲染打开

当项目上线:为了安全一般把浏览器渲染关闭

drf使用后台admin

现在admin.py种写入:然后一切正常

from django.contrib import admin

from . import models

admin.site.register(models.User)

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

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)

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

测试:

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

连表操作

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

配置图片和性别

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

测试:

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置、APIView的请求生命周期

上一篇:NOI.AC#486. astrology


下一篇:WPF WindowChrome 自定义标题栏时窗体阴影效果设置