那么使用前后端分离以后,所有对后端的请求都是以Ajax的方式发送,上面的方法依然有效!区别仅仅在于,我们将请求改成JSON格式之后,后端是从request.get_json()中获取的。...表单与验证 现在我们需要一个包含表单的登录页面,而我们知道,所有的页面都是前端渲染。所以这里wtform或flask-boostrap就不太能派上用场了。好在表单也比较简单,不是很难写。...我们需要写一个提交的函数,绑定到表单的submit动作上: Javascript methods: { checkForm (e) { e.preventDefault() const vm...后端验证这一块,由于没有渲染需求了,可以不用wtform这一套,改用marshmallow,但为了后面的方便,我还是使用了Flask-WTF,把验证放到表单类里。...后端的验证,通过响应内容传回错误。 验证错误通过Vue-flash-message显示到页面上。 login和register的视图函数仅处理POST请求。
它在 Flask-WTF 的基础上扩展并添加了一些随手即得的精巧的帮助函数, 这些函数将会使在 Flask 里使用表单更加有趣。...Part2:WTForm 支持的字段与验证器 WTForms 支持 HTML 字段: 1.字段类型说明 StringField—文本字段, 相当于 type 类型为 text 的 input 标签 TextAreaField...,值为 datetime.datetime 格式 IntegerField—文本字段,值为整数 DecimalField—文本字段,值为 decimal.Decimal 格式 FloatField—文本字段...可以支持很多表单的验证函数: 验证函数说明 Email—验证是电子邮件地址 EqualTo—比较两个字段的值;常用于要求输入两次密钥进行确认的情况 IPAddress—验证 IPv4 网络地址 Length...—验证输入字符串的长度 NumberRange—验证输入的值在数字范围内 Optional—无输入值时跳过其它验证函数 DataRequired—确保字段中有数据 Regexp—使用正则表达式验证输入值
高精度十进制数处理(适合金额) price =DecimalField(max_digits=10, decimal_places=2)SlugField Slug 格式字符串...字段特有参数:如 allow_blank(仅字符串字段)、min_value(仅数值字段)最佳实践使用 read_only/write_only 分离输入输出逻辑通过 error_messages 提升错误信息的可读性结合...数据验证5.1 三层验证机制字段级别验证:单个字段的合法性对象级别验证:多个字段的关系检查自定义验证器:可复用的验证逻辑5.2 验证示例class OrderSerializer(serializers.Serializer...检查是否忘记调用 is_valid()确认字段是否被标记为 write_only=TrueQ2: 如何处理部分更新?...prefetch_related 避免 N+1 查询版本控制:为不同 API 版本创建不同的 Serializer文档注释:使用 help_text 参数生成 API 文档
定义模型 在模型中定义属性,会生成表中的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django...=None, decimal_places=None):使用python的Decimal实例表示的十进制浮点数 DecimalField.max_digits:位数总数 DecimalField.decimal_places...,确保它是个有效的image 字段选项 通过字段选项,可以实现对字段的约束 在字段对象时通过关键字参数指定 null:如果为True,Django 将空值以NULL 存储到数据库中,默认值是 False...blank:如果为True,则该字段允许为空白,默认值是 False 对比:null是数据库范畴的概念,blank是表单验证证范畴的 db_column:字段的名称,如果未指定,则使用属性的名称 db_index...:若值为 True, 则在表中会为此字段创建索引 default:默认值 primary_key:若为 True, 则该字段会成为模型的主键字段 unique:如果为 True, 这个字段在表中必须有唯一值
--序列化器 上一篇介绍了很多有关视图类以及DRF中的APIView执行流程、Request对象的源码分析,源码都get了; DRF的核心当然不是知道视图类执行流程就可以了,DRF框架的核心那就是...序列化器的使用,如何使用序列化器实现 序列化、 反序列化,以及视图,这篇会介绍到~ 序列化器 什么是序列化和反序列化?...),序列化器可以把字典转换成模型存到数据库中 存数据库需要校验,反序列化就可以帮我们完成数据的校验功能 通俗理解为: 响应给前端的内容需要序列化(给前端看),存数据库的数据就反序列化; 序列化:模型对象...allow_null 表明该字段是否允许传入None,默认False validators 该字段使用的验证器(不太用) error_messages 包含错误编号与错误信息的字典 label...,那么自定制返回给前端的字段值就被自定制覆盖了,比如: title = serializers.SerializerMethodField() def get_title(self, obj
实例表示的十进制浮点数 银行和金融保险,相关的数据 存一个亿 ·参数说明 ·DecimalField.max_digits ·位数总数 ·DecimalField.decimal_places...FileField的所有属性和方法,但对上传的对象进行校验,确保它是个有效的image 上两个字段依赖pillow 字段选项 ·概述 ·通过字段选项,可以实现对字段的约束 ·在字段对象时通过关键字参数指定...·注意 ·null是数据库范畴的概念,blank是表单验证证范畴的 ·db_column ·字段的名称,如果未指定,则使用属性的名称 ·db_index ·若值为 True...(max_digits=None, decimal_places=None) ·使用python的Decimal实例表示的十进制浮点数 ·参数说明 ·DecimalField.max_digits...·如果为True,则该字段允许为空白,默认值是 False ·注意 ·null是数据库范畴的概念,blank是表单验证证范畴的 ·db_column ·字段的名称,如果未指定,则使用属性的名称
当没有设置default值是,BooleanField的值为None。...(10) DecimalField 固定精度的十进制数字,在python中由Decimal实例表示。...在PostgreSQL上使用时,使用的数据类型为interval,在Oracle上使用为。否则,将使用微秒。...(15) ImageField 继承FileField所有的方法,但还验证上传的对象为有效的图像。除了 可用于特殊属性FileField,一个ImageField也具有height和width 属性。...如果需要在尚未定义的模型上创建关系,则可以使用模型的名称,而不是模型对象本身。
验证失败,可以通过序列化器对象的errors属性获取错误信息,返回字典,包含了字段和字段的错误提示。...6、小结 is_valid实际上内部执行了三种不同的验证方式: 先执行了字段内置的验证选项 在执行了validators自定义选项 最后执行了validate自定义验证方法[包含了validate_<字段...child=) 选项参数: 参数名称 作用 max_length 最大长度[适用于字符串,列表,文件] min_lenght 最小长度[适用于字符串,列表,文件] allow_blank 是否允许数据的值为空...,如果使用这个选项,则前端传递过来的数据必须有这个属性。...表明该字段是否允许传入None,默认False validators 该字段使用的验证器 error_messages 包含错误编号与错误信息的字典 label 用于HTML展示API页面时,显示的字段名称
choices 一个2元元组的元组或者列表,如果执行 choices , Django 的 admin 就会使用 选择框而不是标准的 text 框填写这个 field。...8、DateTimeField 对应Python的datetime.datetime,参照参数(7)。 9、DecimalField 固定精度的十进制数,一般用来存金额相关的数据。...对应python的Decimal,额外的参数包括DecimalField.max_digits和DecimalField.decimal_places ,这个还是要参照一下mysql的Decimal类型...有效位数。...2.2, 17、NullBooleanField 可以包含空值的布尔类型,相当于设置了null=True的BooleanField。
引言 在之前的 Django模型设计 中简单的介绍了如何定义模型类,在这篇中将做一个汇总。让大家更加了解Django模型类。...IntegerField IntegerField:整数类型字段 DecimalField DecimalField(max_digits=None, decimal_places=None):十进制浮点数...备注 null 如果为True,表示允许为空,默认值是False。...blank 如果为True,则该字段允许为空白,默认值是False。 db_column 字段的名称,如果未指定,则使用属性的名称。...primary_key 若为True,则该字段会成为模型的主键字段,默认值是False。 unique 如果为True, 这个字段在表中必须有唯一值,默认值是False。
将QuerySet的exists()方法的返回值用于if条件。 用DecimalField来存储货币相关数据而不是FloatField。 定义__str__方法。 不要将数据文件放在同一个目录中。...验证 FileField 文件上传字段 FloatField 存储浮点数 ImageField 其他同FileFiled,要验证上传的是不是有效图像 IntegerField 存储32位有符号整数。...存储URL的CharField UUIDField 存储全局唯一标识符 字段属性 通用字段属性 选项 说明 null 数据库中对应的字段是否允许为NULL,默认为False blank 后台模型管理验证数据时...,是否允许为NULL,默认为False choices 设定字段的选项,各元组中的第一个值是设置在模型上的值,第二值是人类可读的值 db_column 字段对应到数据库表中的列名,未指定时直接使用字段的名称...db_constraint:是否为外键创建约束,默认值为True。
,可以把商品价格设置DecimalField max_digits=10 整数位的长度为10位 decimal_places=2 小数点后2位 blank=True 允许为空格 null=True...值为12.1 但是查询出来是保留2位小数点 12.10 ?...它必须是 None 或大于等于 decimal_places 的整数。 decimal_places 以数字存储的小数位数。 max_value 验证所提供的数字不大于这个值。...min_value 验证所提供的数字不小于这个值。 localize 设置为 True 以便基于当前区域启用输入和输出本地化。 这也将强制 coerce_to_string 为 True。...请注意,设置 localize 会将值强制为 True。 rounding 设置量化到配置精度时使用的舍入模式。 有效值是 decimal 模块舍入模式。 默认为 None。
IntegerField # 十进制浮点数 , 参数maxdigits表示总位数, 参数decimalplaces表示小数位数 Decimalfield # 浮点数 FloatField # 日期字段...DateTimeField # 上传文件字段 FileField # 继承于FileField,对上传的 内容进⾏行行校验,确保是有效的图⽚片 imageField 字段选项: # 如果为True...,表示允许为空,默认值是False null # 如果为True,则该字段允许为空白,默认值是False blank # 字段的名称,如果未指定,则使用属性的名称 db_column # 若值为True...auto_now_add # (时间字段独有)配置上auto_now=True,每次更新数据记录的时候会更新该字段。...models.PROTECT # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空) models.SET_NULL # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值
字符串,参数max_length表示最大字符个数 TextField 大文本字段,一般超过4000个字符时使用 IntegerField 整数 DecimalField 十进制浮点数, 参数max_digits...继承于FileField,对上传的内容进行校验,确保是有效的图片 5) 选项 选项 说明 null 如果为True,表示允许为空,默认值是False blank 如果为True,则该字段允许为空白,...默认值是False db_column 字段的名称,如果未指定,则使用属性的名称 db_index 若值为True, 则在表中会为此字段创建索引,默认值是False default 默认 primary_key...若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用 unique 如果为True, 这个字段在表中必须有唯一值,默认值是False null是数据库范畴的概念...,blank是表单验证范畴的 6) 外键 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量: CASCADE
,从而枚举用户名 修复方案:使用模糊的错误提示,如用户名或密码不正确 账号锁定:用户爆破的时候错误次数过多锁定账号,然后黑客批量尝试用户名导致大部分用户名被锁 账号详情泄露:提交合法用户名,服务器返回关于用户名相关的账号...请求,导致验证码认证成功后进行攻击,比如验证码成功后抓到正在的用户名密码的请求进行暴力破解 置空:当验证码的值或者参数置空的时候,可以直接认证,这是服务端逻辑判断少了一个验证码为空的判断 验证码复用:同一个验证码可以不限次数的使用...,或者验证码用完没销毁,导致可以爆破或者任意注册 前端显示:服务端生成的验证码不是图片,而是字符串直接返回到前端 任意值:拦截到http请求,对验证码的值设置任意值都能通过验证码验证 优先级低:同一个http...请求到服务端以后验证码不是最先验证的,比如先验证用户名,导致用户枚举 打码平台:使用打码平台调用验证码接口获取验证码进行识别,返回验证码 修复方案:验证码必须要在服务端生成添加杂点干扰项并足够扭曲以图片格式返回前端...上面重放攻击那么多,什么是对抗重放攻击最有效的手段? 对于可以使用脚本或者程序自动化攻击的,最有效的防御手段就是验证码!! 防御手段有哪些关键点呢? 如何尽可能的避免各种逻辑绕过的漏洞?
id=1 # 查询id为1的书籍信息 查询结果如下所示: 通过data属性获取序列化之后的数据。如果需要获取多条数据,需要使用参数many=True。...最大值 min_value 最小值 is_valid()方法验证字段的序列化器属性。...验证成功,返回True,否则返回False。 验证失败返回的错误信息存放在errors属性中,验证成功可以通过序列化器的validated_data属性获取数据。...,不是必传参数 commentcount = serializers.IntegerField(label='评论量', min_value=0, required=False) # 最小值0...('name', instance.name) # 如果前端没有传递这个书籍,那么就获取原来的值 instance.pub_date = validated_data.get
反序列化,完成数据的校验功能 为方便理解后面序列化器中的字段,我们先在创建的APP中的models.py 建立一个数据库模型类。...None,默认False validators 该字段使用的验证器 error_messages 包含错误编号与错误信息的字典 label 用于HTML展示API页面时,显示的字段名称 help_text...验证失败,可以通过序列化器对象的errors 属性获取错误信息,返回字典,包含了字段和字段的错误。...如果是非字段错误,可以通过修改REST framework 配置中的NON_FIELD_ERRORS_KEY 来控制错误字典中的键名。...: model=Book # 对应上models.py中的模型 fields='__all__' model 指明参照哪个模型类 fields 指明为模型类的哪些字段生成
password在前端用url编码--->URL Decode ? 爆破成功 漏洞修复: 1、增强验证码机制,为防止验证码被破解,可以适当增加验证码生成的强度,例如中文图形验证码。...漏洞修复: 1.取消默认硬编码配置,删除敏感信息,禁止直接明文存储在前端登陆框。...爆破成功 漏洞修复: 1.点击获取手机验证码后产生即时更新强图形验证码 2.限制输入错误次数 3.缩短验证码的有效期 五、短信轰炸 ?...那我非常好奇,那如何判断用户已经错误几次了呢?...Q2:验证码不过期,单个验证码反复可用 原理:大部分情况,验证码在web服务器上对应一个session值。
模型类的设计和表的生成 了解了ORM的含义,我们来体验一下Django框架中是如何具体运用的: 首先编写一个模型类 ? 这里我们有book_title和book_date两个属性。...渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 使用时需要引入from django.db import models包 AutoField:自动增长的IntegerField,通常不用指定...不指定时Django会自动创建属性名为id的自动增长属性 BooleanField:布尔字段,值为True或False NullBooleanField:支持Null、True、False三种值 CharField...:继承于FileField,对上传的内容进行校验,确保是有效的图片 编写完我们的模型类之后,我们需要生成迁移文件: ?...大家可以看到上图,我们在之前的模型类BookInfo基础上,加了一个People模型类,因为在一本书中可能会出现很多人物。
在设计的时候未考虑向下兼容,所以Python早期版本所设计的程序都无法在Python3.0上正常运行。...Python开发环境IDE的使用 如何用idea打开一个Python工程: 1. 配置Python SDK: 配置sdk 2....,需要继承一个Python的标准异常,根据需求自定义异常错误码,错误信息等。...Flask没有默认使用的数据库、窗体验证工具。Flask 很轻,花很少的成本就能够开发一个简单的网站。非常适合初学者学习。Flask 框架学会以后,可以考虑学习插件的使用。...例如使用WTForm+ Flask-WTForm来验证表单数据,用SQLAlchemy+ Flask-SQLAlchemy来对你的数据库进行控制。
领取专属 10元无门槛券
手把手带您无忧上云