Skip to content

Instantly share code, notes, and snippets.

@laozhu
Created October 23, 2013 02:22
Show Gist options
  • Select an option

  • Save laozhu/7111594 to your computer and use it in GitHub Desktop.

Select an option

Save laozhu/7111594 to your computer and use it in GitHub Desktop.
无法获取REQUEST中REDIRECT_FIELD_NAME对应的值。
from django.conf import settings
from django.contrib.auth import login, REDIRECT_FIELD_NAME
from .forms import LoginForm, ResetPasswordForm
from django.utils.decorators import method_decorator
from django.views.generic import FormView
from django.views.decorators.cache import never_cache
from django.views.decorators.csrf import csrf_protect
class LoginView(FormView):
template_name = 'login.html'
form_class = LoginForm
@method_decorator(csrf_protect)
@method_decorator(never_cache)
def dispatch(self, *args, **kwargs):
return super(LoginView, self).dispatch(*args, **kwargs)
def set_test_cookie(self):
self.request.session.set_test_cookie()
def check_and_delete_test_cookie(self):
if self.request.session.test_cookie_worked():
self.request.session.delete_test_cookie()
return True
return False
def get(self, request, *args, **kwargs):
self.set_test_cookie()
return super(LoginView, self).get(self, request, *args, **kwargs)
def form_valid(self, form):
self.check_and_delete_test_cookie()
login(self.request, form.get_user())
return super(LoginView, self).form_valid(form)
def form_invalid(self, form):
self.set_test_cookie()
return super(LoginView, self).form_invalid(form)
def get_context_data(self, **kwargs):
context = super(LoginView, self).get_context_data(**kwargs)
context['second_form'] = ResetPasswordForm
return context
def get_success_url(self):
if self.success_url:
redirect_to = self.success_url
else:
# 问题已定位,这里无法获取next的值,求解
redirect_to = self.request.REQUEST.get(REDIRECT_FIELD_NAME, '')
host_name = urlparse(redirect_to)[1]
dir_name = urlparse(redirect_to)[2]
if not redirect_to:
redirect_to = settings.LOGIN_REDIRECT_URL
elif dir_name.lower() == '/logout':
redirect_to = settings.LOGIN_REDIRECT_URL
elif host_name and host_name != self.request.get_host():
redirect_to = settings.LOGIN_REDIRECT_URL
return redirect_to
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment