DRF 파서 어셈블리
Django 기본 파서
class LoginView(View):
def get(self, request):
return render(request, 'login.html')
def post(self, request):
print(request.POST)
origin_data = request.body
parsed_data = origin_data.decode('utf-8')
print(parsed_data)
return HttpResponse("ok")
DRF 파서
from rest_framework.views import APIView
from rest_framework.parsers import FormParser
class LoginView(APIView):
parser_classes = [FormParser]
# , formdata
def get(self, request):
return render(request, 'login.html')
def post(self, request):
# print(request.POST)
# origin_data = request.body
# parsed_data = origin_data.decode('utf-8')
# print(parsed_data)
print(request.data)
# request.data , porperty
return HttpResponse("ok")
def view(request, *args, **kwargs):
self = cls(**initkwargs)
if hasattr(self, 'get') and not hasattr(self, 'head'):
self.head = self.get
self.request = request
self.args = args
self.kwargs = kwargs
return self.dispatch()
{"login": view},
사용자 요청 대기11.1 POST , request.data
11.2 , request.data , data ( )
11.2 request.data
@property
def data(self):
if not _hasattr(self, '_full_data'):
self._load_data_and_files()
return self._full_data
11.3 self._load_data_and_files
11.4 self._data, self._files = self._parse()
11.5 parser = self.negotiator.select_parser(self, self.parsers)
11.5.1 self.parsers
11.5.2 self.get_parses()
[ parse() for parse in self.parser_classes ]
11.5.3 parser_classes = api_settings.DEFAULT_PARSER_CLASSES
11.5.4 from rest_framework import api_settings
11.5.5 api_settings = APISettings(None, DEFAULTS, IMPORT_STRINGS)
11.5.6 class APISettings():pass
11.5.7 DEFAULT_PARSER_CLASSES,__getattr__
'DEFAULT_PARSER_CLASSES': (
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser'
),
11.5.8 settings
11.5.9 rest_framework settings
11.6 self._data
11.7 DRF self._data = data
11.8 request.data
DRF의 모든 기능은 asview () 와 디스패치에서 다시 쓴
해상도 구성 요소는 디스패치 방법에서 다시 썼습니다. 구체적으로 다시 봉인된 Request 대상에서
#
class LoginView(APIView):
def get(self, request):
pass
def post(self, request):
request.data # request @property
return
class APIView(View):
@classmethod
def as_view(cls, **initkwargs):
pass
super(APIView, cls).as_view(**initkwargs)
def initialize_request(self, request, *args, **kwargs):
from rest_framework.request import Request
return Request(
request, # request
parsers=self.get_parsers(), #
authenticators=self.get_authenticators(),
negotiator=self.get_content_negotiator(),
parser_context=parser_context
)
def dispatch(self):
pass
request = self.initialize_request(request, *args, **kwargs)
self.request = request
def get_parsers(self):
return [parser() for parser in self.parser_classes]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.