#python #django
#python #django
Вопрос:
У меня есть настроенная модель Django. Моя проблема заключается в том, что всякий раз, когда я обновляю какую-либо информацию профиля пользователя, она выходит из системы. Я знаю, что Django вышел из системы пользователя после смены пароля, и я должен использовать функцию update_session_auth_hash(). Однако в моем случае это не сработало, и я не хочу использовать Django changePasswordForm, потому что я хочу, чтобы пользователь мог изменять всю свою информацию в одной форме. Любая помощь будет оценена.
Это моя пользовательская модель пользователя:
class MyUser(AbstractBaseUser):
firstName = models.CharField(max_length=100, validators =[firstnameCheck] )
lastName = models.CharField(max_length=100, validators =[lastnameCheck] )
#nationalID = models.IntegerField(unique=True)
nationalID = models.CharField(max_length=10, validators=[RegexValidator(r'^[0-9]{10}
Это мое мнение
def update_admin(request,id):
context = {}
if request.method == "POST":
pi = MyUser.objects.get(pk=id)
fm = UserRegisterationForm(request.POST,instance=pi)
if fm.is_valid():
request.user.set_password(fm.cleaned_data['password1'])
fm.save()
update_session_auth_hash(request, request.user)
messages.add_message(request, messages.INFO, 'The profile updated successfully.')
context['form'] = fm
else:
pi = MyUser.objects.get(pk=id)
fm = UserRegisterationForm(instance=pi)
context['form'] = fm
return render(request,'project/update_admin.html', context)
Ответ №1:
Вы могли бы сделать что-то вроде этого.
Шаблон:
<form method="POST" class="contact-form" action="{% url 'change-password' %}"> ##make sure the action links to the `changepassword` view
{% csrf_token %}
<input type="password" name="password" required id="password" pattern="^[a-zA-Z0-9]{6,}$">
</div>
<button type="submit">Submit</button>
</form>
Views.py:
def changepassword(request):
user = request.user
if 'password' in request.POST:
user.set_password(request.POST['password'])
return render(request, 'project/changepassword.html')
Это позволит вашему пользователю войти в систему после смены пароля, но вам нужно будет добавить к этому обработку проверки и обработку ошибок, чтобы сделать это жизнеспособным решением.
)], unique=True)
GENDER_CHOICES = [('male', 'Male'), ('female', 'Female')]
gender = models.CharField(choices=GENDER_CHOICES, max_length=10)
dateofbirth = models.DateField(auto_now=False, auto_now_add=False)
email = models.EmailField(max_length=100, unique=True)
password = models.CharField(max_length=100)
password_confirm = models.CharField(max_length=100, default='')
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = 'email' #enable authentication by using email instead of default 'username'
REQUIRED_FIELDS = ['firstName', 'lastName', 'nationalID','gender','dateofbirth','password','password_confirm']
objects = MyUserManager()
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self,app_label):
return True
Это мое мнение
Ответ №1:
Вы могли бы сделать что-то вроде этого.
Шаблон:
Views.py:
Это позволит вашему пользователю войти в систему после смены пароля, но вам нужно будет добавить к этому обработку проверки и обработку ошибок, чтобы сделать это жизнеспособным решением.