1)使用flask处理表单
传统的前端通用表单,需要前后端共同完成操作,前端需要使用form标签来定义表单,而后端则需要使用request.form来获取post请求中的表单数据:
# 判断请求方式
if request.method == 'POST':
# 获取表单中name为username的文本域提交的数据
name = request.form.get('username')
# 获取表单中name为password的文本域提交的数据
password=request.form.get('password')
return name+" "+password
上述的方法既没有为表单提供保护措施,也不利于前后端分离的改进需求,固我们引入第三方扩展包:flask-wtf与wtforms,来实现由后端单独完成的表单操作:
wtforms安装:pip install wtforms
flask-wtf安装:pip install Flask-WTF或pip install flask-wtf
wtforms依照功能类别来说wtforms分别由以下几个类别:
Forms: 主要用于表单验证、字段定义、HTML生成,并把各种验证流程聚集在一起进行验证。
Fields: 包含各种类型的字段,主要负责渲染(生成HTML文本域)和数据转换。
Validator:主要用于验证用户输入的数据的合法性。比如Length验证器可以用于验证输入数据的长度。
Widgets:html插件,允许使用者在字段中通过该字典自定义html小部件。
Meta:用于使用者自定义wtforms功能(配置),例如csrf功能开启。
Extensions:丰富的扩展库,可以与其他框架结合使用,例如django。
Flask-WTF其实是对wtforms的简单集成,也能通过添加动态token令牌的方式,为所有Form表单提供免受CSRF(Cross-site request forgery——跨站请求伪造)攻击的技术支持
2)flash闪现的使用
导入:from flask import flash;
后端的使用:flash("message"),message为消息内容;
前端通过遍历get_flashed_messages()获取flash消息内容
- 示例代码(部分):
# --------------视图函数------------------
@app.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template("flash.html")
else:
username = request.form.get('username')
password = request.form.get('password')
# user = User.query.filter(User.username == username, User.password == password).first()
user = User.query.filter(User.username == username).first()
if user and user.check_password(password):
session['user_id'] = user.id
session['user_name'] = user.username
session.permanent = True
return redirect(url_for("index"))
else:
flash('用户名或密码不正确,请检查!')
return render_template('flash.html')
# ---------------前端使用-----------------
<div class="warning">
{% for message in get_flashed_messages() %}
<div class="alert alert-warning alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<strong>Warning!</strong> {{ message }}
</div>
{% endfor %}
</div>
标签:username,Flask,交互,flash,request,表单,user,password,数据 From: https://www.cnblogs.com/believeadream/p/18151322