2016-06-05 2 views
1

Я создал страницу профиля с django, чтобы пользователи могли изменять свою информацию, которую я дал в форме для пения. (Например, имя, адрес электронной почты, пароль)создать страницу профиля с django

У меня есть две проблемы на поле пароля:

1 - когда пользователь вставить пароль в текстовое поле, оно представлено в сыром виде, и мне нужно Джанго формат таблицы пользователя

<algorithm>$<iterations>$<salt>$<hash> 

мой взгляд на странице профиля:

def user_profile(request): 
    current_user = request.user 
    form = UserProfileForm(request.POST or None, instance=current_user) 
    if request.POST: 
     if form.is_valid(): 
      # pwd = form.cleaned_data['password'] 
      # form_obj = form.save(commit=False) 
      # form_obj.password = make_password(pwd) 
      form.save() 
      message = "saved successfully" 
      return render(request, 'Profile.html', {'form':form, 'message':message}, context_instance=RequestContext(request)) 

    return render_to_response('Profile.html', { 
     'form': form, 
    }, context_instance=RequestContext(request)) 

как вы можете видеть в комментариях, я использовал make_password функцию хэш пароля, и она работает нормально, но после того, как корпусов погружных на странице, пользователь не может перейти на другие страницы и потребовать повторного входа ... почему?!

2 - когда страница профиля отображается пользователю, она заполняется текущей информацией в базе данных, а пароль также находится в вышеуказанном формате (хэш) , и если пользователь отправляет форму без изменения поля пароля, это пароль изменен (он отправляет хэш один и хеш его снова!)

Как я могу решить эти проблемы и сделать простую страницу профиля работы в django? (Я действительно не нравлюсь собственная панель администратора это не выглядит красиво!)

ответ

2

Из документации:

Изменения пароля пользователя будет регистрировать все свои сессии, если SessionAuthenticationMiddleware включен.

Таким образом, вы должны использовать update_session_auth_hash(request, user)

Для получения дополнительной информации см https://docs.djangoproject.com/en/1.9/topics/auth/default/#session-invalidation-on-password-change

Что касается поля пароля быть предварительно заполнено: вы должны установить поле как passwordInput, который, по умолчанию, не является предварительно заполненный, см. https://docs.djangoproject.com/en/1.9/ref/forms/widgets/#django.forms.PasswordInput

+0

это работает! спасибо большое и как насчет второй проблемы? – Amir

+0

в этом случае пользователь должен каждый раз вводить свой пароль (потому что, если он оставил его пустым, он получит сообщение об ошибке, и если он просто войдет в submit, его пароль изменится на что-то долго!) – Amir

+0

Я говорю о второй проблеме в последней части мой ответ, в основном вам нужно изменить свою форму ... – mastazi