django + ajax отправить форму - PullRequest
0 голосов
/ 08 февраля 2020

и на странице я не вижу csrd Я пытаюсь после получения одной формы получить другую views.py

def get_name(request):
    if request.method == 'POST':
        user_code = generate_code(8)
        subject = 'ver code' 
        message = user_code
        phone = request.POST['phone']
        form = NameForm(request.POST)
        if form.is_valid():
            Registration.objects.create(fio=request.POST['fio'],mail=request.POST['mail'])
            send_mail(subject, message,settings.EMAIL_HOST_USER,[mail],fail_silently=False)

        return JsonResponse({ 'form1': render_to_string( 'registers/endreg.html', {'form': NameForm1() } ) })
    else:
        form = NameForm()
    return render(request, 'registers/detail.html', {'form': form})

def endreg(request):
if request.method == 'POST':
    form = NameForm1(request.POST)
    if form.is_valid():
        code_use = form.cleaned_data.get("key")
        try:
            user = Registration.objects.get(code=code_use)
            user.verification = True
            user.save() 
            messages.warning(request, u'thanks.')
        except:
            messages.warning(request, u'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); 
                    $this.html(data.form1); 
                }, 
                error: function(data) 
                { console.log(data); 
                } 
            }); 
        }); 
});

У меня возникла проблема с отсутствующим или некорректным токеном CSRF. Потому что он не переносится в форму 2. как я могу перевести этот токен в новую форму

detatil. html это html первая страница

{% extends 'base.html' %}
{% load i18n %}
{% block content%}
<div class="main-form">
<form action="" method="post" autocomplete="off" id="my_form">
  {% csrf_token %}
  <div class="contact-form" >
   <h1>{%trans 'Регистрация' %}</h1>
   <div class="txtb">{{form.fio.label}} {{form.fio}}{{form.fio.help_text}}</div>
   <div class="txtb"> {{form.purpose.label}}{{form.purpose}}</div>
   <div class="container" id="none">{{form.tso.label}}{{form.tso}}</div>
   <div class="txtb">{{form.phone.label}} {{form.phone}}{{form.phone.help_text}}{{form.phone.errors}}</div> 
   <div class="txtb"> {{form.number_car.label}}{{form.number_car}}</div> 
   <div class="txtb"> {{form.date_visit.label}}{{form.date_visit}}</div>  
   <div class="txtb"> {{form.captcha.label}}<br>{{form.captcha}}{{form.captcha.errors}}</div>
   <input type="submit" value="{%trans 'send' %}" class="btn" id="btn">   
  </div>
</form>
</div>
{% endblock %}

это html секунда endreg. html

    {% load i18n %}
{% block content%}


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

токен csrf находится на двух страницах, но когда я смотрю на код в браузере, он не появляется, когда я добавляю 2 формы, используя ajax

1 Ответ

0 голосов
/ 08 февраля 2020

, поскольку вы используете render_to_string, вам нужно передать request объект render_to_string. Вы можете достичь этого:

def get_name(request):
    if request.method == 'POST':
        user_code = generate_code(8)
        subject = 'ver code' 
        message = user_code
        phone = request.POST['phone']
        form = NameForm(request.POST)
        if form.is_valid():
            Registration.objects.create(fio=request.POST['fio'],mail=request.POST['mail'])
            send_mail(subject, message,settings.EMAIL_HOST_USER,[mail],fail_silently=False)

        return JsonResponse({ 'form1': render_to_string('registers/endreg.html', {'form': NameForm1()}, <b>request=request</b>) })
    else:
        form = NameForm()
    return render(request, 'registers/detail.html', {'form': form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...