django - 利用postman进行数据接口调试

效果如下

django - 利用postman进行数据接口调试_第1张图片
1.settings.py 文件中 定义:

# 配置restful api返回结果
REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
    # 下面的是路径utils目录下的RenderResponse.py文件中定义了一个类
        'utils.RenderResponse.CustomJsonRenderer',
    )
}

2.serializers.py 文件中:

from rest_framework import serializers

from stu.models import Student


class StudentSerializer(serializers.ModelSerializer):
    # 在postman中 修改s_name 和 s_tel的数据类型不符合数据类型时
    s_name = serializers.CharField(error_messages={
        'blank': '用户名不能为空',
        'max_length':'用户名不能超过10个字符串'
    }, max_length=10)

    s_tel = serializers.CharField(error_messages={
        'blank': '电话不能为空'
    })

    class Meta:
    # 选择数据库模型
        model = Student
    # 给在postman中显示的 三列内容 定义fields 不然运行时报错
        fields = ['id','s_name', 's_tel']
    # 创建一个实例对象
    def to_representation(self, instance):
        # 把实例的数据类型转换成字典(dict)
        data = super().to_representation(instance)
        try:
            # instance 相当于 Student()对象的实例 
            # 用实例.外键关联的表格 并存放到字典对应的键中
            data['s_addr'] = instance.studentinfo.i_addr
            # studentinfo中可能没有内容, 做一个异常处理
        except Exception as e:
            data['s_addr'] = ''

        return data

3.utils下的RenderResponse.py文件中:


from rest_framework.renderers import JSONRenderer

class CustomJsonRenderer(JSONRenderer):

    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        格式
        {
            'code':xxx,
            'msg':请求成功,
            data:{返回数据}
        }
        """
        # 如果rederer_context有内容
        if renderer_context:
        # 判断实例是否是字典类型  
            if isinstance(data, dict):
            # 如果msg存在删除键,返回值,msg=值,如果没有msg='请求成功'  请求成功是默认值
                msg = data.pop('msg', '请求成功')
            # 如果有code,删除code键, 返回值,命名code=值, 如果没有code键,则重新命名code = '0'
                code = data.pop('code', 0)
            else:
                msg = '请求成功'
                code = 0
            # 获取response 回应信息
            response = renderer_context['response']
            # 如果请求成功返回200状态码
            response.status_code = 200

            res = {
                'code': code,
                'msg': msg,
                'data': data
            }
            # 调用父类的render方法,和跳转的render不是一个方法, 下同
            return super().render(res,accepted_media_type, renderer_context)

        else:
            return super().render(data, accepted_media_type, renderer_context)

你可能感兴趣的:(django - 利用postman进行数据接口调试)