Django Ajax 表单工作但抛出 500(内部服务器错误)

Posted

技术标签:

【中文标题】Django Ajax 表单工作但抛出 500(内部服务器错误)【英文标题】:Django Ajax Form Works but Throws 500 (Internal Server Error) 【发布时间】:2017-04-23 01:42:52 【问题描述】:

我已经对此进行了彻底的研究,但还没有找到完成表格最后一部分所需的确切内容。

我的页脚中有一个简单的 2 字段表单,用于订阅时事通讯。我正在使用inclusion_tag,因为我需要在每一页上都包含该表单。

表格有效;有几个障碍,为了争论,它有效,我点击提交,电子邮件被发送给我。问题是我在 ajax url 的控制台中得到了一个500(internal server error)。我假设它实际上不应该重定向到 url,而只是处理表单。以下是我的代码;我希望有人可以轻松指出我的问题。谢谢。

包含标签

@register.inclusion_tag('includes/cta_form.html', takes_context=True)
def footer_newsletter_signup(context):
    title = 'Newsletter Signup'
    form = CTASignupForm()
    context = 
        'form': form,
        'title': title,
    
    return context

Ajax

$('#sendSignupForm').click(function (e) 
  e.preventDefault();
  var mForm = $('#signupForm').serialize();
  console.log(mForm);
  $.ajax(
    type: 'POST',
    url: '% url 'pages:cta_signup' %',
    data: mForm,
    success: function (data) 
      $("input").val('')
    ,
    error: function (data) 
      $("input").addClass('error')
    
  )
)

cta_form.html

<form action="% url 'pages:cta_signup' %" method="POST" id="signupForm">
  % csrf_token %
   form.name 
   form.email 
  <button class="btn btn-black no-margin-bottom btn-small" type="submit" id="sendSignupForm">Submit</button>
</form>

查看

def cta_signup(request):
    if request.method == "POST":
        form = CTASignupForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            subject = 'This is a response from Soledad Footer Signup Form'
            from_email = settings.DEFAULT_FROM_EMAIL
            recipient_list = [from_email, 'charles@netfinity.net']
            ctx = 
                'subject': subject,
                'name': name,
                'email': email
            

            message = get_template('email_forms/cta_signup_email.html').render(Context(ctx))
            msg = EmailMessage(subject, message, from_email=from_email, to=recipient_list)
            msg.content_subtype = 'html'
            msg.send()

            messages.success(request, "Thank you, we received your message")

        if form.errors:
            json_data = json.dumps(form.errors)
            return HttpResponseBadRequest(json_data, content_type='application/json')
    else:
        raise Http404

控制台错误截图

【问题讨论】:

【参考方案1】:

视图必须始终返回响应。如果表格有效,您不需要;这是服务器错误。

在 is_valid 块的末尾返回 HttpResponse()

【讨论】:

以上是关于Django Ajax 表单工作但抛出 500(内部服务器错误)的主要内容,如果未能解决你的问题,请参考以下文章

YUI.io (ajax) 和 Django - 更新只能工作一次,YUI 无法再次找到表单

Django Rest Framework,ajax POST 工作,但 PATCH 抛出 CSRF 失败:CSRF 令牌丢失或不正确

角度处理json对象编译但抛出错误

JWT 解密,但抛出 mac check failed 错误

带有 ***Service 的 Android 防火墙。响应已传递,但抛出 SocketTimeoutException

尽管未设置但抛出 E_STRICT 消息