Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶蓝图的正确使用_Python_Flask - Fatal编程技术网

Python 烧瓶蓝图的正确使用

Python 烧瓶蓝图的正确使用,python,flask,Python,Flask,我有一个关于蓝图的问题。我有一个这样结构的应用程序 app /run.py /APP /__init__.py /VIEWS /__init__.py /general.py /crud.py 这是密码 run.py from overwatch import app app.run() from flask import Flask, session, g, render

我有一个关于蓝图的问题。我有一个这样结构的应用程序

app
    /run.py
    /APP
        /__init__.py
        /VIEWS
            /__init__.py
            /general.py
            /crud.py
这是密码

run.py

from overwatch import app
app.run()
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)
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"
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)
\uuuu init\uuuuu.py

from overwatch import app
app.run()
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)
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"
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)
crud.py

from overwatch import app
app.run()
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)
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"
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)
从flask导入蓝图、呈现模板、会话、重定向、url\
请求、闪存、g、响应、jsonify、中止、响应
从mongokit导入连接,导入文档
从db导入用户存在,电子邮件存在,返回属性,检查凭据
从表单导入注册表单,登录信息表单
从…起导入应用程序
从flaskext.principal导入标识、principal、RoleNeed、UserNeed、\
权限、标识\u已更改、标识\u已加载
从常规导入普通\u角色,普通\u权限
mod=蓝图('crud',\u\u名称\u\u)
@mod.route('/login/',methods=['GET','POST'])
def login():
form=LoginForm(request.form)
错误=无
如果request.method==“POST”和form.validate():
如果检查\u凭据(表单.用户名.数据,表单.密码.数据):
identity=identity(form.username.data)
标识\u已更改。发送(应用程序,标识=标识)
返回重定向(会话['redirected_from'])
其他:
返回中止(401)
返回呈现模板('login.html',form=form,error=error)
@应用程序路径(“/logout/”)
def注销():
对于注册表项['identity.name','identity.auth_type','redirected_from']:
尝试:
del会话[键]
除:
通过
返回响应(“注销”

”) @已加载标识。通过(应用程序)连接 已加载标识上的def(发件人,标识): identity.provides.add(普通_角色)
问题是,我似乎在把很多东西导入很多东西。现在它起作用了。如果我转到由general.py blueprint处理并使用普通_权限保护的索引页面,它将重定向到由crud.py blueprint处理的/login,如果登录,则重定向到index。再一次,现在它。。。工作但是。。它也感觉真的很脏,不干净和。。惨淡的。。。所以不像我读过的一些好代码:)

欢迎提出任何建议。如果这不是解决问题的方法,我愿意学习。我不想有一些代码。。只是工作而已

谢谢你花时间阅读这篇文章,也许还可以回答


注:如果我在这里粘贴了太多的代码,请告诉我,我会将其编辑掉。

要从蓝图视图访问当前应用程序,您应该使用
flask.current\u app
对象,它是当前应用程序的代理(例如,它在flask扩展中使用)


关于您的代码,除了未使用的导入之外,我认为它组织得很好,但是我无法说明
主体部分,因为我从未使用过它。

似乎很多您导入的东西都没有被使用,为什么不在每个模块中只导入您将要使用的内容?(无论如何,在许多地方导入相同的东西并不是性能问题,因为导入只发生一次,但未使用的导入会降低代码的可读性)我想你是在引用所有那些未使用的东西。羞怯和粘贴工作。Hqvent还没有清理任何东西。我在更多地讨论我需要如何从。。在crud.py中导入应用程序,以便通过identity_changed等更新身份。从另一个模块的视图中访问当前应用程序的正确方法是通过flask.current_app
对象,该对象是当前应用程序的代理。(如果这是你想要的,告诉我,我会添加评论作为答案)这是问题的一部分。你可以加上它作为答案。我更关注的是一双好眼睛,看着我的代码,告诉我代码是否有味道。特别是看主体部分。