#django #django-models #django-forms #django-views #django-templates
#django #django-модели #django-forms #django-просмотры #django-шаблоны
Вопрос:
У меня есть страница регистрации, на которой я хочу ограничить доступ к регистрации на моем веб-сайте.
views.py:
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
passcode = PassCodeForm(request.POST)
if form.is_valid():
passcode == "FreedomLivesHere"
if passcode == 'passcode':
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Account created for {username}!')
return redirect('login')
else:
messages.error(request, f'Passcode incorrect, please try again!')
else:
messages.error(request, f'Oops I did it again! Please try again later.')
return redirect('register')
else:
form = UserRegisterForm()
passcode = PassCodeForm()
context = {
'passcode':passcode,
'form':form
}
return render(request, 'users/register.html', context)
forms.py
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
class PassCodeForm(forms.ModelForm):
class Meta:
model = Passcode
fields = ['passcode']
Когда я запускаю свою страницу регистрации, я получаю сообщение else: «Ой, я сделал это снова! пожалуйста, повторите попытку позже.’), каков наилучший способ добавления поля пароля, соответствующего строке. Также, в зависимости от строки пароля. Он собирается создать либо тип разрешения active, admin, либо staff. Возможно ли это?
Ответ №1:
Вы получаете ошибку Oops I did it again! please try again later
, потому что у вас есть два действия формы по одному и тому же URL. Таким образом, одна форма всегда будет недействительной. Вы не можете отправлять более одной формы одновременно. Добавьте поле пароля в форму UserRegisterForm и создайте валидатор, который будет проверять введенный пароль.
https://docs.djangoproject.com/en/3.1/ref/forms/validation/#cleaning-a-specific-field-attribute