在我的Web应用程序中为架构做302s是否可以?

时间:2010-02-27 11:03:56

标签: python django redirect

例如,在我的索引(请求)中:

def index(request):
    if logged_in:
        return HttpResponseRedirect("/home_profile")
    else:
        return HttpResponseRedirect("/login")

这样,当用户点击我的主页时......他被正确地重定向。这是一个很好的建筑吗?或者这会导致缓存问题等吗?

1 个答案:

答案 0 :(得分:3)

重定向是正常的(302不应该导致任何缓存问题,因为302是临时的),但是为什么你需要在if和else中都有重定向。如果没有登录,更好的方法是重定向到登录页面,否则视图应该返回响应,而不是不必要地重定向,例如。

def home(request):
    if not  logged_in:
        return HttpResponseRedirect("/login?next=%s"%reverse("home"))

    return HttpResponse(...)

你可以在用户需要登录的每个视图中做同样的事情,否则做一个登录装饰器,djago auth已经有l ogin_required或者创建一个登录中间件,它将为每个请求执行。

另请注意,登录后我将通过下一个网址访问,因为通常我想登陆我前往的地方。