21
如何在Django中以編程方式登錄用戶?我有用戶的用戶名和密碼。有沒有讓我登錄他的方法?如何以編程方式驗證Django中的用戶?
如何在Django中以編程方式登錄用戶?我有用戶的用戶名和密碼。有沒有讓我登錄他的方法?如何以編程方式驗證Django中的用戶?
沒有其他方式比「編程」。當然,這是documented。
from django.contrib.auth import authenticate, login
user = authenticate(username = username, password = password)
if user is not None:
login(request, user)
Alsways時要小心編程登錄用戶,你可能會得到錯誤'user has no attribute "backend"
。如果以前沒有發生過,則必須設置後端。 Project that uses this和一些示例代碼:
def splash_register(request):
if request.session.get('beta'):
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()
username=user.username
password=str(userform.cleaned_data['password'])
auth.login(request, user)
request.session['first_visit']=True
return HttpResponseRedirect("/")
else:
userform=MyUserCreationForm(request.POST)
return render_to_response("website/splash_register.html", {'userform':userform}, context_instance=RequestContext(request))
return render_to_response("website/splash_register.html", context_instance=RequestContext(request))
else:
return HttpResponseRedirect('/splash/')
重新修訂版本評論:PEP 8](http://www.python.org/dev/peps/pep-0008/#other-recommendations)建議各地省略空間' ='在關鍵字參數中,但當然你可以自由地做任何你想做的事情。 – icktoofay
@icktoofay我很清楚PEP 8的建議。 (這不是一個好的建議) –
@CatPlusPlus你真的認爲它是一個不好的建議嗎?這很奇怪你。 – jdg