如何在django中实现自定义全局登录/注销功能

时间:2013-03-05 19:36:08

标签: django global-variables django-context requestcontext

我正在尝试实现自定义登录/注销功能。我的要求与内置的django登录功能略有不同。 因此,我必须以一种方式实现此功能,我可以在数据库中放置一个值0/1来检查用户是否已登录。我有一个布尔值。 这里的问题实际上是:我应该如何传递一个用户对象/一个变量,告诉我我的用户已登录(在我的情况下:users.is_logged_in = True)到每个html模板,以便用户(和我的应用程序)知道它已登录。此外,他应该能够通过单击每个html页面上的链接注销。 当用户成功登录时,是否可以创建任何全局模板并制作占位符类型的东西? 我的代码是:

def checkIfUserIsValid(request, template_name='appCenter.html'):
email = str(request.POST.get('email','')).strip()
password = str(request.POST.get('password','')).strip()
try:
    users = Users.objects.get(email = email, password = password)
    users.is_logged_in = True
    users.save()
    return direct_to_template(request, template_name, context_instance=RequestContext(request))
except Users.DoesNotExist:
    incorrectUserOrPassError = "Incorrect Username or Password. Please try again."
    return render_to_response('index.html', {'incorrectUserOrPassError':incorrectUserOrPassError},
                                  context_instance=RequestContext(request))

def logOutUser(request, template_name='index.html'):
    return direct_to_template(request, template_name, context_instance=RequestContext(request))

P.S:我已经研究过render()方法..

return render(request,'appCenter.html',{'users':users})

我可以做这样的事情并将模板用作全局模板吗?但我看到的问题是,我必须在用户通过身份验证后立即将用户重定向到appCenter.html。

1 个答案:

答案 0 :(得分:4)

不要这样做

您正在将纯文本密码存储在数据库中。这是不安全的。真的,不要这样做。

您没有使用Django的内置身份验证系统显示任何无法做到的事情,该系统已在每个模板中包含user对象(通过上下文处理器)。使用它。