【问题标题】:django: layout considerationsdjango:布局注意事项
【发布时间】:2011-10-26 16:03:16
【问题描述】:

我有以下设计考虑:

  • 我有 4 组用户,学生、家长、教师和管理员。
  • 学生、家长、老师共享相同的关系信息——班级、家长-孩子、教师-班级等。
  • 教师有一个“门户”,他们可以在其中执行一些只有教师可见的任务,但也会发布一些分发给其他类型用户的信息。
  • 同样,家长和学生可以登录以查看共享信息,但也可能具有仅限于他们自己的功能。
  • 管理员添加/编辑新用户、更改学生班级等,并可以在门户范围内发布公告。
  • 每个“门户”的演示布局应该相似

目前,我想到了以下

    • 教师
      • 应用程序
      • 网址等
    • 父母
      • 应用程序
      • 网址等
    • common_apps
    • 管理员(Django 管理站点)

teachersparentsadministrators 是独立的 django 项目。通用应用程序包含所有类型的用户共享的信息。 teachers.apps 的应用程序可以作用于 common_apps 中的应用程序。 Administrator 基本上是一个管理站点。

这种结构是否适合上述要求?权限是否会成为此布局的问题?请让我分享您的经验并提供一些建议。

【问题讨论】:

  • 这些都应该在一个项目中。

标签: django


【解决方案1】:

只创建一个应用程序,并为StudentParentTeacher 使用代理模型,每个都继承自User。创建和使用组来区分它们,例如学生将是属于“学生”组的Users。

class StudentManager(models.Manager):
    def get_query_set(self, *args, **kwargs):
        qs = super(StudentManager, self).get_query_set(*args, **kwargs)
        return qs.filter(groups__name='Student')

class Student(User):
    objects = StudentManager()

    class Meta:
        proxy = True

ParentTeacher 冲洗并重复。

使用信号自动设置组:

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Student)
def set_student_group(sender, instance, created, **kwargs):
    if created:
        group, c = Group.objects.get_or_create(name='Student')
        instance.groups.add(group)

冲洗并重复ParentTeacher

现在,创建一个用户配置文件模型:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    # Other data

在settings.py中:

AUTH_PROFILE_MODULE = 'yourapp.UserProfile'

这应该为您提供所需的所有基础架构。您可以继续使用附加功能扩展StudentParentTeacher 模型。您只是不能向它们添加新字段;所有其他字段都应该继续UserProfile

只有管理员才能访问 Django 管理员 (User.is_staff=True)。从那里,他们可以进行所有必要的管理。您应该开发一个前端系统来满足学生、教师和家长的需求。

【讨论】:

  • 在你看来,“你应该开发一个前端系统来满足学生、老师和家长的需求”,应该是一个项目还是每个用户组一个项目,因为就像我提到的,一些功能/信息是共享的,而其他信息是专有的。因此我不确定一组网址,设置是否足够。
  • “项目”是一个非常非常广泛的概念。它可以是整个网站,甚至可以是一组网站。你永远不应该有单独的项目,除非你真的在处理两件如此不同的事情,它们彼此之间根本没有任何关系。您可能有单独的应用程序,但在您的场景中,我什至不认为这是必要的。所有功能都可以集中到一个项目中的一个应用程序中。
【解决方案2】:

我认为您的应用程序结构有点混乱。从我的角度来看,您可以使用类似于:

  • 只有一个 django 项目。如果这将是一个独特的门户,您应该将所有门户合并到一个 django 项目中。
  • 在此项目中创建您的所有应用程序:主题、时间表……您需要的一切。
  • 为家长、学生、教师扩展用户模型。您可以使用组和权限来处理每个组的信息。

这种结构还允许您为所有部分使用相同的“布局”。

查看用户模型和配置文件的 django 文档,它会对您有所帮助。

祝你好运!

【讨论】:

    猜你喜欢
    • 2013-11-22
    • 2017-11-03
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多