Here is an example which uses flask-tryton
and web_user
for authentication:
Click to show the example
from flask import Flask
from flask_tryton import Tryton
from flask.ext.babel import Babel
app = Flask(__name__)
babel = Babel(app)
app.config['TRYTON_DATABASE'] = os.environ.get('DB_NAME', 'tryton')
tryton = Tryton(app, configure_jinja=True)
WebUser = tryton.pool.get('web.user')
Session = tryton.pool.get('web.user.session')
def login_required(func):
@wraps(func)
def wrapper(*args, **kwargs):
session_key = None
if 'session_key' in session:
session_key = session['session_key']
user = Session.get_user(session_key)
if not user:
return redirect(url_for('login', next=request.path))
return func(*args, **kwargs)
return wrapper
class LoginForm(FlaskForm):
email = StringField('Correo Electrónico',
validators=[DataRequired()],
render_kw={'placeholder': 'Correo Electrónico'})
password = PasswordField('Contraseña',
validators=[DataRequired()],
render_kw={'placeholder': 'Contraseña'})
@app.route('/login', methods=['GET', 'POST'])
@tryton.transaction()
def login():
form = LoginForm()
if request.method == 'POST' and form.validate_on_submit():
user = WebUser.authenticate(form.email.data, form.password.data)
if user:
session['session_key'] = WebUser.new_session(user)
flash('Ahora estas identificado.', 'success')
return redirect(request.form.get('next', url_for('index')))
flash('Email o contraseña incorrectos.', 'error')
return render_template(
'login.html',
form=form,
next=request.args.get('next'))
@app.route('/logout')
@tryton.transaction(readonly=False)
@login_required
def logout():
if session['session_key']:
Session.delete(Session.search(
('key', '=', session['session_key']),
))
session.pop('session_key', None)
flash("Se ha desconectado tu sessión", 'success')
return redirect(url_for('index'))
@app.route('/')
@tryton.transaction()
def index():
return render_template('index.html')
@app.route('/my-account')
@tryton.transaction()
@login_required
def account():
return render_template('account.html')