代码之家  ›  专栏  ›  技术社区  ›  Jason

django-admin的有效用例?

  •  11
  • Jason  · 技术社区  · 17 年前

    我想建立一个django网站,让一组受信任的用户可以编辑他们的个人资料信息。让每个受信任的用户都通过django管理界面有意义吗?我只希望他们能够看到和编辑自己的信息(显然)。这似乎不符合django人定义“信任”的方式,尤其是粗体部分。。。

    来自 The Django Book, Chapter 18 :

    管理员旨在供以下人员使用 你,开发者,信任的人。 这不仅仅意味着那些 已通过认证;意思 Django假设你的内容 编辑们可以被信任做正确的事

    这意味着没有批准 信任你的用户,没有人需要 批准他们的编辑。这也意味着 许可系统,而 基于每个对象的访问。 如果你 相信有人可以编辑自己的 故事,你相信他们不会编辑 其他人未经许可。

    这是适合django的管理模块的用例之一,还是只是不受信任用户的专用视图?

    6 回复  |  直到 17 年前
        1
  •  17
  •   Soviut    17 年前

    不,Django管理员不适合单个用户配置文件,每个用户都可以查看和编辑所有其他用户配置文件。这更适合必须同时管理所有用户的管理员。

    您需要构建的是一个用户配置文件页面。Django已经有了一个很好的登录系统,这得益于Django.contrib.auth模块。你可以很容易地将其集成到你的页面中,这正是Django管理员用来对用户进行身份验证的。

        2
  •  5
  •   aatifh    17 年前

    我建议您创建一个Person模型,其中包含用户模型(管理站点用户模型)的OneToOneField。有些是这样的。。

    from django.contrib.auth.models import User
    
        class Person(models.Model):
            """The person class FKs to the User class and contains additional user information
            including userImage, country, etc"""
    
            user = models.OneToOneField(User, related_name='person_fk')
            url = models.URLField(max_length=255, blank=True)
            country = models.CharField(max_length=2, blank=True)
            state = models.CharField(max_length=50, blank=True)
            zipCode = models.IntegerField(max_length=7, blank=True, null=True)
            userImage = models.ImageField(upload_to=generate_filename, blank=True, null=True)
    
        3
  •  3
  •   S.Lott    17 年前

    Django的授权模型有点过于简单。它只是检查整个模型的权限。

    在你写了一两个之后,你会看到模式。然后你可以考虑编写自己的装饰器来处理这个问题。

    def profileView( request, object_id ):
        p= Profile.objects.get( id=int(object_id) )
        if request.session['user'] != p.get_user():
            # respond with a 401 not authorized or a helpful message
        # process normally, since the session['user'] is the user for the Profile.
    

        4
  •  3
  •   Soviut    17 年前

    我不认为在网站上编辑我的个人资料是一项行政任务。我认为 django-profiles 这就是你要找的。

        5
  •  1
  •   Carl Meyer    17 年前
        6
  •  1
  •   Josh Smeaton    17 年前

    有一些django可插拔应用程序允许对您的管理模型进行行级权限。然而,我更倾向于编写自己的视图,允许用户在应用程序内完成。

    在设计我目前正在开发的应用程序时,我也有类似的愿望(使用管理控件),但我决定管理应用程序真的是供管理员使用的,应该给普通用户自己的页面来完成工作和定制(如果需要)。