Created
October 23, 2013 02:22
-
-
Save laozhu/7111594 to your computer and use it in GitHub Desktop.
无法获取REQUEST中REDIRECT_FIELD_NAME对应的值。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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