一、传入表单
1.1主文件下app.py文件内容
# 传入表单类实例
# encoding=utf-8
from flask import Flask,render_template,flash
import os
from form import LoginForm
from flask import request
app = Flask(__name__)
app.secret_key = os.getenv('SECRET_KEY', 'secret string')
# app.config['WTF_CSRF_ENABLED'] = False
@app.route('/form',methods=['GET','POST'])
def basic():
form=LoginForm()
return render_template('htmlform.html',form=form)
@app.route('/bootstrap',methods=['GET','POST'])
def bootstrap():
print("request: %s" % request)
print("request.url: %s" % request.url)
print("request.form: %s" % request.form)
print("request.data: %s" % request.data)
print("request.headers: %s" % request.headers)
form = LoginForm()
return render_template('bootstrap.html',form=form)
if __name__ == "__main__":
app.run(debug=True)
1.2主文件下form.py内容
# encoding=utf-8
from flask_wtf import FlaskForm
from wtforms import Form, StringField, PasswordField, BooleanField, SubmitField
from wtforms.validators import DataRequired, Length,input_required,ValidationError
from wtforms import IntegerField,SubmitField
class FortyTwoForm(FlaskForm):
answer = IntegerField('The Answer')
submit = SubmitField()
def Validate_answer(form,field):
if field.data != 42:
raise ValidationError('Must be 42.')
class LoginForm(FlaskForm):
def __init__(self):
super(LoginForm,self).__init__()
print("实例化表单")
# username = StringField("Username", validators=[DataRequired()from])
username = StringField("validate_Username", render_kw={'placeholder':'Your Username'})
password = PasswordField("Password", validators=[DataRequired(),Length(8,128)])
remember = BooleanField("Remember me")
submit = SubmitField("Log in")
1.3template下的bootstrap.html
{{% extends 'baseForm.html'%}
{% block content %}
<form method='{{ url_for('basic') }}' method='post'>
{{ form.csrf_token }}
{{ form.username.label}}<br>
{{ form.username(required='')}}<br>
{% for message in form.username.errors %}
<small class="error">{{ message }}</small><br>
{% endfor %}
{{ form.password.label }}<br>
{{ form.password }}<br>
{% for message in form.password.errors %}
<small class="error">{{ message }}</small><br>
{% endfor %}
{{ form.remember }}{{ form.remember.label }}<br>
{{ form.submit }}<br>
</form>
{% endblock %}
1.4Template下的baseForm.html——有问题,不全
<!DOCTYPE html>
<html lang="en">
<head>
{% block head %}
{% block metas %}
<meta charset="utf-8">
{% endblock metas%}
<title>
{% block title %}
Form = HelloFlask
{% endblock title %}
</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='favi')}}"
{% block style %}
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename ='s')}}"
{% endblock styles %}
{% endblock head %}
</head>
<body>
<nav>
{% block nav %}
<u1>
<li><a href="{{ url_for('basic') }}">Home </a></li>
</u1>
{% endblock %}
</nav>
<main>
{% for message in get_flashed_messages() %}
<div class="alert">
{{ message }}
</div>
{% endfor %}
{% block content %}{% endblock %}
</main>
<footer>
{% block footer %}
{% endblock %}
</footer>
{% block scripts %}{% endblock %}
</body>
</html>
1.5Static下的style.css文件
body{
margin:auto;
width:750px;
}
img{
max-width:710px;
}
nav u1{
list-style-type:none;
margin:();
padding:();
overflow:hidden;
background-color:#333;
nav li{
float:left;
}
nav li.a{
display:block;
color:white;
text-align:center;
padding:14px 16px;
text-decoration:none;
}
1.6最终实现的效果
![]()
二、示例二
2.1app.py更新
# 传入表单类实例
# encoding=utf-8
from flask import Flask, render_template, flash, session, redirect, url_for
import os
from form import LoginForm
from flask import request
from form import FortyTwoForm
app = Flask(__name__)
app.secret_key = os.getenv('SECRET_KEY', 'secret string')
# app.config['WTF_CSRF_ENABLED'] = False
@app.route('/testmacro', methods=['GET', 'POST'])
def testmacro():
form = FortyTwoForm()
if form.validate_on_submit():
return redirect(url_for('hello'))
return render_template('htmlform.html', form=form)
@app.route('/form', methods=['GET', 'POST'])
def basic():
form = LoginForm()
print("request: %s" % request)
print("request.url: %s" % request.url)
print("request.form: %s" % request.form)
print("request.data: %s" % request.data)
print("request.headers: %s" % request.headers)
print("session before login: %s" % session)
print("form.username.data: %s" % form.username.data)
if request.method == 'POST' and form .validate():
print("form:%s" % form)
print("form.data:%s" % form.data)
print("request.form is valided")
print("session after login:%s" % form.session)
print("request.cookie.get('session'):%s" % request.cookie.get('session'))
if 'csrf_token' in session:
print("'csrf_token' in session:")
print("session.items(): %s" % session.items())
print("dict(session)['csrf_token']: %s" % dict(session)['csrf_token'])
return "<p>Hello,welcome</p>"
else:
print("request.form is not valided")
print(form.errors)
print(form.errors)
return render_template('bootstrap.html', form=form)
@app.route('/bootstrap', methods=['GET', 'POST'])
def bootstrap():
print("request: %s" % request)
print("request.url: %s" % request.url)
print("request.form: %s" % request.form)
print("request.data: %s" % request.data)
print("request.headers: %s" % request.headers)
form = LoginForm()
print("session before login:%s" % session)
print("form.username.data: %s" % form.username.data)
if request.method == "POST" and form.validate():
print("form:%s" % form)
print("form.data:%s" % form.data)
print("request.form is valided")
print("session after login:%s" % form.session)
print("request.cookie.get('session'):%s" % request.cookie.get('session'))
if 'csrf_token' in session:
print('"csrf_token" in session:')
print("session.items(): %s" % session.items())
print("dict(session)['csrf_token']: %s" % dict(session)['csrf_token'])
else:
print("request.form is not valided")
print(form.errors)
print(form.errors)
return render_template('bootstrap.html', form=form)
if __name__ == "__main__":
app.run(debug=True)