Ich habe eine Frage zu Blueprints. Ich habe eine App, die wie folgt aufgebaut ist
app
/run.py
/APP
/__init__.py
/VIEWS
/__init__.py
/general.py
/crud.py
Dies ist der Code http://pastebin.com/bsHsTGAP
run.py
from overwatch import app
app.run()
__init__.py
from flask import Flask, session, g, render_template, request, redirect, url_for, Response
import websiteconfig as config
from flaskext.principal import Identity, Principal, RoleNeed, UserNeed, \
Permission, identity_changed, identity_loaded
app = Flask(__name__)
app.debug = config.DEBUG
app.secret_key = config.SECRET_KEY
principals = Principal(app)
principals._init_app(app)
@app.errorhandler(404)
def not_found(error):
return render_template('404.html'), 404
@app.errorhandler(403)
def page_not_found(e):
session['redirected_from'] = request.url
return redirect(url_for('crud.login'))
# handle login failed
@app.errorhandler(401)
def page_not_found(e):
return Response('<p>Login failed</p>')
from overwatch.views import general
from overwatch.views import crud
app.register_blueprint(general.mod)
app.register_blueprint(crud.mod)
general.py
from flask import Blueprint, render_template, session, redirect, url_for, \
request, flash, g, Response, jsonify
from flaskext.principal import Identity, Principal, RoleNeed, UserNeed, \
Permission, identity_changed, identity_loaded
from .. import principals
mod = Blueprint('general', __name__)
normal_role = RoleNeed('normal')
normal_permission = Permission(normal_role)
@mod.route('/')
@normal_permission.require(http_exception=403)
def index():
return "YOU'RE IN"
crud.py
from flask import Blueprint, render_template, session, redirect, url_for, \
request, flash, g, Response, jsonify, abort, Response
from mongokit import Connection, Document
from db import user_exists, email_exists, return_attribute, check_credentials
from forms import RegistrationForm, LoginForm
from .. import app
from flaskext.principal import Identity, Principal, RoleNeed, UserNeed, \
Permission, identity_changed, identity_loaded
from general import normal_role, normal_permission
mod = Blueprint('crud', __name__)
@mod.route('/login/', methods=['GET', 'POST'])
def login():
form = LoginForm(request.form)
error = None
if request.method == 'POST' and form.validate():
if check_credentials(form.username.data,form.password.data):
identity = Identity(form.username.data)
identity_changed.send(app, identity=identity)
return redirect(session['redirected_from'])
else:
return abort(401)
return render_template('login.html', form=form, error=error)
@app.route("/logout/")
def logout():
for key in ['identity.name', 'identity.auth_type', 'redirected_from']:
try:
del session[key]
except:
pass
return Response('<p>Logged out</p>')
@identity_loaded.connect_via(app)
def on_identity_loaded(sender, identity):
identity.provides.add(normal_role)
Die Sache ist, ich scheine eine Menge Zeug in eine Menge Zeug zu importieren. Im Moment funktioniert es. Wenn ich auf die Indexseite gehe, die von general.py Blueprint behandelt wird und mit normal_permission gesichert ist, leitet es auf /login um, das von crud.py Blueprint behandelt wird und wenn es eingeloggt ist, leitet es auf index um. Wieder, im Moment ist es ... funktioniert, aber ... es fühlt sich auch realllllllllly schmutzig und unsauber und .. bleac ... so im Gegensatz zu einigen der guten Code, den ich gelesen :)
Alle Vorschläge sind willkommen. Wenn dies nicht der richtige Weg ist, bin ich bereit zu lernen. Ich möchte nicht, dass einige Code, der .. nur funktioniert haben.
Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen und vielleicht zu beantworten.
ps. wenn ich hier zu viel Code eingefügt habe, lassen Sie es mich wissen, und ich werde es heraus bearbeiten.