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)

 

posted @ 2022-04-27 00:32  翻滚的小强  阅读(22)  评论(0编辑  收藏  举报