首页 > 其他分享 >Django 字段类型,字段参数,以及在drf中的使用。

Django 字段类型,字段参数,以及在drf中的使用。

时间:2024-03-25 11:12:23浏览次数:23  
标签:None False max only Django length 参数 序列化 drf

字段类型

# models中CharField,DecimalField.....


# 记住的:
	CharField
  IntegerField
  FloatField
  DecimalField
  DateTimeField
  DateField

# 知道--》models中没有的---》反序列化的时候,前端传入的
{name:lqz,age:19,hobby:[篮球,足球],wife:{name:lyf,age:38}}
	ListField
  DictField
字段 字段构造方式
BooleanField BooleanField()
NullBooleanField NullBooleanField()
CharField CharField(max_length=None, min_length=None, allow_blank=False, trim_whitespace=True)
EmailField EmailField(max_length=None, min_length=None, allow_blank=False)
RegexField RegexField(regex, max_length=None, min_length=None, allow_blank=False)
SlugField SlugField(maxlength=50, min_length=None, allow_blank=False) 正则字段,验证正则模式 [a-zA-Z0-9-]+
URLField URLField(max_length=200, min_length=None, allow_blank=False)
UUIDField UUIDField(format=’hex_verbose’) format: 1) 'hex_verbose' 如"5ce0e9a5-5ffa-654b-cee0-1238041fb31a" 2) 'hex' 如 "5ce0e9a55ffa654bcee01238041fb31a" 3)'int' - 如: "123456789012312313134124512351145145114" 4)'urn' 如: "urn:uuid:5ce0e9a5-5ffa-654b-cee0-1238041fb31a"
IPAddressField IPAddressField(protocol=’both’, unpack_ipv4=False, **options)
IntegerField IntegerField(max_value=None, min_value=None)
FloatField FloatField(max_value=None, min_value=None)
DecimalField DecimalField(max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None) max_digits: 最多位数 decimal_palces: 小数点位置
DateTimeField DateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=None)
DateField DateField(format=api_settings.DATE_FORMAT, input_formats=None)
TimeField TimeField(format=api_settings.TIME_FORMAT, input_formats=None)
DurationField DurationField()
ChoiceField ChoiceField(choices) choices与Django的用法相同
MultipleChoiceField MultipleChoiceField(choices)
FileField FileField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ImageField ImageField(max_length=None, allow_empty_file=False, use_url=UPLOADED_FILES_USE_URL)
ListField ListField(child=, min_length=None, max_length=None)
DictField DictField(child=)

字段参数

# 写在字段类中的参数--》如:max_length。。。


# 重点:
read_only:表明该字段仅用于序列化输出,默认False
  -如果read_only=True,这个字段只用来做序列化---》把对象---》json给前端
write_only:表明该字段仅用于反序列化输入,默认False
  -如果read_only=write_only,这个字段只用来做反序列化---》前端json---》存到数据库
  
  
# 举例
    name=serializers.CharField(max_length=32,min_length=3)
    price=serializers.CharField(write_only=True,read_only=True)
    author=serializers.CharField(write_only=True)
   
    
    # 什么都不写,表示既序列化,又反序列化
    # 序列化给前端,前端看到的字段样子---》只能看到name
    # 反序列化,前端需要传什么过来name,price,author都传
    
    # write_only=True,read_only=True 逻辑矛盾
参数名称 作用
max_length 最大长度(CharField)
min_lenght 最小长度(CharField)
allow_blank 是否允许为空(CharField)
trim_whitespace 是否截断空白字符(CharField)
max_value 最小值 (IntegerField)
min_value 最大值(IntegerField)

通用参数:

参数名称 说明
read_only 表明该字段仅用于序列化输出,默认False
write_only 表明该字段仅用于反序列化输入,默认False
required 表明该字段在反序列化时必须输入,默认True
default 反序列化时使用的默认值
allow_null 表明该字段是否允许传入None,默认False
validators 该字段使用的验证器(不太用)
error_messages 包含错误编号与错误信息的字典
label 用于HTML展示API页面时,显示的字段名称
help_text 用于HTML展示API页面时,显示的字段帮助提示信息

序列化时,定制序列化的字段

### 两种方案


# 作用?比如author关联了外键,想取出作者详情
# author_info = serializers.SerializerMethodField()
# def get_author_info(self,obj):
#     return {'name':obj.author.name,'age':obj.author.age}
# 第一种:在序列化类中写
# price_info = serializers.SerializerMethodField()  # 必须配合一个方法,方法名get_字段名
# def get_price_info(self, obj): # 方法返回什么,字段就是什么,obj是当前序列化到的单个对象
#     return "价格是:"+str(obj.price)  # python是动态强类型语言--》强类型是:不同类型之间不允许直接运算

# 第二种方案:在models中写方法,这里字段名就是models的方法名,price_info方法返回什么,这个字段就是什么
# price_info=serializers.CharField()
authors=serializers.ListField()

序列化类中写

price_info = serializers.SerializerMethodField()  # 必须配合一个方法,方法名get_字段名
def get_price_info(self, obj): # 方法返回什么,字段就是什么,obj是当前序列化到的单个对象
   return "价格是:"+str(obj.price)  # python是动态强类型语言--》强类型是:不同类型之间不允许直接运算

表模型中写

# 表模型中写方法
@property   # 把方法包装成数据属性
def price_info(self):
   return "价格是:" + str(self.price)
  
# 序列化类中使用
price_info=serializers.CharField(read_only=True)  # 只用来做序列化
# authors=serializers.ListField()

扩展on_delete:

on_delete
  当删除关联表中的数据时,当前表与其关联的行的行为。

  models.CASCADE
  删除关联数据,与之关联也删除

  models.DO_NOTHING
  删除关联数据,引发错误IntegrityError

  models.PROTECT
  删除关联数据,引发错误ProtectedError

  models.SET_NULL
  删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)

  models.SET_DEFAULT
  删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

  models.SET

  删除关联数据,
  a. 与之关联的值设置为指定值,设置:models.SET(值)
  b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

标签:None,False,max,only,Django,length,参数,序列化,drf
From: https://www.cnblogs.com/HeroZhang/p/18093967

相关文章

  • drf : 模型类序列化器 以及扩展用法。
    模型类序列化器:serializer的升级。注意,此时表模型自身的校验规则也将映射过来。只需要在serializers中写一个模型类序列化器即可。serializer.py#模型类序列化器#此序列化类和表模型有对应关系,映射classPublishModelSerializer(serializers.ModelSerializer):class......
  • drf : source,定制序列化字段以及反序列化新增。局部钩子(validate_字段名),全局钩子(va
    source,SerializerMethodField,局部钩子,全局钩子serialzer.py:source用处对应字段:起别名,用处2对应方法:在表模型中定义一个方法,source可以与其关联用处3对应方法:可以当做字段第三种方法的扩展用法:使用程度高。model.pyfromdjango.dbimportmodels#Createyourmo......
  • drf : APIView执行流程和新的Request源码。APIView和Request对象分析
    DRF基本使用及执行流程分析1.继承APIView使用2.APIView的执行流程路由:path('Book1',view.Book.as_view())-->第二个参数是函数的内存地址-->APIView的as_view的执行结果-->本质还是用了View类的as_viewn内的viewc包函数,去掉了csrf的认证。-->当请求来......
  • 查看linux系统参数命令
    在Linux系统中,可以使用 sysctl 命令来查看系统参数。要查看类似最大进程数的系统参数,可以使用以下命令: sysctl-a|grepmaxproc这条命令将列出所有与最大进程数相关的系统参数。其中,kernel.pid_max 是用来限制系统中最大进程ID数量的参数,kernel.threads-max 是用来限......
  • drf: 序列化和反序列化, Django Rest_Framework 介绍也安装及使用。
    序列化与返序列化序列化:将python中的数据类型转换成指定数据类型发送给别人返序列化:接收别人发送过来的数据,返序列化成我们所需要的格式。eg::前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。DjangoR......
  • Django csrf跨站请求伪造,校验,CBV忽略与允许csrf校验
    csrf跨站请求伪造钓鱼网站,搭建一个网站与正规网站一模一样的界面,用户进入到我们的网站中,给指定用户转账,汇款确实提交到银行,但是收款人确实我们自己定义的人。本质在钓鱼网站的页面针对对方账户,只给用户提供一个没有name属性的普通input框,在内部则隐藏一个已经写好的name和value......
  • drf : web应用模式,RESTful API规范,接口测试工具:Postman
    drf:web应用模式,RESTfulAPI规范,接口测试工具:PostmanWeb应用模式前后端不分离前后端分离API接口前后端交互的媒介WebAPI接口和一般的url链接还是有区别的,WebAPI接口简单概括有下面四大特点。url:长得像返回数据的url链接https://api.map.baidu.com/place/v2/search......
  • Django 中间件以及自定义中间件
    Django中间件Django中间件是Django的门户请求来的时候需要先经过中间件才能达到真正的Django后端响应走的时候最后也要经过中间件才能发送出去MIDDLEWARE=['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddle......
  • djangoCIA报价平台的设计与实现(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的飞速发展,互联网已经深入到我们日常生活的方方面面。在众多的应用场景中,报价系统作为商业交易的重要环节,扮演着至关重要的角色。尤其是在CIA(Ce......
  • djangoAndroid共享停车位(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着城市化进程的加速,汽车已成为人们日常生活中不可或缺的交通工具。然而,在许多城市中,由于停车位数量有限,停车难成为了一大问题。为了解决这一问题,共享停车......