Python. Знакомство с Flask-WTF

Для более простой обработки форм используется объектно-ориентированный подход расширения flask-wtf, которое предварительно  необходимо установить

pip install flask-wtf

Для корректной работы модуля необходимо задать защиту от поддельных межсайтовых запросов следующей командой:

app.config['SECRET_KEY'] = 'my_very_secret_key'

В папке templates создаем два файла login.html и success.html. Не забываем о существовании файла base.html

login.html

{% block content %}
<form method = "post"> <!--novalidate-->

<div>
    {{ form.csrf_token() }}
</div>

{% for field in form if field.name != 'csrf_token' %}
<div>
    {{ field.label() }}
    {{ field() }}
    {% for error in field.errors %}
    <div class="error">123 {{ error }}</div>
    {% endfor %}

</div>
{% endfor %}
</form>
{% endblock %}

success.html — будет открыываться при нажатии кнопки отправить и показывать, что ввел пользователь

{% extends "base.html" %}

{% block content %}
<meta charset="UTF-8">
<h1>Вы ввели следующие данные</h1>
{{name}}<br/> 
{{password}}<br/>
{{flag}}
{% endblock %}

server7.py

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField
from wtforms.validators import DataRequired
from flask import request, Flask, redirect, render_template

app = Flask(__name__)
app.config['SECRET_KEY'] = 'my_very_secret_key'


class LoginForm(FlaskForm):
    username = StringField('Логин', validators=[DataRequired()])
    password = PasswordField('Пароль', validators=[DataRequired()])
    remember_me = BooleanField('Запомнить меня')
    submit = SubmitField('Войти')

@app.route('/success')
def success():
    return render_template('success.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
    print(request.method)
    form = LoginForm()
    if form.validate_on_submit():
        name = form.username.data
        password = form.password.data
        remember_me = form.remember_me.data
        return render_template('success.html', name = name, \
                               password = password, flag = remember_me)
    return render_template('login.html', title='Авторизация', form=form)

if __name__ == '__main__':
    app.run(port=8080, host='127.0.0.1')
Поделиться:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • LiveJournal
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • StumbleUpon
  • Technorati
  • БобрДобр
  • Memori.ru
  • МоёМесто.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.