Django写的LoginView,登录成功后无法跳转回原页面,求助! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
melaozhu
V2EX    Python

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

  •  
  •   melaozhu
    laozhu 2013-10-23 10:33:53 +08:00 7292 次点击
    这是一个创建于 4425 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用Django写了个LoginView,可是在登录后跳转上遇到了问题。这句总是获取不到REDIRECT_FIELD_NAME对应的值,以至于无法跳转回之前的页面。

    问题语句:

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

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

    我的完整代码参见:



    参照了这个项目:

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

    顺带问下,如果希望对于已登录用户不显示登录表单,而是直接redirect到主页,我的代码需要做怎样的修改。求各路大婶出手相助。
    8 条回复    1970-01-01 08:00:00 +08:00
    melaozhu
        1
    melaozhu  
    OP
       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
        2
    aggron  
       2013-10-23 11:07:29 +08:00   1
    已登录用户不显示登录表单,在get方法里面加
    if request.user.is_authenticated():
    return redirect('/')

    REDIRECT_FIELD_NAME 默认应该就是获取URL中的`next` parameter,按照你给的URL格式应该是没问题的,或许你看下LoginForm中的代码有没redirect之类的代码。
    你贴的urls.py是全的吗,没看到/admin/staff相关的定义
    melaozhu
        3
    melaozhu  
    OP
       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
        4
    melaozhu  
    OP
       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
        5
    aggron  
       2013-10-23 11:41:38 +08:00
    reverse 返回的只是一个str类型的url
    应该用return redirect(reverse('home'))
    melaozhu
        6
    melaozhu  
    OP
       2013-10-23 11:45:00 +08:00
    @aggron 这下对了,非常感谢!
    aggron
        7
    aggron  
       2013-10-23 13:46:14 +08:00
    BTW: is_authenticated是个方法,不是property,要用user.is_authenticated():
    daoluan
        8
    daoluan  
       2013-10-23 15:36:49 +08:00
    重定向回去就好了. redirect
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3348 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 05:00 PVG 13:00 LAX 21:00 JFK 00:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86