Django写的LoginView,登录成功后无法跳转回原页面,求助!

2013-10-23 10:33:53 +08:00
 melaozhu
用Django写了个LoginView,可是在登录后跳转上遇到了问题。这句总是获取不到REDIRECT_FIELD_NAME对应的值,以至于无法跳转回之前的页面。

问题语句:

redirect_to = self.request.REQUEST.get(REDIRECT_FIELD_NAME, '')

=============================================

我的完整代码参见:

https://gist.github.com/laozhu/7111594

参照了这个项目:

https://github.com/stefanfoulis/django-class-based-auth-views

顺带问下,如果希望对于已登录用户不显示登录表单,而是直接redirect到主页,我的代码需要做怎样的修改。求各路大婶出手相助。
6709 次点击
所在节点    Python
8 条回复
melaozhu
2013-10-23 10:43:54 +08:00
这样的URL

http://mydomain.com/login?next=/admin/staff

登录后不能跳转回

http://mydomain.com/admin/staff


没人在啊。。。


会不会是我的urls.py定义有问题

url(
regex = r'^login$',
view = LoginView.as_view(),
name = 'login'
),

我是这样定义的。
aggron
2013-10-23 11:07:29 +08:00
已登录用户不显示登录表单,在get方法里面加
if request.user.is_authenticated():
return redirect('/')

REDIRECT_FIELD_NAME 默认应该就是获取URL中的`next` parameter,按照你给的URL格式应该是没问题的,或许你看下LoginForm中的代码有没redirect之类的代码。
你贴的urls.py是全的吗,没看到/admin/staff相关的定义
melaozhu
2013-10-23 11:22:31 +08:00
不好意思,还有一部分没贴。

# urls.py
urlpatterns = patterns('',
url(r'^admin/staff', include('auth2.urls')),
)

# auth2/urls.py
urlpatterns = patterns('',
url(
regex = r'^$',
view = StaffListView.as_view(),
name = 'staff-list',
),
)

我现在就是没法获取到next后面的地址,我是这样定义的
from django.contrib.auth.forms import AuthenticationForm
class LoginForm(AuthenticationForm):
error_messages = {}
username = {}
password = {}
只是冲定义了这三个东西,其它函数未动,貌似AuthenticationForm中只没有redirect之类语句。

我现在怀疑get_success_url()函数中是否可以获取到REDIRECT_FIELD_NAME的值。
melaozhu
2013-10-23 11:37:07 +08:00
@aggron 兄才
from django.core.urlresolvers import reverse
def get(self, request, *args, **kwargs):
self.set_test_cookie()
if self.request.user.is_authenticated:
return reverse('home')
return super(LoginView, self).get(self, request, *args, **kwargs)

我加了这段后,报错了。。。
Exception Type: AttributeError
Exception Value:
'str' object has no attribute 'has_header'
aggron
2013-10-23 11:41:38 +08:00
reverse 返回的只是一个str类型的url
应该用return redirect(reverse('home'))
melaozhu
2013-10-23 11:45:00 +08:00
@aggron 这下对了,非常感谢!
aggron
2013-10-23 13:46:14 +08:00
BTW: is_authenticated是个方法,不是property,要用user.is_authenticated():
daoluan
2013-10-23 15:36:49 +08:00
重定向回去就好了. redirect

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/86572

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX