如果我重定向然后渲染模板,如何传递请求

时间:2017-09-14 08:53:53

标签: python django

我有一个要求,从登录页面跳转到管理页面,您知道URL地址应该更改为管理页面。

如果我只使用渲染到管理页面,则URL地址不会改变,因此在post中我得到了OptimusCrime的好答案。

但是如果我重定向然后渲染模板,我就无法将请求从登录页面传递到管理页面。

在登录页面的views.py中:

...
return redirect('/app_admin/index/')   

在管理页面的views.py中:

...
return render(request, 'app_admin/index.html') # there the request is None.

如何将请求传递给管理页面的views.py?

1 个答案:

答案 0 :(得分:1)

您应该看一些基本的Django教程,例如this one,它描述了如何创建登录处理程序。

要点是:

在用户提交表单的视图中,您将评估用户名和/或密码。如果提交了正确的信息(用户名和密码),则将此信息保存在会话中。将用户重定向到登录(受限)区域并检查会话。如果会话具有正确的信息,则允许用户查看内容,否则将用户重定向。

简单登录逻辑(说明性):

def login(request):
    m = Member.objects.get(username=request.POST['username'])
    if m.password == request.POST['password']:
        # Username and password is correct, save that the user is logged in in the session variable
        request.session['logged_in'] = True
        request.session['username'] = request.POST['password']
        # Redirect the user to the admin page
        return redirect('/app_admin/index/')
    else:
        # Username and/or password was incorrect
        return HttpResponse("Your username and password didn't match.")

简单的管理页面逻辑(说明性):

def admin_index(request):
    # Make sure that the user is logged in
    if 'logged_in' in request.session and request.session['logged_in']:
        # User is logged in, display the admin page
        return render(
            request, 
            'app_admin/index.html', 
            {'username': request.session['username']}
        ) # You can now use {{ username }} in your view
    # User is not logged in and should not be here. Display error message or redirect the user to the login page
    return HttpResponse("You are not logged in")

请注意,这些是两个不同的视图(和网址),您必须在urlpatterns中进行映射。