1

django 中是否有任何方法可以在访问应用程序中的任何视图时使用提供的凭据执行登录?

我的动机是使用诸如Pingdom之类的服务进行可用性监控。我想验证其可用性的大多数 url 都用 a 装饰,@login_required除非我以前登录过,否则无法访问。

我的想法解决方案将是一种在 GET 或 POST 参数中提供凭据时访问我的视图的方法。另一种选择可能是站点正常运行时间监控服务,它支持在访问相关 URL 之前登录并获取会话。

更新

感谢@Filip Dupanović 的指导和这里的代码,我的简单工作中间件如下所示:

from django.contrib.auth import authenticate, login

class AuthenticationEverywhereMiddleware(object):
    """
    Middleware to allow logging in by supplying login credentials in any URL
    """

    def process_request(self, request):
        if (request.GET.get('authenticateEverywhere','') == 'GET'):
            username = request.GET['username']
            password = request.GET['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)

我添加了触发参数authenticateEverywhere以防止与可能使用的视图usernamepassword参数发生任何可能的冲突。

4

1 回答 1

3

你当然可以!您需要编写一个自定义中间件类,该类实现一个自定义process_request方法,您可以在其中检查请求对象、获取凭据并在请求被路由到装饰有login_required.

于 2012-09-30T23:12:15.280 回答