zoukankan      html  css  js  c++  java
  • django中根据用户的权限,显示change_list.html的内容和change_form.html中显示的字段

    应用需求: 设置好用户的权限之后, 用户登录后台之后,需要根据用户的权限,用户属于哪个组,显示哪些成员。 并且进入用户编辑页面之后, 设置显示用户的字段和字段显示方式

     

    class MyUserAdmin(UserAdmin):

      def get_queryset(self, request):  //通过get_queryset函数可以过滤出组的成员, 或者这个过滤的规则有你自己定也行
        qs = super(MyUserAdmin, self).get_queryset(request)
        if request.user.is_superuser:
          return qs
        else:
          return qs.filter(groups__name=mall_admin_group) | qs.filter(groups__name=mall_partner_group)

      def get_fieldsets(self, request, obj=None): //通过get_fieldsets 过滤是否在User form page 显示相关字段
        if not obj:
          return self.add_fieldsets
        if request.user.is_superuser:
          perm_fields = ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')
        else:
          perm_fields = ('is_active', 'is_staff', 'groups')

        return [(None, {'fields': ('username', 'password')}), (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}), (_('Permissions'), {'fields': perm_fields}), (_('Important dates'), {'fields': ('last_login', 'date_joined')})]

    admin.site.unregister(User)
    admin.site.register(User, MyUserAdmin)

    应用需求: 对不同组,不同用户设置在change_form.html中字段的可读权限的限制

    1 def get_readonly_fields(self, request, obj=None):
    2   fields = []
    3   user_info = User.objects.filter(groups__name=mall_admin_group).filter(username=request.user.username)
    4   # 超级管理员和商城运营人员可以编辑
    5   if request.user.is_superuser or user_info.exists():
    6     return fields
    7   else:
    8     fields = ['owner'] //  owner字段无法编辑
    9   return fields  

    应用需求: 在保存 model object 添加或者改变之前,可以对保存实例做一些限制工作,比如根据用户账号

     1  def save_model(self, request, obj, form, change):
     2         if not change: #add action
     3             owner = obj.owner
     4             partner_list = owner.partner_set.all()
     5             # 新建店铺,每个账号仅限注册一个
     6             if partner_list.exists():
     7                 self.message_user(request, '每个账号只能创建一个店铺', messages.ERROR)
     8             else:
     9                 super(PartnerAdmin, self).save_model(request, obj, form, change)
    10         else:#change action
    11             super(PartnerAdmin, self).save_model(request, obj, form, change)      

    应用需求: 将change_form中,input类型改为kindeditor插件功能。

     1 from django import forms
     2 
     3 class PartnerProductPoolForm(forms.ModelForm):
     4     def __init__(self, *args, **kwargs):
     5         super(PartnerProductPoolForm, self).__init__(*args, **kwargs)
     6         self.fields["introduction"].label = "描述" //将该字段修改为kindeditor的textarea
     7     introduction = forms.CharField(widget=forms.Textarea(attrs={'row': 60, 'cols': 120}))
     8     class Meta:
     9         model = PartnerProductPool
    10         fields = '__all__'
    11 
    12     class Media: //引入需要的js, css文件
    13         js = (
    14                 'js/jquery-3.2.1.min.js',
    15                 'editor/kindeditor-all.js',
    16                 'editor/lang/zh-CN.js',
    17                 'js/introduction.js'
    18             )

      

  • 相关阅读:
    全面监测网站信息
    linux 将Mysql的一张表导出至Excel格式文件
    渗透测试人员发现用户可无限输入密码次数,超过5次未锁定用户,存在暴力破解风险。解放方案:限制每个输入的用户名(不管存不存在该账户)登陆失败次数不超过5次,超过则锁定该用户
    mysql linux下数据库导出 常用操作
    find php.ini 和 php的执行目录 bin目录
    解决:The “https://packagist.laravel-china.org/packages.json” file could not be downloaded
    如何上传代码至GitHub
    7. Jmeter-逻辑控制器介绍与使用
    19、Linux命令对服务器内存进行监控
    20、Linux命令对服务器磁盘进行监控
  • 原文地址:https://www.cnblogs.com/learning-skills/p/7519891.html
Copyright © 2011-2022 走看看