flask笔记:4:web表单
来源:互联网 发布:淘宝上人参能买吗 编辑:程序博客网 时间:2024/05/08 05:27
处理web表单表单需要Flask-WTF
在根目录创建一个配置文件
myblog/config.py
CSRF_ENABLED=TrueSECRET_KEY='you-will-never-guess'
CSRF_ENABLED配置是为了激活跨站点请求伪造保护
SECRET_KEY是当CSRF激活后,建立一个加密令牌,用于验证表单
修改app/__init__.py
from flask import Flaskapp=Flask(__name__)app.config.from_object('config')from app import views#读取配置文件
编写第一个表单
app/forms.py
from flask.ext.wtf import Formfrom wtforms import StringField,BooleanFieldfrom wtforms.validators import DataRequiredclass LoginForm(Form): openid = StringField('openid',validators=[DataRequired()]) remember_me = BooleanField('remember_me',default=False)
导入所需的模块
创建一个Form类
定义一个openid文本框(StringField),名字是openid,需要验证是否为空validators=[DataRequired()]
定义一个remember_me选择框(BooleanField ),名字remember_me,默认是False
创建表单模板
app/templates/login.html
{% extends "base.html" %}{% block content %}<h1>Sigh In</h1><form method="post" action="" name="login"> {{form.hidden_tag()}} <p> Please enter your OpenID:<br> {{form.openid(size=80)}}<br> </p> <p>{{form.remember_me}} Remember Me</p> <p><input type="submit" value="Sign In"></p></form>{% endblock %}
{{form.hidden_tag()}} 用来实现在配置中的CSRF保护,如果已经激活CSRF,这个字段要出现在所有表单中
{{form.openid(size=80)}} form表单的openid字段,输入框大小80
表单视图
修改 app/views.py
from flask import render_templatefrom app import appfrom .forms import LoginForm@app.route('/')@app.route('/index')def index (): user={'nickname':'Bob'} posts=[ {'author':{'nickname':'John'}, 'body':'Beautiful day in Portland!'}, {'author':{'nickname':'Susan'}, 'body':'The Avengers movie was so cool!'} ] return render_template("index.html", title="Home", user=user, posts=posts)@app.route('/login',methods=['GET','POST'])def login (): form = LoginForm() return render_template("login.html", title = "Sign In", form = form)#导入LoginForm,视图接受GET和POST请求#实例化一个LoginForm
接收表单数据
修改 app/views.py
from flask import render_template,flash,redirectfrom app import appfrom .forms import LoginForm@app.route('/')@app.route('/index')def index (): user={'nickname':'Bob'} posts=[ {'author':{'nickname':'John'}, 'body':'Beautiful day in Portland!'}, {'author':{'nickname':'Susan'}, 'body':'The Avengers movie was so cool!'} ] return render_template("index.html", title="Home", user=user, posts=posts)@app.route('/login',methods=['GET','POST'])def login (): form = LoginForm() if form.validate_on_submit(): flash('login requested for OpenID="'+form.openid.data+'",remember_me='+str(form.remember_me.data)) return redirect('/index') return render_template("login.html", title = "Sign In", form = form)#form.validate_on_submit()判断是否提交#提交后用flash( )传递数据#redirect( )是url跳转
修改 app/templates/base.html
<html> <head> {% if title %} <title>{{title}} - myblog</title> {% else %} <title>Welcome - myblog</title> {% endif %} </head> <body> <div>MyBlog:<a href="/index">Home</a></div> <hr> {% with messages = get_flashed_messages() %} {% if messages %} <ul> {% for message in messages %} <li>{{ message }}</li> {% endfor %} </ul> {% endif %} {% endwith %} {% block content %} {% endblock%} </body></html>
修改 app/templates/login.html
{% extends "base.html" %}{% block content %}<h1>Sigh In</h1><form method="post" action="" name="login"> {{form.hidden_tag()}} <p> Please enter your OpenID:<br> {{form.openid(size=80)}}<br> {% for error in form.openid.errors %} <span style="color:red;">[{{ error }}]</span> {% endfor %}<br> </p> <p>{{form.remember_me}} Remember Me</p> <p><input type="submit" value="Sign In"></p></form>{% endblock %}
显示:
不输入直接提交会显示错误,这个是程序自带的错误提示,就是form.openid.errors
在输入框输入bob,选中remember_me
在index页面显示出提交的内容
0 0
- flask笔记:4:web表单
- Flask(4)-Web表单
- flask学习笔记(-Web 表单)
- Flask web表单
- Flask-Web 表单
- Flask Web开发 表单
- Flask: Web表单
- 《Flask Web开发》读书笔记(4)第4章Web表单(关键词:Web开发/Flask/表单/Web表单)
- Flask Web 开发 web表单
- Flask web 开发--web表单
- Web表单(Flask-WTF)
- flask中web表单应用
- Flask之Web表单使用
- flask——web表单
- Flask Web 开发 Web表单_2
- [python3.6 flask web学习]Flask表单构建
- Flask 教程,第三部分:Web 表单
- flask入门的教程-表单 Web Forms
- tr命令
- 通过boundingRectWithSize:options:attributes:context:计算文本尺寸
- mongodb C++ driver CMakeList配置
- 关于thrift字段修改的问题
- 关于ViewPager和Fragment的使用初级。适合初学者
- flask笔记:4:web表单
- 老罗的Android之旅--网址
- 一致性 hash 算法( consistent hashing )
- HTML <figure> 标签
- 第11周阅读程序(5-1)
- 函数调用进程——栈桢
- java中BeanWriter类
- LintCode: 将二叉树拆成链表
- java中如何自定义线程