【问题标题】:django + ajax post formdjango + ajax 发布表单
【发布时间】:2020-02-10 09:28:33
【问题描述】:

我确实使用 ajax 和 django。 有2种形式。第一个带有姓名和邮件。以及邮件中带有确认码的快速表格。 视图.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() 
                JsonResponse({'message': 'thanks.'})
            except:
                JsonResponse({'error': 'erorr.'})
    else:
        form = NameForm1()
    return render(request, 'registers/endreg.html', {'form': form})

和第二个 ajax。

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

现在是问题。为什么当我以第二种形式输入代码时,会应用代码并使用 json 重定向到 localhost:8000/endreg 。

【问题讨论】:

    标签: django ajax


    【解决方案1】:

    看起来您的表单无效,这就是它使用输入的数据加载同一页面的原因。您应该处理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.')
                form = NameForm1() # reset the form
        else:
            form = NameForm1()
        return render(request, 'registers/endreg.html', {'form': form})
    

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

    【讨论】:

    • 当我输入正确的代码时,我会重定向到 endreg 页面,我会看到表格和题词,谢谢。如何删除表格
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多