![]()
1、在项目的app的init.py下创建db数据库
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = 'mysql+pymysql://用户名:密码@127.0.0.1:3306/数据库名称'
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
app.debug = True #设置成调试模式
db = SQLAlchemy(app) #定义db数据库
2、在models.py文件中导入db数据库
from app import db
3、在forms.py中定义表单验证
from flask_wtf import FlaskForm #先安装flask_wtf然后导入
from wtforms import StringField, PasswordField, SubmitField #导入需要字段类型
from wtforms.validators import DataRequired,ValidationError #
class LoginForm(FlaskForm): #定义管理员登录表单
"""管理员登录表单"""
account = StringField(
label='账号', #标签
validators=[ #验证器,不能为空
DataRequired('请输入账号') #描述
],
description='账号', #
render_kw={ #附加选项,可以添加css的样式
'class': "form-control",
'placeholder': "请输入账号!",
# 'required': 'required',
}
)
def validate_account(self, field): #自定义表单验证
account = field.data #获取输入的账号
admin=Admin.query.filter_by(name=account).count() #根据账号查询数据库是否存在
if admin==0:
raise ValidationError('账号不存在') #如果没有该用户,使用raise抛出一个异常
3-1、表单的处理
在view.py中导入LoginForm表单
from app.admin.forms import LoginForm #导入表单
@admin.route('/login/', methods=['GET', 'POST'])
def login():
login_form = LoginForm() #定义表单
if login_form.validate_on_submit(): #判断提交的表单是否通过验证
data = login_form.data
admin = Admin.query.filter_by(name=data['account']).first()
if not admin.check_pwd(data['pwd']): #检查密码是否正确
flash('密码错误') #消息的闪现
return redirect(url_for('admin.login')) #登录错误,跳转到但呢个了界面
session['admin'] = data['account'] #登录成功,加入到session中
return redirect(request.args.get('next') or url_for('admin.index')) #登录成功后的跳转
return render_template('admin/login.html', form=login_form) #把表单传给login.html页面
3-2、在html页面中使用form表单
<form method="post" id="form-data">
<div class="form-group has-feedback">
{{form.account}} #使用表单账号
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
{% for error in form.account.errors %}
<div class="col-md-12" >
<font style="color: red" >{{error}}</font>>
</div>
{% endfor %}
</div>
<div class="form-group has-feedback">
{{form.pwd}} #使用表单密码
{{form.csrf_token}} #使用csrf_token
{% for error in form.account.errors %} #获取表单错误信息
<div class="col-md-12" >
<font style="color: red" >{{error}}</font>>
</div>
{% endfor %}
{% for msg in get_flashed_messages() %} #闪现view中的flash错误信息
<p class="login-box-msg" style="color: red;">{{msg}}</p>
{% endfor %}
#http://docs.jinkan.org/docs/flask/ 通过该网址可以查看flask的使用方法