我正在使用flask-login与postgreSQL结合使用。每当我在任何def之前有一个装饰器@login_required它没有重定向到那个特定的def。这是我的代码:
初始化的.py
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
lm = LoginManager()
lm.init_app(app)
lm.login_message = "Login please"
lm.login_view = "signin"
from app import views
我的模特:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(150))
user_name = db.Column(db.String(80), unique=True)
password = db.Column(db.String(64))
role = db.Column(db.Integer)
activate = db.Column(db.Boolean)
def is_authenticated(self):
return True
def is_active(self):
return self.activate
def is_anonymous(self):
return False
def get_id(self):
try:
return unicode(self.id) # python 2
except NameError:
return str(self.id) # python 3
我的观点在这里:
@lm.user_loader
def load_user(id):
return User.query.get(int(id))
@app.route('/signin', methods=['GET', 'POST'])
def signin():
form = LoginForm()
if request.method == "POST":
if current_user is not None and current_user.is_authenticated():
return redirect(url_for('first'))
user = User.query.filter(User.user_name == form.user_name.data, User.password == form.password.data).first()
login_user(user, remember=True)
session['signed'] = True
session['username'] = user.user_name
if session.get('next'):
next_page = session.get('next')
session.pop('next')
return redirect(next_page)
else:
return redirect(url_for('first'))
else:
session['next'] = request.args.get('next')
return render_template('log_in.html', form=form)
@app.route('/')
def first():
return render_template("layout.html")
@app.route('/main')
@login_required
def main():
return render_template("main.html")
所以从这里开始,每当我去url:localhost:5000 / main它就会显示一个登录页面(如果我还没有登录),但在它之后我输入输入以形成我所拥有的在命令行中:
127.0.0.1 - - [09/Mar/2015 00:37:39] "GET /signin?next=%2Fmain HTTP/1.1" 200 -
127.0.0.1 - - [09/Mar/2015 00:37:47] "POST /signin HTTP/1.1" 302 -
127.0.0.1 - - [09/Mar/2015 00:37:47] "GET /main HTTP/1.1" 302 -
127.0.0.1 - - [09/Mar/2015 00:37:47] "GET /signin?next=%2Fmain HTTP/1.1" 200 -
看起来在发出POST请求之后,它尝试获取主def,但系统不允许并再次返回登录页面。
答案 0 :(得分:1)
我一直在玩,并认识到我需要设置会话[' user_id'] = form.user.id以使login_user正常工作