Advertisement
Guest User

Flask Principal Login

a guest
Aug 16th, 2011
1,400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.88 KB | None | 0 0
  1. #run.py
  2. from overwatch import app
  3. app.run()
  4.  
  5. #__init__.py
  6. from flask import Flask, session, g, render_template, request, redirect, url_for, Response
  7. import websiteconfig as config
  8. from flaskext.principal import Identity, Principal, RoleNeed, UserNeed, \
  9.             Permission, identity_changed, identity_loaded
  10.  
  11. app = Flask(__name__)
  12. app.debug = config.DEBUG
  13. app.secret_key = config.SECRET_KEY
  14.  
  15.  
  16. principals = Principal(app)
  17. principals._init_app(app)
  18.  
  19.  
  20. #error handling
  21. @app.errorhandler(404)
  22. def not_found(error):
  23.     return render_template('404.html'), 404
  24.  
  25. @app.errorhandler(403)
  26. def page_not_found(e):
  27.     session['redirected_from'] = request.url
  28.     return redirect(url_for('crud.login'))
  29.  
  30. # handle login failed
  31. @app.errorhandler(401)
  32. def page_not_found(e):
  33.     return Response('<p>Login failed</p>')
  34.  
  35. from overwatch.views import general
  36. from overwatch.views import crud
  37.  
  38.  
  39. app.register_blueprint(general.mod)
  40. app.register_blueprint(crud.mod)
  41.  
  42. #general.py
  43. from flask import Blueprint, render_template, session, redirect, url_for, \
  44.      request, flash, g, Response, jsonify
  45. from flaskext.principal import Identity, Principal, RoleNeed, UserNeed, \
  46.             Permission, identity_changed, identity_loaded
  47. from .. import principals
  48.  
  49. mod = Blueprint('general', __name__)
  50.  
  51. normal_role = RoleNeed('normal')
  52. normal_permission = Permission(normal_role)
  53.  
  54. @mod.route('/')
  55. @normal_permission.require(http_exception=403)
  56. def index():
  57.     return "YOU'RE IN"
  58.  
  59.  
  60. #crud.py
  61. from flask import Blueprint, render_template, session, redirect, url_for, \
  62.      request, flash, g, Response, jsonify, abort, Response
  63. from mongokit import Connection, Document
  64. from db import user_exists, email_exists, return_attribute, check_credentials
  65. from forms import RegistrationForm, LoginForm
  66. from .. import app
  67. from flaskext.principal import Identity, Principal, RoleNeed, UserNeed, \
  68.             Permission, identity_changed, identity_loaded
  69. from general import normal_role, normal_permission
  70.  
  71. mod = Blueprint('crud', __name__)
  72.  
  73. @mod.route('/login/', methods=['GET', 'POST'])
  74. def login():
  75.     form = LoginForm(request.form)
  76.     error = None
  77.     if request.method == 'POST' and form.validate():
  78.         if check_credentials(form.username.data,form.password.data):
  79.             identity = Identity(form.username.data)
  80.             identity_changed.send(app, identity=identity)
  81.             return redirect(session['redirected_from'])
  82.         else:
  83.             return abort(401)
  84.     return render_template('login.html', form=form, error=error)
  85.  
  86. @app.route("/logout/")
  87. def logout():
  88.     for key in ['identity.name', 'identity.auth_type', 'redirected_from']:
  89.         try:
  90.             del session[key]
  91.         except:
  92.             pass
  93.     return Response('<p>Logged out</p>')
  94.  
  95. @identity_loaded.connect_via(app)
  96. def on_identity_loaded(sender, identity):
  97.     identity.provides.add(normal_role)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement