02-01 請求模塊


請求模塊

1、CBV源碼分析

# 視圖層
from django.shortcuts import render, HttpResponse
from django.views import View
class CBVTest(View):
    # 通過調度(dispatch)分發請求
    def dispatch(self, request, *args, **kwargs):
        pass
        super().dispatch(request, *args, **kwargs)
        pass

    def get(self, request):
        return render(request, 'cbv.html')

    def post(self, request):
        return HttpResponse('cbv post method')
<!-- 模板層 -->
<form action="/cbv/" method="post">
    {% csrf_token %}
    <input type="text" name="usr">
    <button type="submit">提交</button>
</form>
# 路由層
from app import views
urlpatterns = [
    url(r'^cbv/', views.CBVTest.as_view()),
]

2、drf安裝與使用

# 1)安裝drf:pip3 install djangorestframework
# 2)settings.py注冊app:INSTALLED_APPS = [..., 'rest_framework']
# 3)基於cbv完成滿足RSSTful規范的接口
# 視圖層
from rest_framework.views import APIView
from rest_framework.response import Response
user_list = [{'id': 1, 'name': 'Bob'}, {'id': 2, 'name': 'Tom'}]
class Users(APIView):
    def get(self, request, *args, **kwargs):
        return Response({
            'status': 0,
            'msg': 'ok',
            'results': user_list
        })
    def post(self, request, *args, **kwargs):
        # request對formdata,urlencoded,json三個格式參數均能解析
        name = request.data.get('name')
        id = len(user_list) + 1
        user = {'id': id, 'name': name}
        user_list.append(user)
        return Response({
            'status': '0',
            'msg': 'ok',
            'results': user
        })
# 路由層
from app import views
urlpatterns = [
    url(r'^users/', views.Users.as_view()),
]

3、request源碼分析

# as_view()
	# 核心走了父類as_view
	view = super(APIView, cls).as_view(**initkwargs)
    # 返回的是局部禁用csrf認證的view視圖函數
    return csrf_exempt(view)
    
# dispatch(self, request, *args, **kwargs)
	# 二次封裝request對象
	request = self.initialize_request(request, *args, **kwargs)
    # 自定義request規則
    self.initial(request, *args, **kwargs)
    
# initialize_request(self, request, *args, **kwargs)
	# 原生request封裝在request._request
    
# initial(self, request, *args, **kwargs)
	# 認證
	self.perform_authentication(request)
    # 權限
    self.check_permissions(request)
    # 頻率
    self.check_throttles(request)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM