drf路由分发、剖析/衬着模块设置、运用admin、自动序列化设置、APIView的要求生命周期
目次
- APIView的要求生命周期
- 重写的as_view要领
- 重写的dispatch要领
- drf路由分发设置
- 剖析模块设置
- 衬着模块设置
- 浏览器衬着翻开
- 浏览器衬着封闭
- 结论
- drf运用背景admin
- drf序列化组件
- serializers.py:
- views.py:单查群查
- 测试:
- 连表操纵
- 设置图片和性别
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
如今admin.py种写入:然后一切平常
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)
测试:
连表操纵
设置图片和性别
测试: