diff options
-rw-r--r-- | app.py | 42 | ||||
-rw-r--r-- | default_settings.py | 1 | ||||
-rw-r--r-- | forms.py | 9 | ||||
-rw-r--r-- | requirements.txt | 1 | ||||
-rw-r--r-- | templates/index.html | 10 | ||||
-rw-r--r-- | templates/login.html | 0 | ||||
-rw-r--r-- | utils.py | 12 |
7 files changed, 66 insertions, 9 deletions
@@ -1,14 +1,28 @@ # -*- coding: utf-8 -*- +import os from flask import Flask, request -from utils import templated -from forms import RegisterForm +from flask_login import login_required, login_user, logout_user +from utils import templated, login_manager +from forms import RegisterForm, LoginForm + app = Flask(__name__) +app.config.from_object('default_settings') +if 'SPLINE_ACCOUNT_WEB_SETTINGS' in os.environ: + app.config.from_envvar('SPLINE_ACCOUNT_WEB_SETTINGS') +login_manager.setup_app(app) + -@app.route('/') +@app.route('/', methods=['GET', 'POST']) @templated('index.html') def index(): - return {} + form = LoginForm(request.form) + if request.method == 'POST' and form.validate(): + login_user(form.username.data) + return redirect(url_for('index')) + + return {'form': form} + @app.route('/register', methods=['GET', 'POST']) @templated('register.html') @@ -19,15 +33,31 @@ def register(): mail = form.mail.data password = form.password.data return '<h1>501 Not Implemented</h1>' + return {'form': form} -if __name__ == '__main__': - app.run(debug=True) +@app.route('/settings') +@templated('settings.html') +@login_required +def settings(): + return {} + + +@app.route('/logout') +@login_required +def logout(): + logout_user() + return redirect(url_for('index')) + +if __name__ == '__main__': + app.run(debug=True) + + # wir brauchen: # registrieren # login diff --git a/default_settings.py b/default_settings.py new file mode 100644 index 0000000..bcd641a --- /dev/null +++ b/default_settings.py @@ -0,0 +1 @@ +SECRET_KEY = 'remember to change this to something more random and private' @@ -1,9 +1,16 @@ # -*- coding: utf-8 -*- from wtforms import Form, validators, TextField, PasswordField +username = TextField('Benutzername', [validators.Length(min=4, max=20)]) + class RegisterForm(Form): - username = TextField('Benutzername', [validators.Length(min=4, max=20)]) + username = username mail = TextField('E-Mail-Adresse', [validators.Length(min=6, max=50)]) password = PasswordField('Passwort', [validators.Required(), validators.EqualTo('password_confirm', message=u'Passwörter stimmen nicht überein')]) password_confirm = PasswordField(u'Passwort bestätigen') + + +class LoginForm(Form): + username = username + password = PasswordField('Passwort', [validators.Required()]) diff --git a/requirements.txt b/requirements.txt index 327efd6..1e537a1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ Flask==0.6 python-ldap +Flask-Login diff --git a/templates/index.html b/templates/index.html index 9ee3b0f..74ffb6b 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,5 +1,11 @@ {%- extends 'base.html' %} +{%- from '_macros.html' import render_field %} {%- block content %} - <p>Willkommen bei <strong>spline accounts</strong>!</p> - <p><a href="/register">Account erstellen</a></p> +<p>Willkommen bei <strong>spline accounts</strong>!</p> +<p><a href="/register">Account erstellen</a></p> +<form action="" method="post"> + {{ render_field(form.username) }} + {{ render_field(form.password) }} + <input type="submit" value="Login" /> +</form> {%- endblock %} diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/templates/login.html @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from functools import wraps from flask import request, render_template +from flask_login import LoginManager, UserMixin # from http://flask.pocoo.org/docs/patterns/viewdecorators/#templating-decorator def templated(template=None): @@ -19,3 +20,14 @@ def templated(template=None): return render_template(template_name, **ctx) return decorated_function return decorator + +login_manager = LoginManager() +@login_manager.user_loader +def load_user(username): + raise NotImplemented() + + +class User(UserMixin): + def __init__(self, username): + self.username = username + |