登录重定向到另一个应用视图

时间:2014-09-05 09:55:13

标签: python django django-templates

这是我的项目结构

project
    app
    login
    manage.py

成功登录后,我希望我的用户将重定向到localhost:8000/app,但目前它会重定向到http://localhost.com:8000/accounts/login/?next=/,因为我将其设置为我的登录视图

def login_view(request):
    if request.POST and form.is_valid():
        user = form.login(request)
        if user:
            login(request, user)
            return render_to_response('app/home.html',RequestContext)
        else:
            return HttpResponse('disabled account')
    return render_to_response('login.html', form ,RequestContext)

我无法使用HttpResponseRedirect(reverse('app.views.dashboard')),因为信息中心视图未退出同一登录 views.py

如果我导入像

from app import views as app_dashboardfrom app import dashboard

我收到以下错误

  

反向'app.views.dashboard',找不到参数'()'和关键字参数'{}'。尝试了0种模式:[]

最后的注释,下面是我的登录网址

<a href="{% url "django.contrib.auth.views.login" %}?next={{request.path}}" id="signIn">Sign in</a>

加了:

应用程序/ urls.py

urlpatterns = patterns('app.views',
    (r'^$', 'dashboard_view'),

项目/ urls.py

url(r"^", include("app.urls",)),
(r'^accounts/login/$', 'django.contrib.auth.views.login'),
(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'next_page' : '/accounts/login'}),

2 个答案:

答案 0 :(得分:0)

第一点:使用已命名的网址,参见https://docs.djangoproject.com/en/1.6/topics/http/urls/#naming-url-patterns - 这可以解决您的reverse问题。

第二点:您显示自己的登录视图的代码,但您的url.py和模板的摘录都引用django.contrib.auth.views.login。另外,您在模板的网址中指定了next参数,因此django.contrib.auth.views.login会将您重定向到那里,如FineManual(tm)中所述:

  

如果通过POST使用用户提交的凭据进行调用,则会尝试将用户登录。   如果登录成功,视图将重定向到next中指定的URL。   (...)

最后:如果您想要的是强制登录视图始终重定向到同一个URL,则无需编写自己的视图:

  

(...)如果未提供next,则会重定向到settings.LOGIN_REDIRECT_URL(默认为/ accounts / profile /)。如果登录失败,则重新显示登录表单。

IOW:

  1. 在任何地方使用已命名的网址(命名您自己的网址,并在调用reverse{% url %}模板标签时使用网址名称)
  2. 摆脱模板中的next=...
  3. 将您的settings.LOGIN_REDIRECT_URL设置为信息中心的网址。

答案 1 :(得分:-1)

def login_view(request):
    if request.POST and form.is_valid():
        user = form.login(request)
        if user:
            login(request, user)
            return redirect('/app/')
        else:
            return HttpResponse('disabled account')
    return render_to_response('login.html', form ,RequestContext)

更改渲染响应以重定向 提供您需要的网址重定向