<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Loading

      APIView和serializers的使用

      1.APIview使?


      djangorestframework使用:http://www.rzrgm.cn/xiaonq/p/10124104.html

      DjangoRestFramework使用:http://www.rzrgm.cn/xiaonq/p/10987889.html

      • ModelViewSet 是對(duì) APIView 封裝
      • ModelSerializer 是對(duì) Serializer

      1.1user/urls.py中添加路由

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

      1.2 創(chuàng)建user/serializers.py寫序列化器

      • serializers.ModelSerializer 和 serializers.Serializer fifield參數(shù)說(shuō)明
      ''' field參數(shù) '''
      # 1.read_only
      read_only=True 表示不允許?戶??上傳,只能?于api的輸出,序列化的時(shí)候也不?對(duì)這個(gè)數(shù)據(jù)進(jìn)?驗(yàn)證,序列化返回是有改字段
      # 2.write_only
      write_only=True 表示在更新或創(chuàng)建實(shí)例時(shí)可以使?該字段,但在序列化返回時(shí)不包括該段。
      # 3.required:該字段是必需的,不能為空
      required=True 反序列化(前端返回?cái)?shù)據(jù)必須包含此字段)的時(shí)候必須提供這個(gè)字段 設(shè)置False 可以不提供
      # 4.allow_null/allow_blank:該字段允許為null/空
      allow_null=True 可以為null 設(shè)置False則不能為null
      # 5.label:標(biāo)簽,?于對(duì)字段顯示設(shè)置
      # 6.help_text:對(duì)字段進(jìn)?解釋的?段?本,?于提示
      # 7.style:說(shuō)明字段的類型
      # 8.error_messages:字段出錯(cuò)時(shí),信息提示
      
      • 創(chuàng)建user/serializers.py寫序列化器
      '''
       class User(AbstractUser):
       phone = models.CharField('?機(jī)號(hào)',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) # 普通字段,設(shè)置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)
           class Meta:
           	model = User
      
      # 定義創(chuàng)建語(yǔ)法:ser.save()執(zhí)?,就會(huì)?刻調(diào)?create?法?來(lái)創(chuàng)建數(shù)據(jù)
       def create(self, validated_data):
       '''
       validated_data: 表單或者vue請(qǐng)求攜帶的json:
      {"username":"zhangsan","password":"123456"}
      '''
       # http://www.rzrgm.cn/xiaonq/p/7978409.html
       	return User.objects.create(**validated_data)
      
      # 定義更新?法
       def update(self, instance, validated_data):
       '''
       instance : 查詢的對(duì)象
       validated_data : postman提交的json數(shù)據(jù)
      {"username":"zhangsan","password":"123456"}
       '''
            if validated_data.get('username'):
                instance.username = validated_data['username']
            instance.save()
            return instance
      
      # 定義單?字段驗(yàn)證的?法
       def validate_username(self, value):
            if value == 'root':
            	raise serializers.ValidationError('不能創(chuàng)建root管理員賬號(hào)')
            return value
      
       # 定義多字段驗(yàn)證?法
       def validate(self, attrs):
            print(attrs)
            if attrs.get("username") == 'admin':
                raise serializers.ValidationError('不能創(chuàng)建admin?戶')
            return attrs
      

      1.3user/views.py中添加視圖函數(shù)

      from .models import User
      from .serializers import UserSerializers
      from rest_framework.views import APIView
      from rest_framework.response import Response
      
      class UserView(APIView):
          # 查詢用戶信息
          def get(self, request, *args, **kwargs):
              # ?對(duì)多、多對(duì)多查詢都是?樣的語(yǔ)法
              queryset = User.objects.all()
              ser = UserSerializers(queryset, many=True)  # 多條數(shù)據(jù)需要many=True
              # ser = UserInfoSerializer(instance=obj[0]) # 關(guān)聯(lián)數(shù)據(jù)?個(gè)
              return Response(ser.data)
      
          # 創(chuàng)建用戶
          def post(self, request):
              data = request.data
              ser = UserSerializers(data=data)
              try:
                  # 判斷提交數(shù)據(jù)是否合法
                  ser.is_valid()
                  ser.save()  # 保存
                  return Response({'code': 200, 'msg': '添加成功'})
              except Exception as e:
                  # print(e)
                  print(ser.errors)
                  return Response({'code': 400, 'msg': '添加失敗'})
      
          # 更新?戶信息
          def put(self, request):
              pk = request.query_params.get('pk')  # 修改數(shù)據(jù)需要先知道修改那一條數(shù)據(jù) 
              try:
                  userinfo = User.objects.get(id=pk)
              except:
                  return Response({'code': 400, 'msg': '用戶不存在'})
              # 創(chuàng)建序列化對(duì)象,并將要反序列化的數(shù)據(jù)傳遞給data構(gòu)造參數(shù),進(jìn)而進(jìn)行驗(yàn)證
              ser = UserSerializers(userinfo, data=request.data)
              if ser.is_valid():
                  ser.save()
                  return Response({'code': 200, 'msg': '修改成功'})
              return Response({'code': 400, 'errors': ser.errors})
           
           #刪除數(shù)據(jù)
          def delete(self, request):
              pk = request.query_params.get('pk')
              try:
                  #刪除不需要序列化直接查詢后刪除
                  User.objects.filter(id=pk).delete()
                  return Response({'code': 200, 'msg': '刪除成功'})
              except:
                  return Response({'code': 400, 'msg': '刪除失敗'})
      
      

      2.序列化正想反相查詢

      http://www.rzrgm.cn/xiaonq/p/10987889.html#i3
      

      3.測(cè)試接?

      3.1 查詢所有?戶

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

      3.2 創(chuàng)建?戶

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

      3.3 更新?戶信息

      http://192.168.56.100:8888/user/apiview/?pk=7
      

      3.4 限流功能測(cè)試

      http://192.168.56.100:8888/user/apiview/
      '''修改syl/settings.py配置限速設(shè)置'''
      REST_FRAMEWORK = {
           #3.1 限流策略
           'DEFAULT_THROTTLE_RATES': {
                'user': '3/hour', # 認(rèn)證?戶每?時(shí)10次
                'anon': '3/day',
           },
      }
      
      posted @ 2020-10-27 18:48  就學(xué)45分鐘  閱讀(172)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 日韩 一区二区在线观看| 国产盗摄视频一区二区三区| 免费播放一区二区三区| 成人午夜大片免费看爽爽爽| 国产一区二区三区导航| 亚洲av日韩av永久无码电影| 一本色道久久88亚洲综合| 四川丰满少妇无套内谢| 亚洲欧美另类久久久精品播放的| 巨熟乳波霸若妻在线播放| 丰满人妻熟妇乱又伦精品软件| 亚洲精选av一区二区| 游戏| 亚洲狼人久久伊人久久伊| 日本一区二区三区免费播放视频站| 国产稚嫩高中生呻吟激情在线视频| 天天躁夜夜躁天干天干2020| 广东少妇大战黑人34厘米视频| 亚洲a∨无码无在线观看| 久久99精品国产麻豆婷婷| 精品国产乱码久久久人妻| 珠海市| 国产精品大全中文字幕| 国产日韩精品视频无码| 一区二区和激情视频| 亚洲熟女精品一区二区| 国产精品久久久久久无毒不卡| а∨天堂一区中文字幕| 中文字幕日本六区小电影| 国产精品不卡一区二区在线| 波多野无码中文字幕av专区| 日韩精品无码一区二区三区视频| aa性欧美老妇人牲交免费| 91精品国产综合蜜臀蜜臀| 2021国产成人精品久久| 国产亚洲精品AA片在线播放天| 少妇人妻激情乱人伦| 亚洲国产欧美在线人成aaaa| 国产精品一区二区黄色片| 少妇真人直播免费视频| 国产在线观看播放av|