'''
新建一个django项目,定义一个Car类,有name字符串属性,color整型选择属性(0:银色,1:黑色,2:红色,3:灰色),price全精度小数类型,image图片文件类型,brand字符串类型
基于ModelSerializer类,完成Car资源的单查,群查,单增接口
序列化:显示车名,车的颜色,车的价格,车的海报,车的品牌
反序列化:必须提供车名,车的价格,车的品牌(车的匹配需要二次确认re_brand),车的颜色默认为银色(可以提供),车的海报不需要提供(默认为空)
'''
from rest_framework import exceptions,serializers
from django.conf import settings
from api import models
class CarSerializer(serializers.Serializer):
name = serializers.CharField()
price = serializers.DecimalField(max_digits=8,decimal_places=2)
brand = serializers.CharField()
color = serializers.SerializerMethodField()
def get_color(self,obj):
return obj.get_color_display()
img = serializers.SerializerMethodField()
def get_img(self,obj):
return f"http://127.0.0.1:8000{settings.MEDIA_URL}{str(obj.image)}"
class CarDeSerializer(serializers.Serializer):
name = serializers.CharField()
color = serializers.IntegerField(required=False)
price = serializers.DecimalField(max_digits=8, decimal_places=2,required=True)
img = serializers.ImageField(required=False)
brand = serializers.CharField(required=True)
re_brand = serializers.CharField(required=True)
def validate(self, attrs):
brand = attrs.get('brand')
re_brand = attrs.pop('re_brand')
if brand != re_brand:
raise exceptions.ValidationError('两次品牌不一致')
return attrs
def create(self, validated_data):
return models.Car.objects.create(**validated_data)
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from . import models,serializers
def post(self, request, *args, **kwargs):
if not isinstance(request.data, dict) or request.data == {}:
return Response({
'status': 0,
'msg': '数据异常',
})
car_dser = serializers.CarDeSerializer(data=request.data)
if car_dser.is_valid():
car_obj = car_dser.save()
return Response({
'status': 0,
'msg':'ok',
'results':serializers.CarSerializer(car_obj).data
})
else:
return Response({
'status': 0,
'msg': 'ok',
'results':car_dser.errors
})
from django.conf.urls import url,include
from django.contrib import admin
from django.views.static import serve
from django.conf import settings
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/',include('api.urls')),
url(r'^media/(?P<path>.*)',serve,{"document_root":settings.MEDIA_ROOT})
]
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)