장고 REST 프레임 워크 파서 및 렌더링

파서

파서의 역할

파서는 데이터가 처리 할 수있는 데이터로 구문 분석, 서버의 역할은 데이터를 통해 클라이언트의 패스를받는 것입니다. 그것은 본질적으로 데이터 요청 파싱 기관이다.

파서을 살펴보기 전에, 우리는 먼저 알고 동의하고 ContentType이 요청 헤더해야합니다.

수락하는 것은 : 내가 해결할 수있는 데이터의 종류를 서로 이야기하는 것입니다, 당신은 종종 종류의 데이터를 내가 원하는 것을 나타낼 수 있습니다.

ContentType이 : 나는 당신이 데이터 유형의 어떤 종류의 서로 얘기하는 줄 것이다.

파서의 ContentType 요청이 데이터 I 입력을 결정하기 위해 전면에 도착하는 것입니다 작동하고, 우리는 데이터를 분석하기위한 적절한 백엔드 파서를 사용합니다.

장고의 데이터 분석

프런트 엔드 데이터가 request.POST에 의해 전송 요청할 관점에서 우리가 얻을 수있는, 다음 장고 프레임 워크는 어떻게의 요청 본문의 데이터를 얻을 수 있습니다? 우리는 함께 보면 :

먼저, 요청 객체는 우리는 아래의 코드를 보면, 객체 WSGIRequest 클래스의 인스턴스입니다 :

 

rest_framework.parsers 가져 오기 JSONParser, FormParser, MultiPartParser, FileUploadParser에서

 

 

 

 

 

 # Reset_framawork의 기본 경로

 

 

에서 django.contrib의 수입 관리자
 에서 django.urls의 수입 경로, re_path
 에서 이 app01 수입 전망
 에서 rest_framework의 수입   라우터
 에서 django.conf.urls의 수입 URL을 포함 


라우터 = routers.DefaultRouter () 
routers.register ( " 저자 " , views.AuthorModelView을 ) 



urlpatterns = [ 
    re_path (R ' ^는 ' ), (routers.urls 포함) 

    #에 re_path (R '^ 관리 /'admin.site.urls)를 
    #보기 (요청) ===== APIView가 : 파견 () re_path, #보기 (R, views.PublishView.as_view (), 이름 = "게시"는 '^는 $ / 출판') 
    #의 re_path (R '^이 발행 / / $ 'views.PublishDetailView.as_view () NAME = "detailpublish") #보기 (P <PK> \ D +?) 뷰 (요청) ===== APIView : 디스패치 () 
    #
     # re_path (R '^ 책 / $', views.BookView.as_view () NAME = "책"), 
    #의 re_path (R '을 ^ 책 / (\ D +) / $'views.BookDetailView.as_view () NAME = "detailbook "), 
    #의 URL (R '^ 책 / (\ D +) / $',보기 :보기), #보기 (요청) 

    #의 re_path (R '^ 저자 / $', views.AuthorModelView.as_view은 ({"GET " : "목록", "포스트": "작성"}), 이름 = "저자"), 
    #re_path (R '^ 저자 / (P <PK> \ D +) / $?', views.AuthorModelView.as_view는 ({ "GET": "검색", "풋" "갱신", "삭제": "파괴" }) NAME = "detailauthor") 

    re_path (R을 ' ^ 로그인 / $ ' , views.LoginView.as_view () NAME = " 로그인 " ) 

]

 

 

 

 

 

 

 

이 시점에서 우리는 장고에 뷰가 데이터에 의해 수행 될 수 있으며, request.FILES request.POST를 여기에 분석 데이터를 요구하기 때문에, 그리고 request 객체에 할당 된 기억합니다.

우리는 또한 그 문제를 발견, 장고 패키지 contentype를 지원하지 않는 파서는 JSON 데이터 형식 해결할 수없는 응용 프로그램 / JSON입니다

 

DRF 파서

우리 request.data에 의해 제출 된 데이터 액세스 요청을 얻기 위해, 다음 request.data 데이터가있는 DRF에서 제공하는 모든 알아? 우리는 소스 코드를 보면 :

 

 

 

 

 

 

더 파서 구성하는 경우, DRF는 기본 파서를 사용합니다 :

 

 

 

 

우리는 하나의보기 또는 글로벌 settings.py에 사용하는 파서를 구성 할 수 있습니다.

에서 rest_framework.response의 수입 응답

단일 뷰 구성

class BookViewSet(ModelViewSet):
    queryset = models.Book.objects.all()
    serializer_class = BookModelSerializer
    parser_classes = [JSONParser, ]

全局配置

 

 

 

 

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',
    )
}

注意:当你的项目中只配置了 JSONParser 解析器时,你的项目现在就只能解析JSON格式的数据了,客户端如果使用浏览器提交,那么你将无法解析。

注意,在视图类中定义的配置项的优先级要高于全局配置中的配置项

渲染器(rander)

渲染器同解析器相反,它定义了框架按照content_type来返回不同的响应。

DRF提供的渲染器有很多,默认是

 'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ),

我们也可以在视图中局部设置也可以在全局的settings.py中进行设置:

局部设置

 

 

class PublisherViewSet(ModelViewSet):
    queryset = models.Publisher.objects.all()
    serializer_class = PublisherModelSerializer
    renderer_classes = [JSONRenderer, ]

这样设置后就只能返回JSON格式的数据了,并不会像之前一样提供一个阅读友好的web页面。

全局设置

 

 

 

 

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    ),
}

注意,在视图类中定义的配置项的优先级要高于全局配置中的配置项。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

추천

출처www.cnblogs.com/Rivend/p/11871719.html