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">&times;</span></button>
        <strong>{{ addUserForm[field_name].label }}错误:</strong> {{ error }}
    </div>
{% endfor %}
{% endfor %}
<!-- 错误信息form提示 end -->
这样会得到你所需要的内容提示。

 

posted @ 2019-01-11 09:12  大西瓜Paul  阅读(492)  评论(0编辑  收藏  举报
/*增加返回顶部按钮*/ 返回顶部 /*给标题增加蓝色背景长条*/