#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» к полю «имя пользователя» на основе его имени к тому же заданию для вас.