flask笔记:4:web表单

处理web表单表单需要Flask-WTF
在根目录创建一个配置文件
myblog/config.py
CSRF_ENABLED=True
SECRET_KEY='you-will-never-guess'


CSRF_ENABLED配置是为了激活跨站点请求伪造保护
SECRET_KEY是当CSRF激活后,建立一个加密令牌,用于验证表单

修改app/__init__.py
from flask import Flask
app=Flask(__name__)
app.config.from_object('config')
from app import views
#读取配置文件



编写第一个表单
app/forms.py
from flask.ext.wtf import Form
from wtforms import StringField,BooleanField
from wtforms.validators import DataRequired
class 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 %}

Sigh In

{{form.hidden_tag()}}

Please enter your OpenID:
{{form.openid(size=80)}}

{{form.remember_me}} Remember Me

{% endblock %}

{{form.hidden_tag()}} 用来实现在配置中的CSRF保护,如果已经激活CSRF,这个字段要出现在所有表单中
{{form.openid(size=80)}} form表单的openid字段,输入框大小80

表单视图
修改 app/views.py
from flask import render_template
from app import app
from .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,redirect
from app import app
from .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

    
        {% if title %}
        {{title}} - myblog
        {% else %}
        Welcome - myblog
        {% endif %}
    
    
        
MyBlog:Home

{% with messages = get_flashed_messages() %} {% if messages %}
    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %} {% endwith %} {% block content %} {% endblock%}


修改 app/templates/login.html
{% extends "base.html" %}
{% block content %}

Sigh In

{{form.hidden_tag()}}

Please enter your OpenID:
{{form.openid(size=80)}}
{% for error in form.openid.errors %} [{{ error }}] {% endfor %}

{{form.remember_me}} Remember Me

{% endblock %}


显示:
不输入直接提交会显示错误,这个是程序自带的错误提示,就是form.openid.errors
在输入框输入bob,选中remember_me
flask笔记:4:web表单_第1张图片

在index页面显示出提交的内容
flask笔记:4:web表单_第2张图片

你可能感兴趣的:(flask教程笔记)