根据用户状态向不同的应用发送类似的URL

时间:2012-10-09 09:40:44

标签: django

我有2个应用程序,注册和相册。如果用户访问'/'或'/ home',则他们应该看到注册/登录表单或他们的相册管理页面,具体取决于用户是否登录。

是否有针对如何在2个不同应用之间分配类似网址的既定最佳做法?有没有办法建立这个,以便任何一个应用程序不需要知道另一个?

谢谢!

3 个答案:

答案 0 :(得分:2)

如果您的需求仅限于显示登录表单(如果用户未登录),并且在用户未登录时显示“主页”,我建议您使用“需要登录”装饰器。< / p>

from django.contrib.auth.decorators import login_required

@login_required
def show_home(request):
    """
    Show home page...
    """
    ...

此装饰器可应用于视图级别(如上所示)或urls.py(如下所示):

url(r'^reports/', login_required(ListView.as_view(
    template_name="...",
    queryset = ...,
    context_object_name = ...
))),

第二种模式通常用于通用视图和基于类的视图。

这两种解决方案都预先假定您正在使用Django内置的登录/注册设备(在需要时使用自定义模板和自定义视图)。如果您使用的是自定义注册/身份验证框架,那么使用装饰器模式仍然是个好主意。

答案 1 :(得分:1)

如果您将LOGIN_URL设置为/registration/login,并使用/修饰@login_required视图,则系统会自动重定向这些视图。

答案 2 :(得分:0)

当用户登录时,向会话添加变量并在/或/ home请求中进行检查。