检查登录状态烧瓶

时间:2016-02-10 05:40:15

标签: python flask

我正在使用登录系统创建一个网站,这就是我正在处理的问题:

我有两条路线:

第一个是登录页面,这是代码:

@app.route('/login')
def login():
    return render_template('login.html')

@app.route('/login', methods=['POST'])
def login_submit():
    error = None
    if request.form['username'] == 'khoa.programmer' and request.form['password'] == 'HotnCold':
        if request.form['actions'] == 'add-post':
            return redirect('/admin/addpost')
    else:
        error = 'Wrong info'
        return render_template('login.html', error=error)

,第二个是用户登录后重定向的addpost路由。

问题是我不知道如何检查该用户是否成功登录。我想阻止人们只是输入网址并在未经许可的情况下访问网页,只需向他们显示消息或将其重定向到登录页面即可。请帮忙!

抱歉我的英文!

5 个答案:

答案 0 :(得分:2)

你可以使用sesion。该视频还将为您提供帮助https://www.youtube.com/watch?v=WCpNvteLCDI

from flask import Flask, render_template, redirect, url_for, request, session, flash
from functools import wraps
import os

app = Flask(__name__)
app.secret_key = 'YOUSECRETKEY'
app.permanent_session_lifetime = timedelta(hours=24)

def login_required(f):
    @wraps(f)
    def wrap(*args, **kwargs):
        if 'logged_in' in session:
            return f(*args, **kwargs)
        else:
            flash('You need to login first')
            return redirect(url_for('login'))
    return wrap


@app.route('/login/', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        login = request.form['username']
        password = request.form['password']
        if login == password;
            session['logged_in'] = True
            return redirect(url_for('panel'))

        else:
            error = 'Invalid credentials. Try again'
            return render_template('login.html', error=error)

    return render_template('login.html', error=error)


@app.route('/panel/')
@login_required
def panel():
    return render_template('panel.html')


@app.route('/logout/')
@login_required
def logout():
    session.pop('logged_in', None)
    return redirect(url_for('login'))


if __name__ == '__main__':
    app.debug = True
    app.run(host=os.getenv('IP', '0.0.0.0'), port=int(os.getenv('PORT', 5000)))

答案 1 :(得分:0)

您可以使用flask-login

@site.route('/login', methods=['GET','POST'])
def login():
    form = LoginForm()
    if g.user is not None and g.user.is_authenticated:
        flash('Wrong info')
        return redirect(url_for('index.index'))
    if form.validate_on_submit() and request.method == "POST":
        name = form.name.data
        passwd = form.passwd.data

或者您可以使用会话来检查登录状态
当你登录时,session ['login_in'] = True,当你退出时,session ['login_in'] = False

答案 2 :(得分:0)

我觉得您希望在请求之间传递经过身份验证的用户,因此您可以使用会话

请阅读http://flask.pocoo.org/docs/0.10/api/#flask.session

from flask import session
session['user'] = your_way_of_getting_authenticated_user()
# retrieve your user in another view
user = session['user']
# redirect to login using url_for to the login page if user mismatch or None

请注意,您需要在使用会话

之前为您的应用设置密钥
from flask import Flask
app = Flask(__name__)
app.secret_key = "yoursecret"

我的方法是使用http://flask.pocoo.org/docs/0.10/patterns/viewdecorators/#login-required-decorator中指定的@login_required装饰器来装饰我的秘密视图,这里的示例是使用g对象给出的。

答案 3 :(得分:0)

您可以使用Flask登录(但您也将需要login_manager)。因此here是完整的文档。

 console.log(Actor.getAverageAgeOf(actors));

答案 4 :(得分:0)

创建一个检查会话状态的函数。

def protectedPage():
if 'userID' not in session:
    return redirect('/log-in', code=302)
if session['userID'] == False:
    return redirect('/log-in', code=302)