使用Django实现用户无效消息

时间:2011-03-30 04:50:53

标签: python django django-models django-admin django-templates

我创建了一个django应用程序。它已在同一registrationForm.html上获得用户登录/注册。登录功能现在正常工作。一旦用户提供了正确的用户名(此处是电子邮件ID)和密码,用户就会被重定向到另一个页面(logedIn.html),显示“用户登录”消息,当用户无效(用户名或密码错误)时,页面再次呈现到该页面(registrationForm.html)。现在我想在该页面上显示“检查您的用户名或密码”的消息。作为一个django新手,我无法做到这一点。有人可以帮忙做到这一点。我会在这里粘贴我的代码。

views.py

def registrationForm(request):
    if request.method == "POST":  
        firstName = request.POST.get("firstName")
        lastName = request.POST.get("lastName")
        email = request.POST.get("email")
        password = request.POST.get("password")
        sex = request.POST.get("sex")
        birthday = request.POST.get("birthday")
        print request.POST.get("sex")
        UniversityDetails(firstName=firstName,lastName=lastName,email=email,password=password,sex=sex,birthday=birthday).save()
        return render_to_response('registrationForm.html')
    return render_to_response("registrationForm.html")

def login(request):
    if request.POST:            
        email=request.POST.get("username")
        password = request.POST.get("password")                     
        user = UniversityDetails.objects.filter(email=email,password=password)          
        if(not user):
            return render_to_response("registrationForm.html")
        else:
            return render_to_response("logedIn.html")

HTML

<div align="center">
<form name="userInputForm" method="POST" id="myFormid" action="http://10.1.0.90:8080/login/">
<div style="float:left;width:100%;">
  <p style="float:left;margin-right:10px;width:auto;"><label style="float:left;">Email id</label><br/> <input type="text" name="username" size="25" /></p>
  <p style="float:left;margin-right:10px;width:auto;"><label style="float:left;">Password</label><br/><input type="password" name="password" size="25" /></p>
 </div> 
    <p style="clear:both;float:left;"><input type="submit" value="Log in" /></p>
</div>
</form>

2 个答案:

答案 0 :(得分:3)

您的工作方式存在很多问题 - 例如存储明文密码 - 请查看django可用的内置身份验证后端,了解如何正确登录用户。附加的好处包括用户可自动使用request.user http://docs.djangoproject.com/en/dev/topics/auth/

但我确实理解django一步一步学习。给定您的代码,只需将一个变量添加到模板的上下文中,即失败时呈现。

def login(request):
    if request.POST:            
        email=request.POST.get("username")
        password = request.POST.get("password")                     
        user = UniversityDetails.objects.filter(email=email,password=password)          
        if(not user):
            return render_to_response("registrationForm.html", 
                       {'invalid': True }) # our template can detect this variable
        else:
            return render_to_response("logedIn.html")

模板

{% if invalid %}
    Your email/password combo doesn't exist. 
{% endif %}

答案 1 :(得分:2)

我强烈建议你使用Django的built-in user authentication system。您可以为每个用户store additional user information,它将为您完成大部分工作(包括加密密码和用户权限)。

如果无法做到这一点,那么请考虑使用forms来收集和验证用户数据 - 它比自己做得更干净,更容易。

最后,我建议您浏览tutorial,了解如何在模板中使用变量。

我知道需要一段时间才能熟悉Django如何做事(上帝知道它花了我足够长的时间),但坚持在那里:)。