Tengo una pregunta con respecto a los planos. Tengo una aplicación que se estructura como estaPlano de matraces uso adecuado
app
/run.py
/APP
/__init__.py
/VIEWS
/__init__.py
/general.py
/crud.py
este es el código 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)
cosa es que parece estar importando un montón de cosas en un montón de cosas. En este momento funciona. si voy al índice paginado, que es manejado por el plan general.py y asegurado con normal_permission, lo redirecciona a/login, que es manejado por crud.py blueprint y, si está registrado, redirecciona al índice. De nuevo, ahora mismo ... funciona pero ... también se siente realllllllly sucio y sucio y ... bleac ... a diferencia de algunos de los buenos códigos que leo :)
Cualquier sugerencia es bienvenida por favor. Si esta no es la forma de abordarlo, estoy dispuesto a aprender. No quiero tener un código que ... simplemente funcione.
Gracias por su tiempo leyendo esto y tal vez respondiéndolo.
ps. si pegué demasiado código aquí, hágamelo saber y lo editaré.
Parece que muchas de las cosas que importa no se utilizan, ¿por qué no importa en cada módulo solo lo que va a utilizar? (De todos modos, importar las mismas cosas en muchos lugares no es un problema de rendimiento, ya que las importaciones solo se producen una vez, pero las importaciones no utilizadas hacen que el código sea menos legible) – MatToufoutu
Creo que estás refiriéndome a todas esas cosas sin frasco. Coy y pegar trabajo. Hqvent ya limpió todo. Remití más sobre cómo debo hacerlo desde ... Importar aplicación en crud.py para actualizar la identidad a través de identity_changed y más a lo largo de esas líneas – pocorschi
La forma correcta de acceder a la aplicación actual desde una vista en otro módulo es a través de la El objeto 'flask.current_app', que es un proxy para la aplicación actual. (si esto es lo que estabas buscando, dime y agregaré el comentario como respuesta) – MatToufoutu