我正在使用Django
创建我的网站。我正试图让它结构化。
Django
在User
中提供Group
和django.contrib.models
。
在我的应用board
中,有Board
型号。
每个Board
都有Group
个User
的可访问,可读,可评论,可写的权限。这是由额外模型BoardPermission
管理的,该模型与ManyToManyField(auth.User, through='BoardPermission')
模型中的Group
相关。
因此,在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
?
权限是Board
和Group
之间的关系,而不是User
。处理QuerySet
只能在Board
个对象中完成。我很难从Board
和User
之间的关系中获得Board
和Group
之间的关系。
我检查了ModelManager
,但我不知道如何通过使用经理来解决这个问题。
有两个简单的问题:1)这些方法被广泛使用,并且在典型视图中的实现似乎是 not structful ,或者换言之,遵守{{1}的哲学}或Django
。 2)在所有方面,这些方法都适用于Python
,因为它们处理模型之间的关系。所以我认为它应该是模型层。
此外,如果视图中的实现是标准,那么为什么Models
层中存在ModelManager
?
Model
是Django
。但MVT
无处不在。
data
中的方法(处理数据)可以在Model
中调用。即使在View
没有参数!
当然,这种方法可以放在Template
。
M,V,T的角色之间的基本标准是什么?
答案 0 :(得分:0)
我的解决方案是在available_for(user)
或BoardManager
中使用BoardQuerySet
方法(取决于您决定哪个方法作为开发基础,每个方法都可以自动配置/从另一个生成。)
您将能够使用其他管理器方法将其链接,因此过滤,查找等将起作用,您将能够使用视图的Board.DoesNotExist
例外的默认行为。
Board.objects.published().recent().available_for(user).filter(name=name)[:1].get()