day10 美化表单
flask_wtf
flask_wtf不是flask_wtforms.它主要和flask_bootstrap一起美化表单.
- 安装pip install flask_wtforms / pip install flask_bootstrap
- forms.py
# ---coding:utf-8----
# 文件名: forms.py
# @Time:2020/4/28 22:06
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
class NameFrom(FlaskForm): # 用flask_wtf渲染和验证表单元素
name = StringField('用户名',validators=[DataRequired()])
submit = SubmitField("提交")
- app.py
from flask import Flask, request, render_template
from flask_bootstraps import Bootstrap
from forms import NameFrom
app = Flask(__name__)
app.config['SECRET_KEY'] = "ASDFSFadf" # 需要csrf防止跨域攻击
bootstrap = Bootstrap(app) # 将app与bootstrap绑定并实例化
@app.route('/')
def index():
form = NameFrom(request.form) # form是包含请求的被flask_wtf渲染验证的表单元素
name = form.name.data # 表单实例中为name的数据
if form.validate():
print(name)
return render_template('index.html',form=form) #返回响应给模板
- index.html
{% extends 'bootstrap/base.html' %} #继承bootstrap base.html
{% import 'bootstrap/wtf.html' as wtf %} # 导入bootstrap wtf宏
{% block title %}
首页
{% endblock %}
{% block content %}
<h1>{{name}}</h1>
<div class="container">
{{ wtf.quick_form(form) }} # 生成表单元素
</div>
{% endblock %}
使用flask的flash发布警告提示信息
- forms.py同上
- app.py增加flash的信息
- index.html遍历flash信息并显示在页面上
app.py:
from flask import Flask, request, render_template, flash
from flask_bootstraps import Bootstrap
from forms import NameFrom
app = Flask(__name__)
app.config['SECRET_KEY'] = "asdfadfsfs"
bootstrap = Bootstrap(app)
@app.route('/',methods=['GET','POST'])
def index():
form = NameFrom()
name = form.name.data
if form.validate():
if name and name != "Jelly":
flash("你不是Jelly") #第一条提示信息
flash("你是那谁") # 第二条提示信息
return render_template('index.html',form=form,name=name)
if __name__ == '__main__':
app.run(debug=True)
{% extends 'bootstrap/base.html' %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block title %}
首页
{% endblock %}
{% block content %}
<h1>{{ name }}</h1>
{% for message in get_flashed_messages() %} #遍历app.py中的提示信息
<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> #bootstarp警告框样式
<div>{{ message }}</div> #分别显示遍历的两条信息
</div>
{% endfor %}
<div class="container">
{{ wtf.quick_form(form) }}
</div>
{% endblock %}
cookie
1.app.py 设置cookie resp.set_cookie
from datetime import datetime
from flask import Flask, Response
app = Flask(__name__)
app.config['SERVER_NAME'] = 'lai.com:5000'
@app.route('/')
def hello_world():
resp = Response("QFjy")
expires = datetime(year=2020,month=10,day=20,hour=21,minute=23,second=10)
resp.set_cookie('nickname','宋江',expires=expires,max_age=120,domain=".lai.com") #设置cookie
return 'set cookie'
@app.route('/del')
def delete_cookie():
resp = Response("delete cookie")
resp.delete_cookie('nickname') #删除cookie
return resp
if __name__ == '__main__':
app.run()
访问:http://lai.com:5000/ ;http://lai.com:5000/del
session
保存在服务器,使用session.get('name"),session.clear()
Flask
中的session
是通过from flask import session
。然后添加值key和value进去即可。并且,Flask
中的session
机制是将session
信息加密,然后存储在cookie
中。专业术语叫做client side session
。
from flask import Flask,render_template,flash,session
from forms import NameFrom
from flask_bootstrap import Bootstrap
app = Flask(__name__)
app.config['SECRET_KEY'] = 'asdf123321'
bootstrap = Bootstrap(app)
@app.route('/',methods=['GET','POST'])
def index():
form = NameFrom()
if form.validate():
# if form.validate_on_submit():
lastname = session.get('name') #查出上一次输入的内容
if lastname and lastname != form.name.data:
flash("大哥,名字换的挺快啊")
flash("你笑我凉的快,我笑你玩的少")
session['name'] = form.name.data
name = session.get('name')
return render_template('index.html',form=form,name=name)
@app.route('/del/')
def del_session():
print(session.get('name'))
session.clear() #删除session
print(session.get('name'))
return '删除成功'
if __name__ == '__main__':
app.run(debug=True,port=5055)