问题:
在注册的接口,传递过来的参数,比如 电话,昵称 等
在用sqlalchemy查询的时候,有什么方法可以一次性的查询所有需要 判断 是否唯一的数据比如 电话,昵称,email一次性查询这三个,如果就 电话 有重复的,就返回 电话重复 相对应的提示
email = User.query.filter_by(email=email).first()if email: return jsonify({ "email": "该email已经被注册"})
我现在一条一条这么查,然后判断是否为空,是可以解决现有业务,但是感觉太LOW了,而且代码也太多了。
肯定不对。。求助各位大神要怎么写
解决:
1.
参考这篇文章:
使用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 中使用下面的方式渲染。
{ % for field_name, field_errors in addUserForm.errors|dictsort if field_errors %}{ % for error in field_errors %}{ { addUserForm[field_name].label }}错误: { { error }}{ % endfor %} {% endfor %} 这样会得到你所需要的内容提示。