情况
我正在使用Django
制作我的网站。我想把它弄得很有条理。
Django
在django.contrib.models
中提供了User
和Group
。
在我的应用程序board
中,有Board
模型。
每个Board
对每个Group
of User
具有可访问的、可读的、可注释的、可写的权限。这是由一个额外的模型管理的,BoardPermission
是由Group
模型中的ManyToManyField(auth.User, through='BoardPermission')
相关的。
因此,在db中,BoardPermission
有4个字段:id
、board_id
、group_id
和permission
。permission
的值由0(可访问)、1(可读)、2(注释)、3(可写)设置。
问题
现在,问题是:
例如,如果用户输入了名为notice
(http://example.com/board/notice/
)的典型板,服务器必须检查用户的权限。或者,在主页上,用户可以看到用户可以访问的板的预览,在这种情况下,服务器应该知道--给定用户可以看到的板列表。
为了处理以上两种情况,我想做一个方法,has_permission(self, user, board, permission)
和get_permitted_user_list(self, user, permission)
。
那么,这两种方法应该在哪里呢?在model
或view
中
案例1)模型中的实现
权限是Board
和Group
之间的关系,而不是User
。处理QuerySet
只是可以在Board
对象中完成。我很难从Board
和Group
之间的关系中得到Board
和Group
之间的关系。
我检查了ModelManager
,但我不知道如何通过使用经理来解决这个问题。
案例2)视图中的实现
有两个简单的问题: 1)这些方法得到了广泛的应用,在典型的观点中,实现似乎是而不是结构化的,或者换句话说,遵循Django
或Python
的哲学。2)在各个方面,这些方法都是针对Models
的,因为它们处理的是模型之间的关系。所以我觉得应该是模型层。
此外,如果视图中的实现是一个标准,那么为什么Model
层中有Model
呢?
摘要(可以忘记上述所有讨论)
Django
是 MVT
**.但是data
无处不在。
Model
中的方法(处理数据)可以在View
中调用。即使在没有参数的Template
中!
当然,这种方法可以放在View
中。
M,V,T的角色区别的基本标准是什么?
发布于 2016-06-09 08:49:05
我的解决方案是在BoardManager
或BoardQuerySet
中有一个BoardQuerySet
方法(取决于您决定作为开发的基础,每个方法都可以从另一个自动配置/生成)。
您将能够将其与其他管理器方法链接起来,因此过滤、查找等将有效,并且您将能够对Board.DoesNotExist
异常使用视图的默认行为。
Board.objects.published().recent().available_for(user).filter(name=name)[:1].get()
https://stackoverflow.com/questions/37720901
复制相似问题