91 rest風格 restful規範 restframework

-1 : rest規範html

 

 

 

 

0: 它是基於Django的,幫助咱們快速開發符合RESTful規範的接口框架:對rest-framework框架的認識:https://www.cnblogs.com/GGGG-XXXX/articles/9260702.htmlpython

1 :使用restframework的cbv的流程:https://blog.csdn.net/NightCharm/article/details/80405479(restful架構)django

https://www.cnblogs.com/GGGG-XXXX/articles/9675911.html(老師博客)
  1 繼承APIview: from rest_framework.views import APIView
  2 先走本身類的as_view方法, 沒有走父類APIview的as_view方法, APIview中有as_view方法, 返回csrf_exempt(view), --view = super(APIView,     cls).as_view(**initkwargs)
  3 執行父類的as_view方法, 返回view函數, 執行view函數, 返回self.dispatch
  4 從本身類中找dispatch,沒有, 找父類的dispatch方法, 有,執行, request = self.initialize_request(request, *args, **kwargs), 獲取到新的request, 進到 initialize_reques放回一個Request類, 舊的request放在_request裏.而後走try: 執行相應的get或者post方法.

2 : APIview和View的區別:
  1 APIview重寫了as_view和dispatch方法
  2 在dispatch中從新封裝了request, :
    新的request: Request()
    舊的request: _request
  3 get請求的數據:
    request.query_params, 在Request類中能夠看到(源碼)
  4 post請求的數據:
    request.data
3 : django的序列化:
  初版: 用values以及JsonResponse實現:
    注意:
      1: 使用json.dumps時加上ensure_ascil不會出現亂碼
        res = json.dumps(ret, ensure_ascii=False)
      2: 使用JsonResponse能夠序列化時間類型, 若是不是字典, 加上safe= false
        return HttpResponse(JsonResponse(ret, safe=False, json_dumps_params={"ensure_ascii": False}))json

      3: dumps和JsonResponse的區別: dumps繼承jsonencode, jsonresponse繼承encode類,自定義了一個default類, 能夠處理時間類型.
  第二版: 用django的serializes實現的序列化:
    缺點: 不能序列化外鍵關係, 其次, 表名也會渲染到頁面上, 不太好
  第三版: 使用restframework:   restframwork專門處理序列化的組件:serializers組件, 類比於model.
    1 先建一個包, 並註冊app
    2 下載rest_framework: pip3 install djangorestframework 並在setting中註冊.
    3 建立路由, 走視圖函數, 對queryset數據序列化, 藉助序列化器, 在包下面建立serializers.py文件,
    4 在py文件中寫法: api

from rest_framework import serializers


class PublisherSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    title = serializers.CharField(max_length=32)


class AuthorSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    name = serializers.CharField(max_length=32)


class BookSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    title = serializers.CharField(max_length=32)
    pub_time = serializers.DateField()
    category = serializers.CharField(source='get_category_display')
    publisher = PublisherSerializer()
    authors = AuthorSerializer(many=True)
View Code

    5 在views的使用, 向聲明序列化器,使用序列化器序列化queryset, 把模型對象放入序列化器進行字段匹配,restful

  匹配上的字段進行序列化, 匹配不上的捨棄. 序列化好的數據放在ser_obj.data中,架構

from django.shortcuts import render,HttpResponsefrom rest_framework.response import Response #引入Response
from rest_framework.views import APIView #引入 APIView
from rest_framework import serializers #用rest_framework本身的serializers
from django.views import View
from api_demo.models import *


class Bookserializers(serializers.Serializer):
    title=serializers.CharField(max_length=32)
    price=serializers.IntegerField()

class BookView(APIView):#注意這裏使用的是APIView不是View
    def get(self,request,*args,**kwargs):
        booklist=Book.objects.all()
        temp=Bookserializers(booklist,many=True)#若是傳入的是多個值,因爲queryset是多個對象的集合,many=True,默認False
        print(">>>>",temp)
        print("-------",temp.data) #獲得的是一種orderDict數據類型的數據
        return Response(temp.data) #必需要用Response發送,發送其中的data就能夠
相關文章
相關標籤/搜索