如何在jquery验证插件中传递Django csrf令牌?

时间:2015-09-29 07:12:28

标签: jquery python django validation

我正在尝试创建客户端验证,以查看注册时是否已使用用户名。此验证应该在用户提交表单之前进行。

为了实现这一点,我使用的是jquery验证插件:http://jqueryvalidation.org/

我遇到的问题是我收到403错误:

POST example.com/check-username 403 (FORBIDDEN)

这是客户端验证的代码: $(document).ready(function(){

      $('#register-form').validate({ // initialize the plugin
        rules: {
          username: {
            required: true,
            remote: {
              url: "/check-username",
              type: "post",
              data: {
                csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value,
                username: function() {
                  return $( "#id_username" ).val();
                }
              }
            }
          }
        }
      });
});

这是views.py中的验证函数:

def check_username(request):
    username = request.POST.get('username', None)

    if not username:
        return HttpResponseBadRequest("Invalid username")
    return User.objects.exists(username=username) 

我怀疑这是一个csrf错误,但我不太清楚如何与jquery验证插件一起工作。我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

您是否确实在表单中输出了CSRF令牌?

{% csrf_token %}

需要在您的< form>之间标签

我执行此操作后,您的代码对我有用,并修改了check_username视图以返回正确的HTTP响应。

from django.http import HttpResponse
def check_username(request):
    username = request.POST.get('username', False)

    if not username:
        return HttpResponseBadRequest("Invalid username")
    return HttpResponse(User.objects.filter(username=username).exists())