Baňka blueprints správné používání

hlasů
19

Mám dotaz ohledně plánů. Mám aplikaci, která je strukturován takto

app
    /run.py
    /APP
        /__init__.py
        /VIEWS
            /__init__.py
            /general.py
            /crud.py

Toto je kód 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)

Jde o to, zdá se mi, dovážet spoustu věcí na spoustu věcí. Právě teď to funguje. pokud jdu do indexu stránkovaný, který je ovládal general.py plánu a zajistí se normal_permission to přesměruje / login, který je řešen crud.py plánu a pokud jste přihlášeni v přesměruje na indexu. Opět platí, že právě teď je ... funguje, ale .. to se také domnívá, realllllllllly špinavé a nečisté a .. bleac ... tak na rozdíl od některých z dobré kódu čtu :)

Jakékoli návrhy jsou vítány, prosím. Pokud to není způsob, jak ho řešit, jsem ochoten se učit. Nechci mít nějaký kód, který .. prostě funguje.

Děkuji za váš čas přečtení tohoto a možná odpověděl ji.

ps. pokud i vložili příliš mnoho zde kód, dejte mi vědět a já ji upravit ven.

Položena 16/08/2011 v 22:45
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
19

Pro přístup k aktuální aplikaci ze zhlédnutí vašeho modrotisku, měli byste použít na flask.current_appobjekt, to je proxy pro aktuální aplikaci (a to je to, co se používá v nástavbách baňce například).

Pokud jde o váš kód, s výjimkou nepoužitých dovozu, je to dobře organizovaná podle mého názoru, ale nemohu říci ani o principaldruhé, jak jsem nikdy použity.

Odpovězeno 17/08/2011 v 12:02
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more