0
在編寫視圖時,顯然是一種很好的習慣 - 如果不是強制的 - 使用@login_required裝飾器。Django @login_required裝飾器
但 - 只爲
from django.contrib.auth.models import User
用戶進行認證檢查,我想做到的是還檢查用戶是否存在爲用戶配置。 在我的應用程序中,例如,我有一些UserProfiles。所有都有與他們有關的用戶對象,當然。 但我也有其他用戶沒有UserProfile。這樣的用戶是我的管理員用戶。 我想確保請求來自擁有UserProfiles(並且已通過身份驗證)的用戶。
有沒有辦法改變裝飾器來支持它? 目前我只寫我自己的代碼來做到這一點:
def user_login(request):
context = context = RequestContext(request)
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
try:
user = authenticate(username=username, password=password)
user_profile = user.userprofile
except (ObjectDoesNotExist,AttributeError) as e:
# username and password only prompted for debug purposes.
error_msg = "Invalid login details: {0}, {1}".format(username, password)
print (error_msg)
# print (request)
# return HttpResponse("Invalid login details supplied.")
return render(request, 'bz/login.html', {'error_msg': error_msg})
if user and user_profile:
if user.is_active:
login(request,user)
# return HttpResponse("You're now logged in as " + username)
# return render(request, 'bz/index.html', {})
return render(request, 'bz/index.html', {'userprofile': user_profile})
# return HttpResponseRedirect('bz/login.html')
else:
error_msg = "Your account is disabled"
print (error_msg)
return render(request, 'bz/login.html', {'error_msg': error_msg})
# return HttpResponse(error_msg)
else:
error_msg = "Invalid login details: {0}, {1}".format(username, password)
print (error_msg)
return render(request, 'bz/login.html', {'error_msg': error_msg})
# return HttpResponse("Invalid login details supplied.")
else:
if request.user.is_authenticated():
return render(request, 'bz/index.html', {})
else:
return render(request, 'bz/login.html', {})
你的投入將非常感謝。 謝謝。