【发布时间】:2011-08-27 10:41:39
【问题描述】:
为了在注册用户后登录,我手动设置了 user.backend 属性。它通常在我看来有效。在这种情况下,我试图通过 AJAX 注册用户。它正在引发 AttributeError。
这是我的代码:
def register_async(request):
if request.method=='POST':
userform=MyUserCreationForm(request.POST)
if userform.is_valid():
#username of <30 char is required by Django User model. I'm storing username as a hash of user email
user=userform.save(commit=False)
user.username=hash(user.email)
user.backend='django.contrib.auth.backends.ModelBackend'
user.save()
auth.login(request,user)
user_status=1
user_fname=user.first_name
user_data=[{'user_status':user_status, 'user_fname':user_fname}]
json_data=json.dumps(user_data)
response=HttpResponse()
response['Content-Type']="text/javascript"
response.write(json_data)
return response
else:
user_data=[{'user_status':"0"}]
json_data=json.dumps(user_data)
response=HttpResponse()
response['Content-Type']="text/javascript"
response.write(json_data)
return response
else:
return HttpResponse()
编辑——这里是 AJAX。看起来很标准
//ajax registration.
$('input#register_submit').click(function(event){
$(this).attr('disabled','disabled');
$('<div class="register-animation"><img src="{{site}}media/ajax-loader3.gif"/></div>').appendTo('#register_modal_btn');
$.post("/register/", $('div#register_side form').serialize(),
function(data){
$.each(data,function(){
if(this.user_status==1){
$('.register-animation').remove();
$('.right_section .top').html('<ul><li class="sep_nav">Hi, '+ this.user_fname + '</li><li class="sep+nav"><a href="http://nabshack.com/logout/">Log Out</a></li><li class="refar_friend"><a href="http://nabshack.com/referral/">Refer a friend and get $50</a></li></ul>');
$('#post_login_modal').dialog("close");
$('a.login').unbind('click');
$('li a.account').unbind('click');
}
else{
$('input#register_submit').removeAttr('disabled');
$('.register-animation').remove();
window.location='{{site}}register';
}
});
},'json');
return false;
event.stopPropagation();
});
对于我来说,这个确切的代码几乎可以在非 ajax 视图中使用。什么给了?
谢谢
【问题讨论】:
-
你也可以添加你的ajax代码吗?
-
您是否将
django.contrib.auth用于User?如果是这样,那么该错误是完全有效的,因为User没有该属性。将它添加到User的唯一两种方法是通过配置文件,在这种情况下它将是User.get_profile().backend或通过子类,在这种情况下它将是CustomUser.backend。如果您不使用django.contrib.auth,请发布您的User模型的代码。 -
我正在使用 django.contrib.auth。但是,您的观点并不准确。见这篇文章(stackoverflow.com/questions/5775268/…)。您可以直接在 User 模型上设置“后端”属性。除了那个线程之外,我还在其他视图中成功地实现了这个特性。我认为这是 ajax 在这里发挥作用。
标签: django authentication django-models django-authentication