2014-05-06 3 views
0

Я позволил пользователю зарегистрироваться в связи со следующим кодом:Джанго только логин для оболочки, созданные пользователи

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> 

Пользователь получает создан , Я вижу это в базе данных. Однако, следуя этому пути, этот вновь созданный пользователь не сможет войти в систему. Хотя, пользователи, созданные таким же образом в оболочке, смогут войти в систему. Я много пробовал и нашел:

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

UserCreationForm Джанго не имеет поле с именем пароль. Он имеет именованный пароль1 и имеет поле password2, которое при включении должно совпадать с паролем1. Если вы измените request.POST.get ('password') на request.POST.get ('password1'), я уверен, что это сработает. Тем не менее, я бы порекомендовал вам не использовать ваш метод, поскольку он построен. Вы должны видеть, действительно ли форма действительна до создания пользователя.

+0

Спасибо также, это обнародует это. – Johngoldenboy

Смежные вопросы