python----flask----wtforms创建表单

文件目录:

 

run.py

from app import app

第一个app是文件夹app,第二个app是__init__文件

 

_init_.py

from flask import Flask
app=Flask(__name__)
app.config.from_object('config')
from app import view
app.run(debug=True)

我们引入了Flask,并且在导入view.py之前先引入了config.py,并且绑定在了app.config上

 

view.py

from flask import render_template, flash, redirect
from app import app
from .forms import LoginForm#导入form.py
# index view function suppressed for brevity
@app.route('/login', methods = ['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():#一句话就可以完成所有的表单验证,比如有没有填写对信息
        flash('Login requested for OpenID="' + str(form.openid.data) + '", remember_me=' + str(form.remember_me.data))
        return redirect('/index')
    return render_template('login.html',
        title = 'Sign In',
        form = form,
        providers=app.config['OPENID_PROVIDERS'])#providers=app.config['OPENID_PROVIDERS']

因为一开始的表单的openid一直是空着的,所以form.valdita_on_submit会返回false,所以会render_template('login.html')

 

forms.py

from flask_wtf import FlaskForm
from wtforms import StringField,BooleanField
from wtforms.validators import DataRequired,EqualTo
class LoginForm(FlaskForm):
    openid=StringField('openid',validators=[DataRequired()])#Datarequired()确保字段中有数据
    remember_me=BooleanField('remember_me',default=True)

LoginForm类就是来创建表单的,StringField是创建文本输入,BooleanField是创建勾选框

 

config.py

CSRF_ENABLED = True
SECRET_KEY = 'you-will-never-guess'
OPENID_PROVIDERS = [
    { 'name': 'Google', 'url': 'https://www.google.com/accounts/o8/id' },
    { 'name': 'Yahoo', 'url': 'https://me.yahoo.com' },
    { 'name': 'AOL', 'url': 'http://openid.aol.com/<username>' },
    { 'name': 'Flickr', 'url': 'http://www.flickr.com/<username>' },
    { 'name': 'MyOpenID', 'url': 'https://www.myopenid.com' }]

config.py就是一些配置参数

 

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    {% if title %}
    <title>{{title}} - microblog</title>
    {% else %}
    <title>microblog</title>
    {% endif %}
</head>
<body>
    <div>Microblog: <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>

模板html,主要是用来在网页中显示报错信息,注意get_flashed_message()函数是用来接收错误信息的

 

login.html

<!-- extend from base layout -->
{% extends "base.html" %}

{% block content %}
<script type="text/javascript">
function set_openid(openid,pr){
    u=openid.search('<username>')
    if(u!=-1){
        user=prompt('Enter your '+pr+'username:')
        openid=openid.substr(0,u)+user
    }
    form=document.forms['login'];//获取<form name="login">
    form.elements['openid'].value=openid
}
</script>
<h1>Sign In</h1>
<form action="" method="post" name="login">
    {{form.csrf_token()}}
    {{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>
        |{% for pr in providers %}
          <a href="javascript:set_openid('{{ pr.url }}', '{{ pr.name }}');">{{ pr.name }}</a> |
        {% endfor %}
    </p>
    <p>{{form.remember_me}} Remember Me</p>
    <p><input type="submit" value="Sign In"></p>
</form>
{% endblock %}

{{forms.openid(size=80)}}规定了输入框的数字大小

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值