我有一个带烧瓶的应用程序之前有效但现在我在其中使用 Blueprint 并尝试运行它但得到了错误,所以我想知道问题蓝图g.user不工作?以及如何解决它Thnx:)
app / layout / __ init __.py:
from flask import Blueprint
layout = Blueprint('layout', __name__)
from . import view
__ init __ .py
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
import psycopg2
from config import basedir
from config import config
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy()
lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login'
def create_app(config_name):
app = Flask(__name__)
app.config['DEBUG'] = True
app.config.from_object(config[config_name])
db.init_app(app)
from .layout import layout as appr_blueprint
# register our blueprints
app.register_blueprint(appr_blueprint)
return app
view.py:
@layout.before_request
def before_request():
g.user = current_user
@layout.route('/login', methods = ['GET', 'POST'])
def login():
form = LoginForm()
#checks if the user is authernticated
#or not, if yes it skips authentfic.
if current_user is not None and current_user.is_authenticated():
return redirect(url_for('user'))
#does not allow user to use get method
if request.method == 'GET':
return render_template('login.html',
form = form,
title = 'Login')
#taking the user submitted data and checking if it exists in the database
user_in_db = User.query.filter_by(name=form.name.data.lower()).first()
#if the username is not wrong
if user_in_db is not None and user_in_db != False:
if form.email.data != user_in_db.email:
flash('Email is incorrect')
return redirect(url_for('login'))
login_user(user_in_db)
return redirect(url_for('user',page=1,sortby='normal'))
else:
flash('Username does not exists')
return render_template('login.html',
form = form,
title = 'Login')
base.html文件:
<div id="bodyAll">
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<ul class="nav navbar-nav">
<li id="logo">
<a href="{{ url_for('layout.home') }}">
<span id="globe"class="glyphicon glyphicon-home"></span>
Home
</a>
</li>
<li id="logo">
<a href="{{ url_for('layout.new') }}">
<span id="globe"class="glyphicon glyphicon-plus"></span>
Add Monkey
</a>
</li>
<li>
<a href="{{ url_for('layout.user',page = '1', sort = 'normal', monkey = monkey) }}">
<span class="glyphicon glyphicon-tree-deciduous"></span>
Jungle
</a>
</li>
{% if current_user.is_authenticated() %} //**Got error here**
<li>
<a href="#">
<span class="glyphicon glyphicon-user"></span>
{{g.user.name.capitalize()}}
</a>
</li>
{% endif %}
答案 0 :(得分:5)
您应该在 init .py中注册login_manager 尝试添加此
login_manager.init_app(app)
答案 1 :(得分:0)
添加LoginManager的位置 init .py或app.py
login_manager = LoginManager()
#Added this line fixed the issue.
login_manager.init_app(app)
login_manager.login_view = 'users.login'