1. 程式人生 > >02,rest-framework初識

02,rest-framework初識

Rest-framework框架的基本元件

快速例項: https://www.django-rest-framework.org/tutorial/quickstart/#quickstart

序列化類

開發我們的Web API的第一件事是為我們的Web API提供一種將程式碼片段例項序列化和反序列化為諸如 json 之類的表示形式的方式。我們可以通過宣告與Django forms非常相似的序列化器(serializers)來實現。
簡單實用(基於django原生serializers基於CBV)
models.py
<wiz_code_mirror>       28           1
from
django.db import models
2
 
         
         
          
          
           3
           
          
         
 
         
         
          
          
           4
           
          
         
class Book
(models.Model):
5
    title = models.CharField(max_length=32)
6
    price = models.IntegerField()
7
    pub_date = models.DateField()
8
    publish = models.ForeignKey("Publish", on_delete=models.CASCADE)
9
    authors = models.ManyToManyField("Author")
10
 
         
         
          
          
           11
           
          
         
    def __str__(self):
12
        return self.title
13
 
         
         
          
          
           14
           
          
         
 
         
         
          
          
           15
           
          
         
class Publish(models.Model):
16
    name = models.CharField(max_length=32)
17
    email = models.EmailField()
18
 
         
         
          
          
           19
           
          
         
    def __str__(self):
20
        return self.name
21
 
         
         
          
          
           22
           
          
         
 
         
         
          
          
           23
           
          
         
class Author(models.Model):
24
    name = models.CharField(max_length=32)
25
    age = models.IntegerField()
26
 
         
         
          
          
           27
           
          
         
    def __str__(self):
28
        return self.name
    方式一: 分發url <wiz_code_mirror>       3           1
    ...
2
    path('publishes/', views.PublishesView.as_view()),
3
    ...
    檢視類 <wiz_code_mirror>       41           1
import json
2
from django.shortcuts import render, HttpResponse
3
from django.views import View
4
from django.forms.models import model_to_dict
5
from .models import *
6
 
         
         
          
          
           7
           
          
         
 
         
         
          
          
           8
           
          
         
class PublishesView(View):
9
        # Publish.objects.all().values("name", "email")
10
        # <QuerySet [{'name': '蘋果出版社', 'email': '[email protected]'}, {'name': '橘子出版社', 'email': '[email protected]'}]>
11
        # list(Publish.objects.all().values("name", "email"))
12
        # [{'name': '蘋果出版社', 'email': '[email protected]'}, {'name': '橘子出版社', 'email': '[email protected]'}]
13
    def get(self, request):
14
        # 序列化方式一
15
        # publish_list = list(Publish.objects.all().values("name", "email"))    # 注意這個list()
16
        # return HttpResponse(json.dumps(publish_list))   
17
        
18
        # 序列化方式二
19
        # 使用model_to_dict(obj)
20
        # publish_list = Publish.objects.all()
21
        # temp = []
22
        # for obj in publish_list:                  # 每一個obj就是類物件
23
        """
24
            temp.append({
25
                "name": "obj.name",
26
                "email": "obj.email"
27
            })
28
        """
29
        #   temp.append(model_to_dict(obj))
30
        # return HttpResponse(json.dumps(temp))
31
        
32
        # 序列化方式三
33
        # publish_list = Publish.objects.all()
34
        # from django.core import serializers
35
        # ret = serializers.serialize('json', publish_list)
36
        # return HttpResponse(ret)
37
        
38
        採用restframework
39
    
40
    def post(self, request):
41
        pass
       
 使用rest_framework來序列化
<wiz_code_mirror>       20           1
from rest_framework import serializers
2
from rest_framework.response import Response
3
from rest_framework.views import APIView
4
 
         
         
          
          
           5
           
          
         
 
         
         
          
          
           6
           
          
         
# 為queryset做序列化
7
class PublishSerializers(serializers.Serializer):
8
    """等同於form.Form"""
9
    name = serializers.CharField()
10
    email = serializers.CharField()
11
 
         
         
          
          
           12
           
          
         
 
         
         
          
          
           13
           
          
         
class PublishesView(APIView):
14
    def get(self, request):
15
        publish_list = Publish.objects.all()
16
        ps = PublishSerializers(publish_list, many=True)        # 即可接收Queryset 也可接收 model_obj
17
        return Response(ps.data)
18
 
         
         
          
          
           19
           
          
         
    def post(self, request):
20
        pass
        得到的結果在頁面中不會顯示,會在postmen中顯示     <wiz_code_mirror>       10           1
[
2
  {
3
    "name": "蘋果出版社",
4
    "email": "[email protected]"
5
  },
6
  {
7
    "name": "橘子出版社",
8
    "email": "[email protected]"
9
  }
10
]
     

解析器request類

django的request類和rest-framew ork的request類的原始碼解析
依然是上面的程式碼        用postmen傳送一次post請求
<wiz_code_mirror>       10           1
class PublishesView(View):
2
    def post(self, request):
3
        print("POST", request.POST)
4
        print("BODY", request.body)
5
 
         
         
          
          
           6
           
          
         
        return HttpResponse("POST")
7
 
         
         
         

相關推薦

02rest-framework初識

Rest-framework框架的基本元件 快速例項: https://www.django-rest-framework.org/tutorial/quickstart/#quickstart 序列化類 開發我們的Web API的第一件事是為我們的Web API提供一種將程式碼片段例

rest-framework的APIview原始碼分析Serializer及解析器原始碼分析

rest-framework 1.安裝 方式一:pip3 install djangorestframework 方式二:pycharm圖形化介面安裝 方式三:pycharm命令列下安裝(裝在當前工程所用的直譯器下) 2.djangorestframework的APIVi

Rest Framework:一認識RESTful

一、CBV的原始碼分析 -Class Base View(基於類的檢視)    -Function Base View(基於函式的檢視)    -def as_view 類方法    -def view:類方法內部

DAY98 - Rest Framework(三)- 序列化元件之HyperlinkedIdentityField和初識認證元件

一、序列化元件之HyperlinkedIdentityField HyperlinkedIdentityField可以通過反向解析向前臺返回一個連結 url(r'^Books/(?P<id>\d+)', views.BooksDetail.as_view(),name='test'), #

DAY101 - Rest Framework(六)- 檢視元件、路由控制和響應器初識

一、檢視元件 1.基本檢視 class Books(APIView): def get(self, request, *args, **kwargs): books = models.Book.objects.all() response = {'status': 200, 'msg': '查詢成功', '

求助:關於django rest framework + vue(element-ui)跨域問題求助大佬解決...

前端: headers: { token: '' } if (document.cookie.length > 0) { var arr = document.cookie.split('; ') for (var i = 0; i < arr.length; i++

Django REST Framework學習-分頁通用檢視自定義RelatedField

使用通用檢視+分頁+自定義RelatedField url:cardusers/pk/ 傳入模型Card的pk,獲取當前Card的所有User中username和頭像avatar,User是avatar的外來鍵 1. 過載ListAPIView,加入分頁 class

(工作小總結)Django REST Framework 效能優化簡單實現預載入功能

緣由: Django 的 ORM 是惰性的每個使用者訪問網站時候,都要進行一次資料互動 在最初開發的時候,需要考慮到使用者量大的時候, 又由於 Django 的 ORM 是惰性的,它只取出當前查詢所需響應最小的資料。它不知道你是否有成百上千的相同或相似的

9.6 rest framework 解析器渲染器

png pan publish 技術分享 全部 接收 數據類型 web mage 解析器 解析器的作用 解析器的作用就是服務端接收客戶端傳過來的數據,把數據解析成自己可以處理的數據。本質就是對請求體中的數據進行解析。 請求體相關字段: Accept:指定了接收

9.5 rest framework 分頁版本

exception .py 版本 判斷 any tof fst 最大 遊標 分頁 分頁器的引入 from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, C

RESTFULL 07 rest-framework分頁器相應器解析器url控制器版本控制

訪問 trie htm 獲取 elf temp ren cat view rest-framework分頁器,相應器,解析器,url控制器,版本控制 一、分頁器 1、簡單分頁(查看第n頁,每頁顯示n條) from rest_framework.pagination impo

廣告小程序後端開發(5.安裝配置django-rest-framework編寫後臺登錄邏輯)

document pre lbs admin ade shortcuts uid ssa and 1.安裝djangorestframework 1.安裝djangorestframework及其依賴包markdown、django-filter。 pip inst

DRF Django REST framework 之 頻率響應器與分頁器元件(六)

頻率元件 頻率元件類似於許可權元件,它判斷是否給予請求通過。頻率指示臨時狀態,並用於控制客戶端可以向API發出的請求的速率。 與許可權一樣,可以使用多個調節器。API可能會對未經身份驗證的請求進行限制,而對於經過身份驗證的請求則進行限制較少。 例如,可以將使用者限制為每分鐘最多60個請求,每天最多1000個請

Django REST framework 的快速入門教程

ret turn ads 使用 blog 所有 定義 想去 cti CRM-API項目搭建 序列器(Serializers) 首先,我們來定義一些序列器。我們來創建一個新的模塊(module)叫做 crm/rest_searializer.py ,這是我們用來描述數據是如何

Django rest framework 自定義Exception

return cep 格式 message throttle back per ack logs   使用Dango rest framework時,有時需要raise APIException到前端,為了統一錯誤返回格式,我們需要對exception的格式進行調整。 方法

[Django rest-framework] 1-Serialization

www. spa key blog urn allow max pytho led 個人粗淺的理解,歡迎批評指正 什麽是序列化?   後端任務無非對數據庫的增查刪改,操作數據庫無非操作字段,序列化可以讓我們輕松的對數據庫增(serializer.create)改(seril

Django——REST framework

errors self hat 發的 jsonp arc pip url 數據 1. 什麽是REST REST與技術無關,代表的是一種軟件架構風格,REST是Representational State Transfer的簡稱,中文翻譯為“表征狀態轉移” REST從資源的

django-rest-framework筆記-請求與響應篇

python ica ror nic patch cnblogs coo fix ria 一、請求對象 request.POST # 處理表單數據. 限於POST請求. request.data # 處理任意數據. 對 ‘POST‘, ‘PUT‘ and ‘

django-rest-framework筆記-類視圖篇

object span pos all stc cnblogs man ews rom snippet/url.py from django.conf.urls import url from rest_framework.urlpatterns import

帶你進入rest framework

serializers djangorestframework 這邊聲明一下,以下是參考官方文檔來的。新建項目新建名為dimples的django項目在其中建立一個名為astart的APP:新建目錄# 新建目錄mkdir dimplescd dimples新建虛擬環境virtualenv envenv