Django重定向到其他应用的错误视图

0 投票
1 回答
910 浏览
提问于 2025-04-18 11:00

在我的django 1.6项目中添加了另一个应用后,我遇到了一个奇怪的问题,跟django的HttpResponseRedirect功能有关。

我为这两个应用都设置了登录视图,但当我尝试登录第二个应用时,却被重定向到了第一个应用的list页面,而不是第二个应用的index页面。

所以在我的第一个应用中,视图是

def login(request):

aut_form = auth.forms.AuthenticationForm()
if(request.method == 'POST'):
    username = request.POST['username']
    password = request.POST['password']
    user = auth.authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            auth.login(request, user)
            return HttpResponseRedirect(reverse('fist_app:list'))
        else:
            return HttpResponseRedirect(reverse('fist_app:login') + '?loggedout')
    else:
        return HttpResponseRedirect(reverse('fist_app:login') + '?invalid')
else: 
    return render(request, 'first_app/login.html', {'form' : aut_form})

def list(request):

if  request.user is None or not request.user.is_authenticated():
    return HttpResponseRedirect(reverse('fist_app:login'))
else:     
    return response

而在第二个应用中,views.py看起来差不多

def login(request):

aut_form = auth.forms.AuthenticationForm()
if(request.method == 'POST'):
    username = request.POST['username']
    password = request.POST['password']
    user = auth.authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            auth.login(request, user)
            print("success")
            return HttpResponseRedirect(reverse('second_app:index'))
        else:
            return HttpResponseRedirect(reverse('second_app:login') + '?loggedout')
    else:
        return HttpResponseRedirect(reverse('second_app:login') + '?invalid')
else: 
    return render(request, 'second_app/login.html', {'form' : aut_form})

def index(request):
return render(request, 'second_app/index.html')

我还检查了两个应用的urls.py,看看正则表达式是否太模糊了。

第一个应用的urls.py

urlpatterns = patterns('first_app.views',
    url(r'^list/$', views.list, name='list' ),
    url(r'^login$', views.login, name='login'),
)

第二个应用的urls.py

urlpatterns = patterns('second_app.views',
   url(r'^login$', views.login, name='login'),
   url(r'^index$', views.index, name="index"),
)

我需要做什么更改,才能在与登录页面相关的应用中正确重定向到相应的视图呢?

还有我项目的urls.py

urlpatterns = patterns('',
    url(r'^backend/', include('second_app.urls', namespace="second_app")),
    url(r'^polls/', include('first_app.urls', namespace="first_app")),
    url(r'^admin/', include(admin.site.urls)),
)

1 个回答

0

根据你分享的代码片段,我能猜到的唯一可能原因是,你在模板 login.html 中的表单 action 没有使用特定于应用的 login 地址。

撰写回答