Кратко, после проверки валидации берешь username и password из формы, делаешь запрос по ним в базу и если такой пользователь с таким паролем существует, применяешь метод login_user() из Flask-login
# -*- coding: utf-8 -*-
from flask import request, render_template, flash, g, session, redirect, url_for
from flask.ext.login import login_user, logout_user, current_user, login_required
from app import db
from app.models import User
from app.forms import LoginForm
@app.route('/', methods=['GET', 'POST'])
def index():
form = LoginForm()
if form.validate_on_submit():
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username, password=password).first()
if user is None:
flash(u'Неверный логин или пароль', 'error')
return redirect("/")
login_user(user)
return redirect("/")
return render_template("main/main.html",
form = form)
@app.route('logout/')
def logout():
logout_user()
return redirect("/")
models.py
from app import db
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
username = db.Column(db.String(120), unique=True)
password = db.Column(db.String(120))
def __init__(self, name, username, password):
self.name = name
self.username = username
self.password = password
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return unicode(self.id)
def __repr__(self):
return self.name
template
{% with messages = get_flashed_messages() %}
{% if messages %}
<div class="flash">
{% for message in messages %}
{{ message }}
{% endfor %}
</div>
{% endif %}
{% endwith %}
<form method="POST" action="/login">
<div>{{ form.username.label }}: {{ form.username(class="css_class") }}</div>
{% if form.username.errors %}
<ul class="errors">{% for error in form.username.errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
<div>{{ form.password.label }}: {{ form.password() }}</div>
{% if form.password.errors %}
<ul class="errors">{% for error in form.password.errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
<input type="submit" value="Go">
</form>