flask sqlalchemy联合wtf-form表单 查询需要的值是否存在
问题:
在注册的接口,传递过来的参数,比如 电话,昵称 等
在用sqlalchemy查询的时候,有什么方法可以一次性的查询所有需要 判断 是否唯一的数据
比如 电话,昵称,email
一次性查询这三个,如果就 电话 有重复的,就返回 电话重复 相对应的提示
email = User.query.filter_by(email=email).first() if email: return jsonify({"email": "该email已经被注册"})
我现在一条一条这么查,然后判断是否为空,是可以解决现有业务,但是感觉太LOW了,而且代码也太多了。
肯定不对。。求助各位大神要怎么写
解决:
1.
参考这篇文章:http://www.chenxm.cc/post/581...
使用exists(),or_() 配合查询
from sqlalchemy import or_ filter(or_(User.email == 'ed', User.phone == '13911223344'))
2.
使用 flask-wtforms 插件, forms.py
内容如下
class AddUserForm(FlaskForm): username = StringField(u'用户名', validators=[DataRequired(), Length(1, 64, message=u'姓名长度要在1和64之间'), Regexp(ur'^[\u4E00-\u9FFF]+$', flags=0, message=u'用户名必须为中文')]) email = StringField(u'邮箱', validators=[DataRequired(), Length(6, 64, message=u'邮件长度要在6和64之间'), Email(message=u'邮件格式不正确!')]) role = SelectField(u'权限', choices=[(u'True', u'管理员'), (u'False', u'一般用户') ]) status = SelectField(u'状态', choices=[(u'True', u'正常'), (u'False', u'注销') ]) submit = SubmitField(u'添加用户') def validate_username(self, field): if User.query.filter_by(username=field.data).first(): raise ValidationError(u'用户名已被注册!') def validate_email(self, field): if User.query.filter_by(email=field.data).first(): raise ValidationError(u'邮箱已被注册!') ··· 然后在 html 中使用下面的方式渲染。
<!-- 错误信息form提示 --> {% for field_name, field_errors in addUserForm.errors|dictsort if field_errors %} {% for error in field_errors %} <div class="alert alert-danger alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button> <strong>{{ addUserForm[field_name].label }}错误:</strong> {{ error }} </div> {% endfor %}
{% endfor %}
<!-- 错误信息form提示 end -->
这样会得到你所需要的内容提示。