Получить сообщение об ошибке из импортированного / внешнего валидатора для печати Django - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь создать простую страницу регистрации пользователя. Я хочу, чтобы он включал капчу для проверки. Я использую django-simple-captcha для этой цели. (Если есть лучшая библиотека, скажи мне ...)

Пока все работает отлично, за исключением того, что когда капча неверна, пользователь не уведомляется - он просто возвращается на экран регистрации. Как я могу напечатать конкретное сообщение ValidationError, когда капча недействительна? (Я также использую django-crispy-формы, если это имеет какое-либо значение)

шаблон:

{% extends "base.html" %}
{% load crispy_forms_tags %}
{% block content %}
  <div class="content-section">
    <form method="POST">
      {% csrf_token %}
      <fieldset class="form-group">
        <legend class="border-bottom mb-4">Registration</legend>
        {{ form|crispy }}
      </fieldset>
      <div class="form-group">
        <button class="btn btn-outline-info" type="submit">Sign Up</button>
      </div>
    </form>
    <div class="border-top pt-3">
      <small class="text-muted">Already Have An Account?<a class="ml-2" href="{% url 'login' %}">Log in</a></small>
    </div>
  </div>
{% endblock content %}

модель формы:

class UserRegisterForm(UserCreationForm):
   email = forms.EmailField(validators=[validate_email])
   captcha = CaptchaField()

   class Meta:
      model = User
      fields = ['username', 'email', 'password1', 'password2'] # including 'captcha here didn't seem to make a difference

и вид:

def register(request):
   if request.method == 'POST':
   form = UserRegisterForm(request.POST)
   if form.is_valid():
      *do unrelated things*
      return redirect('login')
   else:
      form = UserRegisterForm()
   return render(request, 'register-template-url', {'form': form})

1 Ответ

1 голос
/ 20 марта 2019

из simplecaptcha.fields импорт CaptchaField ---- если вы импортируете CaptchaField, как это, он будет работать. Если это не работает, просто сделайте 1 замену, как показано ниже

из простой капчи, импорт капчи, капча формы

@captchaform('captcha')
class UserRegisterForm(UserCreationForm):

    email = forms.EmailField(validators=[validate_email])
    captcha = CaptchaField()

   class Meta:
       model = User
       fields = ['username', 'email', 'password1', 'password2','captcha']
...