用Django搭建web,我们可以发现它已经提供了一个admin的管理系统。
但是在分配权限的时候,只有change、add、delete三种权限,也就是说任一登录管理界面的用户,都有修改数据的风险,所以我们需要添加一种只读用户,他可以登录后台页面进行数据的查看,但是不会对数据进行修改。
class CustomModelAdmin(admin.ModelAdmin):
# 对于非超级用户,去除 “动作” 功能一栏
def get_actions(self, request):
actions = super(CustomModelAdmin, self).get_actions(request)
if request.user.is_superuser:
return actions
actions = None
return actions
def get_readonly_fields(self, request, obj=None):
if request.user.is_superuser:
return self.readonly_fields
# get all fields as readonly
# self.model._meta.fields 获取普通的字段
# obj._meta.many_to_many 获取外键、多对多、一对一这些字段
fields = [f.name for f in self.model._meta.fields] + \
[field.name for field in obj._meta.many_to_many]
return fields
然后将admin.py中所有ModelAdmin类继承上述Admin类
到这一步,我们进入admin管理页面依旧没有只读的权限,所以我们需要增加只读权限
1.手动增加
第一步:
进入auth_permission表
我们可以看到如下权限:
Can add user 4 add_user
Can change user 4 change_user
Can delete user 4 delete_user
……
所以需要增加view权限:
Can view [model] 4 view_[model]
第二步:
进入admin管理页面,我们可以看见对应的view权限
我们将view和change权限赋予用户。
如果只给view权限,用户就只能看见数据库名,但是进入不了数据库查看数据,所以必须有change权限,但是现在所有字段都是只读类型了。
2.自动增加
修改django源码
在django xxx文件中加入一个view权限
重新更新下数据库
(mdzz,有人在改我的代码,我先去宣誓主权,下午在确认下是哪个文件,第一次看源码,不是很熟悉==)