Использование ajax + django для отправки форм - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь сделать подтверждение заказа по почте. Заполните форму, код прибывает по почте, введите новую форму и получите ответ об успехе. views.py

def get_name(request):
    if request.method == 'POST':
        user_code = generate_code(8)
        subject = 'code' 
        message = user_code
        phone=request.POST['phone']
        form = NameForm(request.POST)
        if form.is_valid():
            date_use = form.cleaned_data.get("date_visit")
            time_use = form.cleaned_data.get("time_visit")
            purpose_use = form.cleaned_data.get("purpose")
            if Registration.objects.filter(date_visit=date_use,time_visit=time_use).count()==0:
                Registration.objects.create(fio=request.POST['fio'],phone=request.POST['phone'],date_visit=request.POST['date_visit'],time_visit=request.POST['time_visit'],
                    phone=request.POST['phone'])
                request.session["phone"] = phone
                request.session["code"] = user_code
                send_mail(subject, message,settings.EMAIL_HOST_USER,[mail],fail_silently=False)
                return JsonResponse({ 'form1': render_to_string( 'registers/endreg.html', {'form': NameForm1(), }, request=request) })
    else:
        form = NameForm()
    return render(request, 'registers/detail.html', {'form': form})

def endreg(request):
    name_phone = request.session.get("phone", " ")
    name_code = request.session.get("code", " ")
    if request.method == 'POST':
        form = NameForm1(request.POST)
        if form.is_valid():
            code_use = form.cleaned_data.get("key")
            if (name_code == code_use):
                try:
                    user = Registration.objects.get(phone=name_phone)
                    user.verification = True
                    user.save() 
                    return JsonResponse({ 'form2': 'thanks')
                except:
                    return JsonResponse({ 'form2': 'error')
    else:
        form = NameForm1()
    return render(request, 'registers/endreg.html', {'form': form})

и ajax код

$(document).ready(function() 
    { $("#my_form").submit(function(event) 
        { event.preventDefault(); 
            $this = $(this); 
            $.ajax({ 
                type: "POST",
                data: $this.serialize(), 
                success: function(data) 
                { console.log(data); 
                    var parent=$("#my_form").parent();
                    parent.html(data.form1); 
                }, 
                error: function(data) 
                { console.log(data);
                    $this.html(data); 
                } 
            }); 
        }); 
});

$(document).ready(function() 
  { $("#my_form2").submit(function(event) 
    { event.preventDefault(); 
      $this = $(this); 
      $.ajax({ 
        type: "POST",
        data: $this.serialize(), 
        success: function(data) 
        { console.log(data); 
          var parent=$("#my_form2").parent();
                    parent.html(data.form2); 
        }, 
        error: function(data) 
        { 
          alert('Got an error dude');
        } 
      }); 
    }); 
});

После заполнения и отправки 1 формы все в порядке, 2 появляется в 2 в действии = "{% url 'endreg '%} "endreg. html

<form action="{% url 'endreg' %}" method="post" autocomplete="off" id="my_form2">
    {% csrf_token %}
    <div class="verification" >
       <div class="ver">
        {{form}}
       </div>
      <input type="submit" value="{%trans 'submit' %}" class="btn1" > 
     </div>  
</form>

Тогда начинаются проблемы. После ввода кода меня перенаправляют на страницу 127.0.0.1:8000/endreg. Но в то же время статус изменяется, если введен правильно. Как сделать так, чтобы сообщение об успешном или неправильном коде появилось на той же странице

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...