From ca5e2f13aa205f71f9cb95fc0f05b2df8b03fc5b Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Mon, 25 Jan 2016 01:50:44 +0100 Subject: Create new login blueprint The login and logout view are now in the login blueprint. --- accounts/__init__.py | 5 +++-- accounts/forms.py | 5 ----- accounts/templates/base.html | 4 ++-- accounts/templates/login.html | 21 -------------------- accounts/templates/login/login.html | 29 ++++++++++++++++++++++++++++ accounts/views/default/__init__.py | 36 ++++------------------------------- accounts/views/login/__init__.py | 38 +++++++++++++++++++++++++++++++++++++ accounts/views/login/forms.py | 8 ++++++++ 8 files changed, 84 insertions(+), 62 deletions(-) delete mode 100644 accounts/templates/login.html create mode 100644 accounts/templates/login/login.html create mode 100644 accounts/views/login/__init__.py create mode 100644 accounts/views/login/forms.py diff --git a/accounts/__init__.py b/accounts/__init__.py index 7d3105b..e6927b0 100644 --- a/accounts/__init__.py +++ b/accounts/__init__.py @@ -6,11 +6,12 @@ import account from utils import * from utils.sessions import EncryptedSessionInterface from utils.login import parse_userid -from views import default, admin +from views import default, login, admin app = Flask(__name__) app.register_blueprint(default.bp) +app.register_blueprint(login.bp) app.register_blueprint(admin.bp, url_prefix='/admin') app.config.from_object('accounts.default_settings') app.config.from_envvar('SPLINE_ACCOUNT_WEB_SETTINGS', silent=True) @@ -27,7 +28,7 @@ if app.config.get('USERNAME_BLACKLIST_FILE'): login_manager = LoginManager() login_manager.init_app(app) -login_manager.login_view = 'default.login' +login_manager.login_view = 'login.login' @login_manager.user_loader def load_user(user_id): diff --git a/accounts/forms.py b/accounts/forms.py index bcbe747..bdef0ed 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -65,11 +65,6 @@ class RegisterCompleteForm(Form): # n.b. this form is also used in lost_password_complete -class LoginForm(Form): - username = TextField(u'Benutzername') - password = PasswordField('Passwort', [validators.Required()]) - - class LostPasswordForm(Form): username_or_mail = TextField(u'Benutzername oder E-Mail') diff --git a/accounts/templates/base.html b/accounts/templates/base.html index 084e747..dbb3d0b 100644 --- a/accounts/templates/base.html +++ b/accounts/templates/base.html @@ -38,10 +38,10 @@ {%- if current_user.uid in config.get('ADMIN_USERS', []) %}
  • Admin
  • {%- endif %} -
  • Abmelden
  • +
  • Abmelden
  • {%- else %}
  • Nicht angemeldet
  • -
  • Login
  • +
  • Login
  • {%- endif %} diff --git a/accounts/templates/login.html b/accounts/templates/login.html deleted file mode 100644 index 34fb6d0..0000000 --- a/accounts/templates/login.html +++ /dev/null @@ -1,21 +0,0 @@ -{%- extends 'base.html' %} -{%- from '_macros.html' import render_field, render_submit %} -{%- block content %} -

    Login

    -

    - Willkommen bei spline accounts. - Melde dich an, - informier dich, oder - leg einen Account an. -

    - -
    - {% for field in form %} - {{ render_field(field) }} - {% endfor %} - {{ render_submit(value='Login') }} -

    Account erstellen -

    Passwort oder Benutzername vergessen -

    - -{%- endblock %} diff --git a/accounts/templates/login/login.html b/accounts/templates/login/login.html new file mode 100644 index 0000000..dadcb1b --- /dev/null +++ b/accounts/templates/login/login.html @@ -0,0 +1,29 @@ +{%- extends 'base.html' %} +{%- from '_macros.html' import render_field, render_submit %} +{%- block content %} +

    Login

    +

    + Willkommen bei spline accounts. + Melde dich an, + informier dich, oder + leg einen Account an. +

    + +
    + {% for field in form %} + {{ render_field(field) }} + {% endfor %} + {{ render_submit(value='Login') }} +

    + + Account erstellen + +

    +

    + + Passwort oder Benutzername vergessen + +

    +
    + +{%- endblock %} diff --git a/accounts/views/default/__init__.py b/accounts/views/default/__init__.py index 88105bd..edcac21 100644 --- a/accounts/views/default/__init__.py +++ b/accounts/views/default/__init__.py @@ -6,7 +6,7 @@ from flask import Blueprint from flask import current_app, redirect, request, g, flash, url_for from flask.ext.login import login_required, login_user, logout_user, current_user -from accounts.forms import LoginForm, RegisterForm, RegisterCompleteForm, \ +from accounts.forms import RegisterForm, RegisterCompleteForm, \ LostPasswordForm, SettingsForm from accounts.utils import * from accounts.utils.confirmation import Confirmation @@ -17,27 +17,6 @@ from accounts.models import Account bp = Blueprint('default', __name__) -@bp.route('/login', methods=['GET', 'POST']) -@templated('login.html') -def login(): - if current_user.is_authenticated: - return redirect(url_for('.index')) - - form = LoginForm(request.form) - if form.validate_on_submit(): - try: - user = current_app.user_backend.auth(form.username.data, - form.password.data) - login_user(user) - flash(u'Erfolgreich eingeloggt', 'success') - return redirect(url_for('.index')) - except (current_app.user_backend.NoSuchUserError, - current_app.user_backend.InvalidPasswordError): - flash(u'Ungültiger Benutzername und/oder Passwort', 'error') - - return {'form': form} - - @bp.route('/register', methods=['GET', 'POST']) @templated('register.html') @logout_required @@ -50,7 +29,7 @@ def register(): u'um diese zu überprüfen. Bitte folge den Anweisungen in der ' u'E-Mail.', 'success') - return redirect(url_for('.login')) + return redirect(url_for('.index')) return {'form': form} @@ -69,7 +48,7 @@ def register_complete(token): pass else: flash(u'Du hast den Benutzer bereits angelegt! Du kannst dich jetzt einfach einloggen:') - return redirect(url_for('.login')) + return redirect(url_for('.index')) form = RegisterCompleteForm(request.form) if form.validate_on_submit(): @@ -120,7 +99,7 @@ def lost_password(): flash(u'Wir haben dir eine E-Mail mit einem Link zum Passwort ändern ' u'geschickt. Bitte folge den Anweisungen in der E-Mail.', 'success') - return redirect(url_for('.login')) + return redirect(url_for('.index')) return {'form': form} @@ -229,13 +208,6 @@ def change_mail(token): return redirect(url_for('.index')) -@bp.route('/logout') -def logout(): - logout_user() - flash(u'Erfolgreich ausgeloggt.', 'success') - return redirect(url_for('.login')) - - @bp.route('/about') @templated('about.html') def about(): diff --git a/accounts/views/login/__init__.py b/accounts/views/login/__init__.py new file mode 100644 index 0000000..4546b14 --- /dev/null +++ b/accounts/views/login/__init__.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import + +from flask import Blueprint +from flask import current_app, redirect, request, g, flash, render_template, url_for +from flask.ext.login import login_user, logout_user, current_user + +from .forms import LoginForm + + +bp = Blueprint('login', __name__) + + +@bp.route('/login', methods=['GET', 'POST']) +def login(): + if current_user.is_authenticated: + return redirect(url_for('default.index')) + + form = LoginForm(request.form) + if form.validate_on_submit(): + try: + user = current_app.user_backend.auth(form.username.data, + form.password.data) + login_user(user) + flash(u'Erfolgreich eingeloggt', 'success') + return redirect(url_for('default.index')) + except (current_app.user_backend.NoSuchUserError, + current_app.user_backend.InvalidPasswordError): + flash(u'Ungültiger Benutzername und/oder Passwort', 'error') + + return render_template("login/login.html", form=form) + + +@bp.route('/logout') +def logout(): + logout_user() + flash(u'Erfolgreich ausgeloggt.', 'success') + return redirect(url_for('.login')) diff --git a/accounts/views/login/forms.py b/accounts/views/login/forms.py new file mode 100644 index 0000000..a82fa39 --- /dev/null +++ b/accounts/views/login/forms.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +from flask.ext.wtf import Form +from wtforms import TextField, PasswordField, validators + + +class LoginForm(Form): + username = TextField(u'Benutzername') + password = PasswordField('Passwort', [validators.Required()]) -- cgit v1.2.3-1-g7c22