H_MZ 2020-02-08 09:24 采纳率: 0%
浏览 107

django + ajax发送表格

and at page i'm not see csrdI try after receiving one form to get another 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})

and 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); 
                } 
            }); 
        }); 
});

I am facing a CSRF token missing or incorrect problem. Because it is not transferred to form 2. how can I transfer this token to a new form

detatil.html it's html first page

{% 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 %}

it's html secon page 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 token is on two pages, but when I look at the code in the browser, it does not appear when I add 2 forms using ajax

  • 写回答

1条回答 默认 最新

  • weixin_33734785 2020-02-08 11:57
    关注

    since you are using render_to_string, you need to pass request object to render_to_string. You can acheive it by:

    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()}, request=request) })
        else:
            form = NameForm()
        return render(request, 'registers/detail.html', {'form': form})
    
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料