日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中view的用法_APIview使用

發布時間:2023/12/2 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中view的用法_APIview使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ModelVIewSet 是對 APIView 封裝

ModelSerializer 是對 Serializer

1.1 在user/urls.py中添加路由

urlpatterns = [? ? path('apiview/', views.UserInfoViewSet.as_view()), ]

1.2 創建user/serializers.py寫序列化器

serializers.ModelSerializer 和 serializers.Serializer field參數說明

''' field參數 '''

# 1.read_only read_only=True 表示不允許用戶自己上傳,只能用于api的輸出,序列化的時候也不用對這個數據進行驗 證,序列化返回是有改字段

# 2.write_only write_only=True 表示在更新或創建實例時可以使用該字段,但在序列化返回時不包括該字段。

# 3.required:該字段是必需的,不能為空 required=True 反序列化(前端返回數據必須包含此字段)的時候必須提供這個字段? ? 設置False 可以 不提供

# 4.allow_null/allow_blank:該字段允許為null/空 allow_null=True 可以為null? ? 設置False則不能為null # 5.label:標簽,用于對字段顯示設置

# 6.help_text:對字段進行解釋的一段文本,用于提示

# 7.style:說明字段的類型

# 8.error_messages:字段出錯時,信息提示

創建user/serializers.py寫序列化器

# class User(AbstractUser):

# ? ? phone = models.CharField('手機號',max_length=20)

# ? ? img = models.ImageField(upload_to='user',null=True)

# ? ? nick_name = models.CharField('昵稱',max_length=20)

# ? ? address = models.CharField('地址',max_length=255)

class UserInfoSerializer(serializers.Serializer):

id = serializers.CharField(read_only=True) ?# 普通字段,設置id為只讀字段,不能修改

username = serializers.CharField(min_length=3,max_length=20,error_messages= {'required': '該字段必填'}) ?# 顯示普通字段

img = serializers.ImageField(required=False)

nick_name = serializers.CharField(max_length=20)

address = serializers.CharField(max_length=255)

xxx = serializers.SerializerMethodField(read_only=True) ? # 自定義顯示(顯示多對 多)

class Meta:

model = User

# 自定義顯示 多對多 字段

def get_xxx(self,row):

'''row: 傳過來的正是 User表的對象'''

users = row.username ? # 獲取用戶名

return users

# 定義創建語法:ser.save()執行,就會立刻調用create方法用來創建數據

def create(self, validated_data):

'''validated_data: 表單或者vue請求攜帶的json: {"username":"zhangsan","password":"123456"}'''

# https://www.cnblogs.com/xiaonq/p/7978409.html

return User.objects.create(**validated_data)

# 定義更新方法

def update(self, instance, validated_data):

''' ? ? ? instance : 查詢的對象 ? ? ? validated_data : postman提交的json數據 {"username":"zhangsan","password":"123456"} ? ? ? '''

if validated_data.get('username'):

instance.username = validated_data['username']

instance.save()

return instance

# 定義單一字段驗證的方法

def validate_name(self, value):

if value == 'root':

raise serializers.ValidationError('不能創建root管理員賬號')

return value

# 定義多字段驗證方法

def validate(self, attrs):

print(attrs)

if attrs.get("username") == 'admin':

raise serializers.ValidationError('不能創建admin用戶')

return attrs

1.3 在user/views.py中添加視圖函

from user.serializers import UserInfoSerializer

class UserInfoViewSet(APIView):

# 查詢用戶信息

def get(self, request, *args, **kwargs):

obj = User.objects.all()

ser = UserInfoSerializer(instance=obj,many=True)? # 關聯數據多個

# ser = UserInfoSerializer(instance=obj[0])? ?# 關聯數據一個

return Response(ser.data, status=200)

# 創建用戶

'''創建用戶'''

def post(self,request):

ser = UserInfoSerializer(data=request.data)

# 判斷提交數據是否合法

if ser.is_valid():

ser.save()

return Response(data=ser.data, status=201)

return Response(data=ser.errors,status=400)

# 更新用戶信息

def put(self, request):

pk = request.query_params.get('pk')

try:

userinfo = User.objects.get(id = pk)

except Exception as e:

return Response(data='用戶不存在', status=201)

# 創建序列化對象,并將要反序列化的數據傳遞給data構造參數,進而進行驗證

ser = UserInfoSerializer(userinfo,data=request.data)

if ser.is_valid():

ser.save()

return Response(data=ser.data, status=201)

return Response(data=ser.errors,status=400)

2.測試接口

2.1 查詢所有用戶

2.2 創建用戶

2.3 更新用戶信

2.4 限流功能測試

http://192.168.56.100:8888/user/apiview/

'''修改syl/settings.py配置限速設置'''

REST_FRAMEWORK = {

#3.1 限流策略

'DEFAULT_THROTTLE_RATES': {

'user': '3/hour',? ? # 認證用戶每小時10次

'anon': '3/day',

},

}

總結

以上是生活随笔為你收集整理的python中view的用法_APIview使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。