我正在尝试创建客户端验证,以查看注册时是否已使用用户名。此验证应该在用户提交表单之前进行。
为了实现这一点,我使用的是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验证插件一起工作。我该怎么做呢?
答案 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())