2017-09-14 70 views
0

我有一个要求,从登录页面跳转到管理页面,你知道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?

+0

你应该真的考虑学习HTTP协议是如何工作的...... –

回答

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") 

请注意,这是两个不同的意见(和URL),即您必须在您的urlpatterns中映射。

+0

如果我想在'/ app_admin/index /'中使用密码,我是否应该在会话中存储密码?或者更好地使用'/ login /'中的密码。 – 244boy

+0

除了登录用户之外,不应该使用用户密码。但是,您可以在会话变量中保存想要的任何信息。看到我更新的答案,我保存当前的用户名。 – OptimusCrime

+0

我使用密码来连接其他应用程序,所以我在/ login /中进行连接,非常感谢。 – 244boy

相关问题