flask_九、传入表单相关
一、传入表单
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)