Afin de connecter les utilisateurs après les avoir enregistrés, j'ai défini manuellement la propriété user.backend. Cela fonctionne normalement dans mes vues. Dans ce cas, j'essaie d'enregistrer l'utilisateur via AJAX. Une AttributeError est générée.
Voici mon code :
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()
EDIT-- VOICI L'AJAX. IL SEMBLE ASSEZ STANDARD
//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();
});
Ce code exact fonctionne dans les vues non-ajax pour moi. Qu'est-ce que ça donne ?
Merci
0 votes
Pouvez-vous ajouter votre code ajax également ?
0 votes
Utilisez-vous
django.contrib.auth
forUser
? Si oui, alors l'erreur est parfaitement valable, carUser
ne possède pas cet attribut. Les deux seules façons de l'ajouter àUser
sont par le biais d'un profil, auquel cas il seraitUser.get_profile().backend
ou par le biais d'une sous-classe, auquel cas il seraitCustomUser.backend
. Si vous n'utilisez pasdjango.contrib.auth
postez le code de votreUser
modèle.0 votes
J'utilise django.contrib.auth. Cependant, votre remarque n'est pas exacte. Voir ce message ( stackoverflow.com/questions/5775268/ ). Vous pouvez directement définir un attr "backend" sur le modèle User. Au-delà de ce fil de discussion, j'ai implémenté cette fonctionnalité avec succès dans d'autres vues. Je pense que c'est l'ajax qui est en jeu ici.