最近在学django,不过遇到一个奇怪的问题:
登陆成功后,无法正确显示登陆后的view
这个是我的login view:
def login(request):
"""
View of for users' logging
"""
if request.method == 'POST':
userform = UserForm(request.POST)
if userform.is_valid():
username = userform.cleaned_data['username']
password = userform.cleaned_data['password']
confirm = UserProfile.objects.filter(username__exact=username, password__exact=password)
positive = HttpResponseRedirect(reverse('accounts:index'))
negative = HttpResponseRedirect(reverse('accounts'))
return positive if confirm else negative
else:
userform = UserForm()
dict_pass = {'userform': userform}
return render(request, 'accounts/login.html', dict_pass)
认证通过后应该登陆的view:
@login_required
def index(request):
dict_pass = {}
return render(request, 'accounts/index.html', dict_pass)
如果不用装饰,那么是可以正常跳转的,但是用了装饰器就无法正常跳转到index页面了,用户名密码也没有输错,包导入也没有问题。
问之前我查了下相关的话题,没有人遇到过这种问题啊,都是直接吧login_required放上去就可以了,举的例子也都是这样的,这就奇怪了。
Lihat dokumentasi @login_required dan kod sumber: https://docs.djangoproject.co...
Untuk menyebut secara ringkas, pengesahan @login_required ialah request.user.is_authenticated. Contoh rasmi menggunakan sesi sesi, dan maklumat log masuk telah dimasukkan ke dalam sesi apabila log masuk ke paparan.
Selepas log masuk berjaya, gunakan
django.contrib.auth.login(request, user)
untuk menyimpan pengguna ke dalam sesi