2014-05-06 82 views
0

,我讓一個用戶註冊,由於下面的代碼:的Django只能登錄殼創建的用戶

def sign_up(request): 

    if request.POST: 
     userName = request.POST.get('username') 
     passWord = request.POST.get('password') 
     user = User.objects.create_user(username=userName, password=passWord) 
     user.save() 
     return HttpResponseRedirect(reverse('account:login')) 
    args = {} 
    args.update(csrf(request)) 
    args['form'] = UserCreationForm() 
    return render_to_response('account/sign_up.html', args, context_instance=RequestContext(request)) 

模板:

{% extends "base_login.html" %} 
{% load staticfiles %} 

<div id="sign_up"> {% block extension1 %} 
    <form action="/account/sign_up/" method="post"> {% csrf_token %} 
     {{ form }} <br/> 
     <input type="submit" value="Sign up"/> 
    </form> {% endblock %} 
</div> 

用戶被創建。我可以在數據庫中看到這一點。但是,按照這種方式,這個新創建的用戶將不會登錄。雖然,用戶在shell中創建相同的方式將能夠登錄。我嘗試了很多,發現:

users_able.password 
'pbkdf2_sha256$12000$CczM6MmFkTrj$qA1QG7O4nBSSOh6...' 

users_unable.password 
'!KAXKN25DPijEmzj0TcrhpHYpyB1pLhue...' 

所以我想這與密碼設置不正確有關。對?我使用默認的UserCreationForm進行註冊。有任何想法嗎?

+0

你能後的'UserCreationForm'? – pcoronel

+0

不知道如何,這是Django的內置 – Johngoldenboy

+0

你可以刪除user.save() - 這是多餘的。 create_user,創建並保存用戶。另外,是否有你使用render_to_response而不是渲染的原因?你在什麼版本的Django上? – user2734679

回答

2

參考How to use django UserCreationForm correctly

您可以直接保存,這將給你的用戶對象的UserCreationForm。

讓你做這樣的事情:

def sign_up(request): 
    if request.POST: 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      user = form.save() 
      return HttpResponseRedirect(reverse('account:login')) 
     ... 
+0

非常感謝。我只在Django身邊徘徊了一週,有時候你會對所有可能的嗡嗡聲都感到困惑。我在嘗試 – Johngoldenboy

0

Django的UserCreationForm沒有一個字段中指定密碼。它有一個指定的密碼1,並有一個密碼2字段,當密碼1與密碼1匹配時。如果您將request.POST.get('password')更改爲request.POST.get('password1'),我相信這會起作用。不過,我建議你不要使用你的方法,因爲它的內置。在創建用戶之前,您應該看到表單是否有效。

+0

謝謝你,會銘記在心。 – Johngoldenboy

相關問題