django + ajax post form

问题描述 投票:0回答:1

i tru与jango一起使用ajax。有2种形式。第一个带有名称和邮件。以及邮件中附带确认码的快速表格。views.py

def get_name(request):
    if request.method == 'POST':
        user_code = generate_code(8)
        subject = 'code' 
        message = user_code
        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})

模板(detail.html)

    <form action="" method="post" autocomplete="off" id="my_form">
  {% csrf_token %}
  <div class="contact-form" >
   <h1>{%trans 'Registers' %}</h1>
   <div class="txtb">{{form.fio.label}} {{form.fio}}{{form.fio.help_text}}</div>
   <div class="txtb">{{form.phone.label}} {{form.phone}}{{form.phone.help_text}}</div>
   <input type="submit" value="{%trans 'send' %}" class="btn" id="btn">   
  </div>
</form>

我正在挂活动以提交此表单

$(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); 
                } 
            }); 
        }); 
});

ajax请求有效并获取我的2个表单(endreg.html)

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

views.py

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

现在是问题。为什么当我以第二种形式输入代码时,将应用代码并重定向到localhost:8000 / endreg。而且我看到了用代码填充的同一表格。我希望看到社区有关成功或失败的信息

django ajax
1个回答
0
投票

看起来您的表单无效,这就是为什么它使用输入的数据加载同一页面的原因。您应该处理form.is_valid()的故障情况。并且也不要添加用于处理异常的空白exception块。

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 Registration.DoesNotExist as e:  # Handling Exception for get()
                print("NOT FOUND", e)
                messages.warning(request, u'error.')
        else:  # if form is not valid
            messages.warning(request, u'not valid.')
    else:
        form = NameForm1()
    return render(request, 'registers/endreg.html', {'form': form})

在HTML中,您也可以呈现{{ form.errors }}

© www.soinside.com 2019 - 2024. All rights reserved.