Django: как использовать AJAX, чтобы проверить, существует ли имя пользователя в регистрационной форме?

#python #ajax #django

#python #аякс #джанго

Вопрос:

Когда пользователь вводит имя пользователя, я хочу проверить базу данных, если это имя пользователя уже существует, и отобразить сообщение об ошибке. Как бы я это сделал, не обновляя страницу? С помощью AJAX?

registration_form.html

 <div class="container-fluid userformcontainer">
  <div class="row">
      <div class="col-md-offset-2 col-sm-offset-1 col-sm-8 userformdiv">
          <h1 class="title userformtitle">Sign up</h1>
          <form method="POST" class="post-form">
              {% csrf_token %}
              {% bootstrap_form form %}

              {% buttons %}
              <button type="submit" class="save btn btn-default btn-lg userformbutton center-block">Register</button>
              {% endbuttons %}
          </form>
      </div><!--col-->
    </div><!--row-->
</div><!--container-->
 

views.py

 class UserFormView(View):
  form_class = SignUpForm
  template_name = 'card/registration_form.html'

  def get(self, request):
      form = self.form_class(None)
      return render(request, self.template_name, {'form': form})

  def post(self, request):
      form = self.form_class(request.POST)

      if form.is_valid():
          user = form.save(commit=False)

          username = form.cleaned_data['username']
          user.first_name = form.cleaned_data['first_name']
          user.last_name = form.cleaned_data['last_name']

          if not User.objects.filter(username=username).exists():
              password = form.cleaned_data['password']
              user.set_password(password)
              user.save()

              user = authenticate(username=username, password=password)

              if user is not None:

                  if user.is_active:
                      login(request, user)
                      return redirect('card:deck_list')
              else:
                  pass
          else:
              pass
 

forms.py

 class SignUpForm(forms.ModelForm):
  password = forms.CharField(widget=forms.PasswordInput)

  class Meta:
      model = User 
      fields = ['username', 'first_name', 'last_name', 'password']
 

Комментарии:

1. вы знаете, как использовать ajax?

2. в любом случае проверьте эту ссылку

Ответ №1:

Вы можете создать свою форму вручную (по крайней мере, поле имени пользователя) в соответствии с приведенной ниже документацией django:

https://docs.djangoproject.com/en/1.10/topics/forms/#rendering-fields-manually

Затем вы можете установить событие «onchange» для своего поля, чтобы вызвать функцию javascript, которая выполняет работу AJAX за вас, и отобразить сообщение об успехе / сбое в вашем собственном теге div.

В качестве альтернативы, вы можете разрешить коду javascript, который выполняется при загрузке страницы, прикреплять событие «onchange» к полю «имя пользователя» на основе его имени к тому же заданию для вас.