diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2016-01-25 01:50:44 +0100 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2016-02-02 04:22:17 +0100 |
commit | ca5e2f13aa205f71f9cb95fc0f05b2df8b03fc5b (patch) | |
tree | a5bbdfce5a2d7bdccc4439e81f72833dc6523b1f | |
parent | 0f5553f09a8297738430e4cbc50e3bff48895ad6 (diff) | |
download | web-ca5e2f13aa205f71f9cb95fc0f05b2df8b03fc5b.tar.gz web-ca5e2f13aa205f71f9cb95fc0f05b2df8b03fc5b.tar.bz2 web-ca5e2f13aa205f71f9cb95fc0f05b2df8b03fc5b.zip |
Create new login blueprint
The login and logout view are now in the login blueprint.
-rw-r--r-- | accounts/__init__.py | 5 | ||||
-rw-r--r-- | accounts/forms.py | 5 | ||||
-rw-r--r-- | accounts/templates/base.html | 4 | ||||
-rw-r--r-- | accounts/templates/login/login.html (renamed from accounts/templates/login.html) | 16 | ||||
-rw-r--r-- | accounts/views/default/__init__.py | 36 | ||||
-rw-r--r-- | accounts/views/login/__init__.py | 38 | ||||
-rw-r--r-- | accounts/views/login/forms.py | 8 |
7 files changed, 67 insertions, 45 deletions
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', []) %} <li><a href="{{ url_for('admin.index') }}">Admin</a></li> {%- endif %} - <li><a href="{{ url_for('default.logout') }}">Abmelden</a></li> + <li><a href="{{ url_for('login.logout') }}">Abmelden</a></li> {%- else %} <li>Nicht angemeldet</li> - <li><a href="{{ url_for('default.login') }}">Login</a></li> + <li><a href="{{ url_for('login.login') }}">Login</a></li> {%- endif %} </ul> </nav> diff --git a/accounts/templates/login.html b/accounts/templates/login/login.html index 34fb6d0..dadcb1b 100644 --- a/accounts/templates/login.html +++ b/accounts/templates/login/login.html @@ -5,8 +5,8 @@ <p> Willkommen bei <strong>spline accounts</strong>. Melde dich an, - <a href="{{ url_for('.about') }}">informier dich</a>, oder - <a href="{{ url_for('.register') }}">leg einen Account an</a>. + <a href="{{ url_for('default.about') }}">informier dich</a>, oder + <a href="{{ url_for('default.register') }}">leg einen Account an</a>. </p> <form action="{{ url_for('.login') }}" method="post" class="form-horizontal"> @@ -14,8 +14,16 @@ {{ render_field(field) }} {% endfor %} {{ render_submit(value='Login') }} - <p class="form-actions"><a href="{{ url_for('.register') }}">Account erstellen</a></div> - <p class="form-actions"><a href="{{ url_for('.lost_password') }}">Passwort oder Benutzername vergessen</a></div> + <p class="form-actions"> + <a href="{{ url_for('default.register') }}"> + Account erstellen + </a> + </p> + <p class="form-actions"> + <a href="{{ url_for('default.lost_password') }}"> + Passwort oder Benutzername vergessen + </a> + </p> </form> {%- 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()]) |