中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
python測試開發(fā)django-64.序列化(Serializer)

前言

REST framework中的serializers與Django的Form和ModelForm類非常像。我們提供了一個(gè)Serializer類,它為你提供了強(qiáng)大的通用方法來控制響應(yīng)的輸出,

以及一個(gè)ModelSerializer類,它為創(chuàng)建用于處理模型實(shí)例和查詢集的序列化程序提供了有用的快捷實(shí)現(xiàn)方式。

serializers.Serializer

先從一個(gè)簡單的案例開始,在apiapp目錄下編輯models.py,以創(chuàng)建用戶個(gè)人信息model為例

# models.py
from django.db import models
# 作者:上海悠悠,QQ交流群:750815713

# Create your models here.
class UserPersonalInfo(models.Model):
'''用戶個(gè)人信息'''
name = models.CharField(max_length=10, verbose_name="昵稱") # 昵稱
sex_choices = (
(u'M', u'男'),
(u'F', u'女'),
)
sex = models.CharField(max_length=11,
choices=sex_choices,
verbose_name="性別",
)
age = models.IntegerField(verbose_name="年齡", default="", blank=True)
mail = models.EmailField(max_length=30, default="", blank=True)
create_time = models.DateField(auto_now=True, verbose_name="添加時(shí)間")

執(zhí)行 makemigrations 和migrate同步數(shù)據(jù)庫

python manage.py makemigrations
python manage.py migrate

Serializer是rest_framework中最簡單的序列化基類,封裝也是最低的。但是這個(gè)基類比較靈活,可以通過這個(gè)類來定制我們需要的序列化類。
實(shí)現(xiàn)這個(gè)類需要重寫兩個(gè)方法,create和update。

  • create方法對(duì)應(yīng)我們在使用API的時(shí)候通過POST來訪問的,因?yàn)橥ǔMㄟ^POST來傳遞我們需要新建實(shí)例的數(shù)據(jù)。

  • update方法對(duì)應(yīng)通過PUT/PATCH方法訪問API,用來新建實(shí)例或者更新已存在的實(shí)例,這取決于數(shù)據(jù)庫是否存在我們需要操作的實(shí)例。

在apiapp目錄下新建一個(gè)serializersapi.py文件,在該文件先編輯需要序列化的model,id是系統(tǒng)默認(rèn)自帶的一個(gè)字段。

│ manage.py
├─apiapp
│ │ admin.py
│ │ apps.py
│ │ auth.py
│ │ models.py
│ │ serializersapi.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ ├─migrations
│ │ │ 0001_initial.py
│ │ │ 0002_userpersonalinfo.py
│ │ │ __init__.py

└─yoyoapi
│ settings.py
│ urls.py
│ wsgi.py
│ __init__.py

在寫序列化類的時(shí)候,字段里面的相關(guān)參數(shù)verbose_name,blank得去掉。

# serializersapi.py
from rest_framework import serializers
from .models import UserPersonalInfo

class UserPersonalInfoSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(max_length=10) # 昵稱
sex_choices = (
(u'M', u'男'),
(u'F', u'女'),
)
sex = serializers.ChoiceField(choices=sex_choices
)
age = serializers.IntegerField(default="")
mail = serializers.EmailField(max_length=30, default="")
create_time = serializers.DateField(read_only=True)

def create(self,validated_data):
return UserPersonalInfo.objects.create(**validated_data)

   def update(self,instance,validated_data):
       instance.name=validated_data.get('name',instance.name)
       instance.sex=validated_data.get('sex',instance.sex)
       instance.age=validated_data.get('age',instance.age)
       instance.mail=validated_data.get('mail',instance.mail)
       instance.save()
return instance

在創(chuàng)建ArticleSerializer的時(shí)候,創(chuàng)建了一些字段,這些字段代表Serializer類在序列化的時(shí)候和model對(duì)應(yīng)的字段。這些字段應(yīng)該和model里定義的字段同名。

在定義的時(shí)候,指定了一些參數(shù),這里只用了read_only,還有其它的參數(shù)

  • write_only,required,allow_null/allow_blank,label,help_text,style,error_messages

  • read_only:

    表示該字段只能用于API的輸出,用戶并不能直接指定該字段的值

  • write_only:

    這個(gè)就和read_only相反,需要用戶指定該字段的值

  • required:

    該字段是必需的,不能為空

  • allow_null/allow_blank:

    該字段允許為null/空

  • label:

    標(biāo)簽,用于對(duì)字段顯示設(shè)置

  • help_text:

    對(duì)字段進(jìn)行解釋的一段文本,用于提示

  • style:

    說明字段的類型

  • error_messages:

    字段出錯(cuò)時(shí),信息提示

update方法中instancece參數(shù)是一個(gè)model實(shí)例,也可以是一個(gè)自定義類實(shí)例,其實(shí)model也就是一個(gè)類,只是在底層封裝了一些ORM操作。

views.py視圖

views.py編輯以下內(nèi)容

# views.py
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import *
from rest_framework.permissions import IsAuthenticated,AllowAny
from .serializersapi import UserPersonalInfoSerializer
# 作者:上海悠悠,QQ交流群:750815713

class UserPersonalInfoView(APIView):
'''REST framework的APIView實(shí)現(xiàn)獲取UserPersonalInfo表 # 作者:上海悠悠,QQ交流群:750815713'''
# authentication_classes = (TokenAuthentication,) # token認(rèn)證
# permission_classes = (IsAuthenticated,) # IsAuthenticated 僅通過認(rèn)證的用戶
permission_classes = (AllowAny,) # 允許所有用戶

def get(self, request, format=None):
"""
Return a list of all UserPersonalInfo
"""
info = UserPersonalInfo.objects.all()
serializer = UserPersonalInfoSerializer(info, many=True)
return Response(serializer.data)

def post(self, request, format=None):
'''
create UserPersonalInfo
'''
verify_data = UserPersonalInfoSerializer(data=request.data)
if verify_data.is_valid():
verify_data.save()
return Response({"message": "create some data!", "data": request.data})
else:
return Response(verify_data.errors)

urls.py設(shè)置訪問路徑

# urls.py
from apiapp import views
from django.conf.urls import url

# 作者:上海悠悠,QQ交流群:750815713

urlpatterns = [
url(r'^userinfo', views.UserPersonalInfoView.as_view()),
]

測試接口

訪問’http://127.0.0.1:8000/userinfo',post請(qǐng)求測試結(jié)果

POST http://127.0.0.1:8000/userinfo HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1:8000
Content-Length: 82
Content-Type: application/json

{
"name": "yoyo",
"sex": "M",
"age": "20",
"mail": "283340479@qq.com"
}

新增成功,查看數(shù)據(jù)庫,會(huì)生成一條數(shù)據(jù)

訪問’http://127.0.0.1:8000/userinfo',get請(qǐng)求測試結(jié)果


2019第一期《python測試開發(fā)》課程,10月13號(hào)開學(xué)!

本期上課時(shí)間:10月13號(hào)-12月8號(hào),每周六、周日晚上20:30-22:30

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
用django寫接口(入門篇)
Django REST Framework 集成系統(tǒng)API
序列化器 普通字段、一對(duì)多字段、多對(duì)多字段(正向序列化查詢,反向序列化查詢)
DjangoRestFramework使用
django rest framework 入門1-序列化 Serialization
drf—— 編寫登錄接口,用同一個(gè)接口既可以不登錄訪問,又可以登錄訪問
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服