views.py中的代码
def custom_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('main')
else:
return redirect('login')
else:
user = AuthenticationForm()
return render(request, 'index.html', {'form': user})
@login_required
def main(request):
return render(request, 'main.html')
urls.py
urlpatters =[url(r'^$', views.custom_login, name='login'),
url(r'^main', views.main, name='main')]
在settings.py中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',]
LOGIN_URL = 'login'
LOGIN_REDIRECT_URL = 'main'
如果我没有将login_required装饰器放在main上,我可以重定向到main . 但如果我使用login_required装饰器,我登录后会被重定向回登录页面 http://localhost:9000/sample_app/?next=/sample_app/main
我正在使用django的python3
UPDATE 我犯了一个愚蠢的错误,我在我的设置中启用了这些设置 . SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
这是拒绝正常的http请求 . 但它使用SSL工作
4 回答
可能的错误 . =>您的用户是否有效?如果没有尝试激活帐户 .
=>尝试使用电子邮件进行验证,例如
=>尝试处理“下一个”参数
希望这可以帮助 .
I think your user in not active that you are using in authenticate method.
验证方法检查用户是否有效 . 如果用户未激活,则它将返回None,如果用户激活,则返回User实例 .
您需要在视图中更改此行,
至,
我犯了一个愚蠢的错误,我在我的设置中启用了这些设置 .
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
这是拒绝正常的http请求 . 禁用它在http中工作 . 但它使用SSL工作