django 版本升级后我无法登录
I'm not able to login after django version upgrade
我正在尝试将客户端的旧代码从 django 1.5 升级到 1.8。该项目使用 django.contrib.auth.views.login
来验证登录。 urls.py
如下所示:
urlpatterns = patterns('',
url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'accounts/login.html', 'authentication_form': LoginForm}, name="login"),
url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'template_name': 'accounts/logged_out.html'}, name="logout"),
)
这里是 LoginForm
class:
class LoginForm(forms.Form):
username = forms.CharField(label=_("Username"), max_length=120)
password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
def __init__(self, request=None, *args, **kwargs):
self.request = request
self.user_cache = None
super(LoginForm, self).__init__(*args, **kwargs)
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if self.request:
if not self.request.session.test_cookie_worked():
raise forms.ValidationError(_("Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."))
return self.cleaned_data
这里是中间件列表:
MIDDLEWARE_CLASSES = (
'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',
'django.middleware.security.SecurityMiddleware',
'apps.facebook.middleware.FacebookMiddleware',
)
升级前可以登录,升级后无法登录。我收到以下 非字段 错误:
Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in.
如果我降级到 django 1.5,我可以再次登录。我该如何解决这个问题以及为什么登录在 django 1.8 中不起作用。
从您的登录表单中删除 cookie 测试,这不是必需的。支票已从 Django login form in Django 1.7 (release notes).
中删除
您启用了 CSRF 保护,这已经确保启用了 cookie。
不清楚为什么要定义自己的登录表单,而不是使用内置表单。使用您自己的表单意味着您会遇到这样的问题,并且会错过 confirm_login_allowed
挂钩等新功能。
我正在尝试将客户端的旧代码从 django 1.5 升级到 1.8。该项目使用 django.contrib.auth.views.login
来验证登录。 urls.py
如下所示:
urlpatterns = patterns('',
url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'accounts/login.html', 'authentication_form': LoginForm}, name="login"),
url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'template_name': 'accounts/logged_out.html'}, name="logout"),
)
这里是 LoginForm
class:
class LoginForm(forms.Form):
username = forms.CharField(label=_("Username"), max_length=120)
password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
def __init__(self, request=None, *args, **kwargs):
self.request = request
self.user_cache = None
super(LoginForm, self).__init__(*args, **kwargs)
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if self.request:
if not self.request.session.test_cookie_worked():
raise forms.ValidationError(_("Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."))
return self.cleaned_data
这里是中间件列表:
MIDDLEWARE_CLASSES = (
'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',
'django.middleware.security.SecurityMiddleware',
'apps.facebook.middleware.FacebookMiddleware',
)
升级前可以登录,升级后无法登录。我收到以下 非字段 错误:
Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in.
如果我降级到 django 1.5,我可以再次登录。我该如何解决这个问题以及为什么登录在 django 1.8 中不起作用。
从您的登录表单中删除 cookie 测试,这不是必需的。支票已从 Django login form in Django 1.7 (release notes).
中删除您启用了 CSRF 保护,这已经确保启用了 cookie。
不清楚为什么要定义自己的登录表单,而不是使用内置表单。使用您自己的表单意味着您会遇到这样的问题,并且会错过 confirm_login_allowed
挂钩等新功能。