Apiview使用方法

1.user/models.py 表数据

from django.db import models

from django.contrib.auth.models import AbstractUser
# Create your models here.

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 Meta:

        db_table = 'tb_user'
user/models.py

 

2.user/serializers.py

from rest_framework import serializers
from user.models import User


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)# 自定义显示(显示多对

    aaa=serializers.SerializerMethodField(read_only=True)
    class Meta:
        model=User
    #展示自定义字段
    def get_xxx(self,row):
        users=row.phone
        return users

    def get_aaa(self,r):
        nick=r.nick_name
        return nick
    #添加字段
    def create(self, validated_data):
        return User.objects.create(**validated_data)
    #修改字段
    def update(self,instance,validated_data):
        if validated_data.get('nick_name','address'):
            instance.address=validated_data['address']
            instance.nick_name = validated_data['nick_name']
        instance.save()
        return instance
    #权限
    def validate_username(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
user/serializers.py

 

3.user/views.py

from .serializers import UserInfoSerializer
from rest_framework.views import APIView
from .models import User



class UserInfoViewSet(APIView):
    #查询用户
    def get(self,request,*args,**kwargs):
        obj=User.objects.all()
        ser=UserInfoSerializer(obj,many=True)
        return Response(ser.data,status=200)

    #创建用户
    def post(self,request):
        ser=UserInfoSerializer(data=request.data)
        #判断提交数据是否合法
        if ser.is_valid():
            ser.save()
            return Response(ser.data,status=201)
        return Response(ser.errors,status=400)

    #更改用户信息
    def put(self,request):
        pk=request.query_params.get('pk')
        print(pk)
        try:
            userinfo=User.objects.get(id=pk)
        except Exception as e:
            return Response(data='用户不存在',status=201)

        ser=UserInfoSerializer(userinfo,data=request.data)
        if ser.is_valid():
            ser.save()
            return Response(ser.data,status=201)
        return Response(data=ser.errors,status=400)
user/views.py

 

 4.user/urls.py 路由

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

]

 

 

 

查询 

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

 

 

修改

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

 

 

 

添加

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

 

posted @ 2020-10-28 15:02  小虾米爱吃鱼  阅读(242)  评论(0编辑  收藏  举报