Python Django身份验证,登录问题

Python Django身份验证,登录问题,python,django,session,authentication,login,Python,Django,Session,Authentication,Login,问题澄清: 我试图测试每个页面请求的用户是否经过身份验证 我第一次尝试在Django中使用身份验证,但我没有掌握登录视图应该如何处理身份验证 当我使用@login\u required时,我将重定向到“/login”以检查用户是否已登录,如果未登录,则显示登录页面。然而,试图重定向回原始页面会导致无限循环,因为它会一次又一次地将我发送回登录页面 我显然不明白@login\u required应该如何工作,但我不确定我遗漏了什么。我已经搜索了一段时间了,但是每个人都使用默认的@login\u re

问题澄清: 我试图测试每个页面请求的用户是否经过身份验证

我第一次尝试在Django中使用身份验证,但我没有掌握登录视图应该如何处理身份验证

当我使用@login\u required时,我将重定向到“/login”以检查用户是否已登录,如果未登录,则显示登录页面。然而,试图重定向回原始页面会导致无限循环,因为它会一次又一次地将我发送回登录页面

我显然不明白@login\u required应该如何工作,但我不确定我遗漏了什么。我已经搜索了一段时间了,但是每个人都使用默认的@login\u required,没有'login\u url'参数

比如说。。我试图访问的页面将是

@login_required(login_url='/login')
def index(request):
然后我的登录名是。。(显然不完整)

编辑:请注意。。会话变量在另一个视图中设置

def login(request):
    if '_auth_user_id' in request.session:

        # just for testing purposes.. to make sure the id is being set
        print "id:",request.session['_auth_user_id']

        try:
            user = Users.objects.get(id=request.session['_auth_user_id'])
        except:
            raise Exception("Invalid UserID")

        # TODO: Check the backend session key

        # this is what I'm having trouble with.. I'm not sure how
        # to redirect back to the proper view
        return redirect('/')
    else:
        form = LoginForm()

        return render_to_response('login.html',
            {'form':form},
            context_instance=RequestContext(request)
        )

正如你所说,很明显这是行不通的,因为它是不完整的。因此,在完成之前,您将得到一个无限循环-因为您尚未编写将
\u auth\u user\u id
放入request.session的代码

但我真的不知道你为什么要做这个测试。对于如何编写登录视图,有一个非常好的示例:从表单中获取用户名和密码,将它们发送到
authenticate
以获取用户对象,然后将其传递到
login
。。。完成了

编辑我想我可以看出你的困惑所在。
login\u required
decorator本身检查用户是否已登录-这正是它的作用。您不需要编写任何代码来实现这一点。您的工作是编写用户实际登录的代码,方法是调用
authenticate
login
尝试调用login(),请参见下一步:


您不使用的原因是什么?对不起,您的用户在哪里进行登录操作?我的意思是在哪里调用方法登录来登录他?@isbadawi谢谢。这就是我要找的。。。至少有一部分。这不是我真正遇到的问题。。我正在尝试测试每个请求的用户是否经过身份验证。呃。。。什么?如果用户未经身份验证,则
login\u required
decorator会将其重定向到登录视图,您可以按照我的链接所示编写该视图。您实际上没有登录您的用户。“login\u required decorator本身会检查用户是否登录-这正是它的目的”。。。这就是我要找的。我没有注意到“user\u passes\u test”签入,我在后台有一些自定义的东西,所以看起来我需要编写自己的登录所需的装饰程序。