我正在使用jQuery在用户注册期间进行一些内联表单验证,以通过检查是否在发布后防止表单错误:
我们的想法是在提交表单之前向用户提供反馈,以防止受挫。代码位于底部。
感谢您的意见。
我已经定义了以下视图(我从一些片段中获取,但无法回想起在哪里):
def is_field_available(request):
if request.method == "GET":
get = request.GET.copy()
if get.has_key('username'):
name = get['username']
if User.objects.filter(username__iexact=name) or \
UserProfile.objects.filter(display_name__iexact=name):
return HttpResponse(False)
else:
return HttpResponse(True)
if get.has_key('email'):
email = get['email']
if User.objects.filter(email__iexact=email):
return HttpResponse(False)
else:
return HttpResponse(True)
return HttpResponseServerError("Requires username or email to test")
以下是jQuery代码示例:
$.get('is-user-name-available/', { email: $(this).val() },
function(data, status){
if(data == "True"){
$input.fieldValid();
} else {
$input.fieldInvalid("This email address has already been registered. Try another or recover your password.");
}
});
编辑:更新了代码并重新解释了我的问题。 [ 10/07/09
答案 0 :(得分:2)
请参阅http://www.djangosnippets.org/snippets/771/ - 您可以将视图限制为ajax请求。执行跨域ajax的唯一方法是jsonp,您在视图中不支持。
答案 1 :(得分:1)
是的,这是一个潜在的安全问题,但不是太大问题:只需确保您的代码是安全的,并且始终返回不会泄露应隐藏的信息的内容。
如果有人在浏览器中输入,那就没什么不好了: example.com/account/verify_username/?username=admin (虽然我建议只在这里使用POST)
那应该做些什么: 1)确认您需要的所有参数都是正确的格式 2)可能验证请求来自何处 3)确保处理代码中可能发生的所有异常 4)不要忘记单元测试 - 为此尝试将逻辑NOT放在视图中,但在某种方法中:)