【问题标题】:Python-falcon handling sessionPython-falcon 处理会话
【发布时间】:2017-02-09 15:26:43
【问题描述】:

我正在使用 python flask 构建一个简单的网络应用程序,用户可以在其中点击localhost:8000/ 并登录。如果登录成功,则会显示另一个页面,但我想知道如果用户已经登录,我该如何重定向到主页?例如,如果我第一次登录,我会被带到主页,如果我打开第二个选项卡并再次点击登录 url,我会自动重定向到主页(很像 gmail?)。

class LoginPage(object):
    def on_get(self, req, resp, form={}):

【问题讨论】:

  • 澄清一下:您使用的是Falcon 还是Flask?从类/方法来看,它看起来像 Falcon,但您的描述提到了烧瓶和您的标题 falcon。
  • on_get 绝对是 Falcon 的东西。如果你想要会话管理,我认为 Flask 对你来说是一个更好的选择(对你的项目一无所知)。对于 Falcon,我尝试过使用 Beaker,这很好,但它的文档不够清晰,所以我今天要做 PR。

标签: python session web falcon


【解决方案1】:

对于非常简单的应用程序,HTTP Basic Auth 可能已经足够了。 Flask 使这变得非常容易。以下装饰器围绕仅对某些用户可用的功能应用:

from functools import wraps
from flask import request, Response

def check_auth(username, password):
    """This function is called to check if a username password combination is valid. """
    return username == 'admin' and password == 'secret'

def authenticate():
    """Sends a 401 response that enables basic auth"""
    return Response(
    'Could not verify your access level for that URL.\n'
    'You have to login with proper credentials', 401,
    {'WWW-Authenticate': 'Basic realm="Login Required"'})

def requires_auth(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        auth = request.authorization
        if not auth or not check_auth(auth.username, auth.password):
            return authenticate()
        return f(*args, **kwargs)
    return decorated

要使用这个装饰器,只需包装一个视图函数:

@app.route('/secret-page')
@requires_auth
def secret_page():
    return render_template('secret_page.html')

如果您将基本身份验证与 mod_wsgi 一起使用,则必须启用身份验证转发,否则 apache 会使用所需的标头并且不会将其发送到您的应用程序:WSGIPassAuthorization。

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多