Es basiert auf dem Flask-Login Example. Zunächst das Beispiel von Bitbucket herunterladen.
Diesen Sourcecode im Verzeichnis /example unter einem beliebigen Namen abspeichern
Code: Alles auswählen
# -*- coding: utf-8 -*-
"""
Flask-Login example
===================
This is a small application that provides a trivial demonstration of
Flask-Login, including remember me functionality.
:copyright: (C) 2011 by Matthew Frazier.
:license: MIT/X11, see LICENSE for more details.
"""
from flask import Flask, request, render_template, redirect, url_for, flash
from flaskext.login import (LoginManager, current_user, login_required,
login_user, logout_user, UserMixin, AnonymousUser,
confirm_login, fresh_login_required)
from couchdb.mapping import TextField, BooleanField, Document
from flaskext.couchdb import *
class User(Document):
name = TextField()
active = BooleanField(default=True)
password = TextField()
def is_active(self):
return self.active
def is_anonymous(self):
return False
def is_authenticated(self):
return True
def get_id(self):
try:
return unicode(self.name)
except AttributeError:
raise NotImplementedError("No `id` attribute - override get_id")
class Anonymous(AnonymousUser):
name = u"Anonymous"
app = Flask(__name__)
app.config.from_object('config')
couch_manager = CouchDBManager()
couch_manager.setup(app)
login_manager = LoginManager()
login_manager.anonymous_user = Anonymous
login_manager.login_view = "login"
login_manager.login_message = u"Please log in to access this page."
login_manager.refresh_view = "reauth"
login_manager.setup_app(app)
@login_manager.user_loader
def load_user(id):
return User.load(id)
@app.route("/")
def index():
return render_template("index.html")
@app.route("/secret")
@fresh_login_required
def secret():
return render_template("secret.html")
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST" and "username" in request.form and "passwd" in request.form:
username = request.form["username"]
passwd = request.form["passwd"]
user = User.load(username)
if user and user.password == passwd:
remember = request.form.get("remember", "no") == "yes"
if login_user(user, remember=remember):
flash("Logged in!")
return redirect(request.args.get("next") or url_for("index"))
else:
flash("Sorry, but you could not log in.")
else:
flash(u"Invalid username or password.")
return render_template("login.html")
@app.route("/reauth", methods=["GET", "POST"])
@login_required
def reauth():
if request.method == "POST":
confirm_login()
flash(u"Reauthenticated.")
return redirect(request.args.get("next") or url_for("index"))
return render_template("reauth.html")
@app.route("/logout")
@login_required
def logout():
logout_user()
flash("Logged out.")
return redirect(url_for("index"))
if __name__ == "__main__":
app.run(host='0.0.0.0')
Code: Alles auswählen
COUCHDB_SERVER = "http://localhost:5984"
COUCHDB_DATABASE = "mydb"
SECRET_KEY = "yeah, not actually a secret"
DEBUG = True
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import couchdb
from couchdb.mapping import TextField, BooleanField, Document
from uuid import uuid4
class User(Document):
name = TextField()
active = BooleanField(default=True)
password = TextField()
type = TextField(default="User")
couch = couchdb.Server()
try:
db = couch.delete("mydb")
db = couch.create("mydb")
except:
db = couch.create("mydb")
u=User(name = u"Notch", password = u"ü")
u.id = u"Notch"
u.store(db)
u=User(name = u"Steve", password = u"b")
u.id = u"Steve"
u.store(db)
u=User(name = u"Creeper", active = False, password = u"c")
u.id = u"Creeper"
u.store(db)
Code: Alles auswählen
{% extends "layout.html" %}
{% block body %}
<h2>Login</h2>
<form action="" method=post>
<dl>
<dt>Username:
<dd><input type=text name=username>
<dt>Password:
<dd><input type=text name=passwd>
<dt>Remember Me:
<dd><input type=checkbox name=remember value=yes>
<dd><input type=submit value=Login>
</dl>
</form>
{% endblock %}