django, добавление пароля для ограничения доступа к регистрации на моем веб-сайте

#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