最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django xadmin action兼容自定義model權(quán)限教程

 更新時(shí)間:2020年03月30日 15:26:13   作者:隨風(fēng)奔跑尿飛揚(yáng)  
這篇文章主要介紹了django xadmin action兼容自定義model權(quán)限教程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

如標(biāo)題。最近在研究xadmin,發(fā)現(xiàn)文檔確實(shí)比較少,自己只能連滾帶爬~

起因

因?yàn)橄胱鲆粋€(gè)審批的功能,用xadmin acrtion來實(shí)現(xiàn)。本來想用模塊現(xiàn)有“change”字段控制權(quán)限,但是發(fā)現(xiàn)使用“change”字段控制權(quán)限的話,會(huì)把自帶的 “delete” action 暴露出來,這不是我想要的。 所以在模塊里添加了一個(gè)“approver”字段,用以控制權(quán)限。

代碼

首先修改模塊的 “Meta”,增加權(quán)限字段。

class TaskApprove(Task):
  class Meta:
    proxy = True
    verbose_name = u'審批'
    verbose_name_plural = verbose_name
    permissions = (
      ("approve","審批:用戶任務(wù)"),
    )

然后刷新一下數(shù)據(jù)庫,會(huì)在用戶管理的界面中看到我們新加的權(quán)限。

接下來在adminx.py中創(chuàng)建自己的action,并在你的管理類中添加。

from xadmin.plugins.actions import BaseActionView
class MyAction(BaseActionView):
  action_name = u'accept'
  model_perm = 'approve'
  description = '同意'
  def do_action(self, queryset):
    for obj in queryset:
      ##你的操作
      print(obj)
    return HttpResponse('您已同意')
class TaskApproveSettings(ViewOnlyMixin):
  actions = [MyAction,]
  list_display = ['name','targets','services','create_by']
xadmin.site.register(TaskApprove,TaskApproveSettings)

下面是重點(diǎn), 因?yàn)閤admin中的權(quán)限檢測是寫死的 只有 “view\change\delete\add”,而我們添加了一個(gè)“approve字段”, 這會(huì)導(dǎo)致報(bào)錯(cuò) – “keyerro” 。 所以接下來我們覆蓋一下xadmin中的方法,添加一個(gè)方法。

* 不知道為什么前幾次以繼承覆蓋的方式?jīng)]有成功~~*

在控制類TaskApproveSettings中添加。

首先添加一個(gè)方法,用來獲取是否有權(quán)限

def has_approve_permission(self):
  codename = get_permission_codename('approve', self.opts)
  return ('approve' not in self.remove_permissions) and self.user.has_perm('%s.%s' % (self.app_label, codename))

接下來修改get_model_perms 方法,將我們的權(quán)限添加進(jìn)去

  def get_model_perms(self):
    """
    Returns a dict of all perms for this model. This dict has the keys
    ``add``, ``change``, and ``delete`` mapping to the True/False for each
    of those actions.
    """
    return {
      'view': self.has_view_permission(),
      'add': self.has_add_permission(),
      'change': self.has_change_permission(),
      'delete': self.has_delete_permission(),
      'approve': self.has_approve_permission()
    }

最后是這樣的

from xadmin.plugins.actions import BaseActionView
from django.shortcuts import HttpResponse
from django.contrib.auth import get_permission_codename
class ActionApproveAccept(BaseActionView):
  action_name = u'accept'
  model_perm = 'approve'
  description = '同意'
  global_actions = []
  def do_action(self, queryset):
    for obj in queryset:
      print(obj)
    return HttpResponse('您已同意')

class ActionApproveReject(BaseActionView):
  action_name = u'reject'
  model_perm = 'approve'
  description = '拒絕'
  global_actions = []
  def do_action(self, queryset):
    for obj in queryset:
      print(obj)
    return HttpResponse('您已拒絕')
class TaskApproveSettings(ViewOnlyMixin):
  actions = [ActionApproveAccept,ActionApproveReject]

  list_display = ['name','targets','services','create_by']
  readonly_fields = TaskFields.create+TaskFields.params+TaskFields.approve
  form_layout = (
    Main(
      Fieldset('',
           *TaskFields.create,
           css_class='unsort no_title'
           ),

      Fieldset(('參數(shù)'),
           *TaskFields.params
           ),
    ),
    Side(
      Fieldset(('審批狀態(tài)'),
           *TaskFields.approve
           ),
    )
  )
  def get_model_perms(self):
    return {
      'view': self.has_view_permission(),
      'add': self.has_add_permission(),
      'change': self.has_change_permission(),
      'delete': self.has_delete_permission(),
      'approve': self.has_approve_permission()
    }
  def has_approve_permission(self):
    codename = get_permission_codename('approve', self.opts)
    return ('approve' not in self.remove_permissions) and self.user.has_perm('%s.%s' % (self.app_label, codename))

重啟服務(wù)就好啦!

我僅做了目前這些,暫時(shí)沒有發(fā)現(xiàn)問題。如果后面發(fā)現(xiàn)問題我會(huì)繼續(xù)補(bǔ)充,另外大家如果有更好的方法,歡迎留言糾正~!

補(bǔ)充知識:Dajngo 通過代碼添加xadmin用戶和權(quán)限(組)

在開發(fā)的時(shí)候,用戶要求在認(rèn)證的時(shí)候自動(dòng)添加xadmin登錄賬戶和分配組權(quán)限

from django.contrib.auth.models import Group,User
from django.http import JsonResponse
def test(req):
  name=req.POST['name']
  account=req.POST['account']
  password=req.POST['password']
  an=Group.objects.filter(id=1).first() #二級管理組 是管理員在xadmin后臺添加的權(quán)限組
  user = User(username=account)
  user.set_password(password)
  user.is_superuser = False
  user.is_active = True
  user.first_name = name
  user.is_staff = True
  user.save() #先生成用戶
  user.groups.add(an)
  return JsonResponse({'ret':0,'msg':'success'})

以上這篇django xadmin action兼容自定義model權(quán)限教程就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python文件簡單操作及openpyxl操作excel文件詳解

    Python文件簡單操作及openpyxl操作excel文件詳解

    這篇文章主要為大家詳細(xì)介紹了python對文件的簡單使用及openpyxl操作excel文件的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-10-10
  • Python實(shí)現(xiàn)簡單的用戶交互方法詳解

    Python實(shí)現(xiàn)簡單的用戶交互方法詳解

    這篇文章給大家分享了關(guān)于Python實(shí)現(xiàn)簡單的用戶交互的相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2018-09-09
  • Python實(shí)現(xiàn)簡易過濾刪除數(shù)字的方法小結(jié)

    Python實(shí)現(xiàn)簡易過濾刪除數(shù)字的方法小結(jié)

    這篇文章主要介紹了Python實(shí)現(xiàn)簡易過濾刪除數(shù)字的方法,結(jié)合實(shí)例形式總結(jié)分析了Python基于正則及內(nèi)置函數(shù)過濾刪除數(shù)字的相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • pandas報(bào)錯(cuò)AttributeError: DataFrame object has no attribute ix問題

    pandas報(bào)錯(cuò)AttributeError: DataFrame object has&

    這篇文章主要介紹了pandas報(bào)錯(cuò)AttributeError: DataFrame object has no attribute ix問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 五個(gè)Python迷你版小程序附代碼

    五個(gè)Python迷你版小程序附代碼

    在使用Python的過程中,我最喜歡的就是Python的各種第三方庫,能夠完成很多操作。下面就給大家介紹5個(gè)通過 Python 構(gòu)建的實(shí)戰(zhàn)項(xiàng)目,來實(shí)踐 Python 編程能力。歡迎收藏學(xué)習(xí),喜歡點(diǎn)贊支持
    2021-11-11
  • python實(shí)現(xiàn)獲取當(dāng)前設(shè)備的地點(diǎn)位置

    python實(shí)現(xiàn)獲取當(dāng)前設(shè)備的地點(diǎn)位置

    這篇文章主要介紹了python實(shí)現(xiàn)獲取當(dāng)前設(shè)備的地點(diǎn)位置,電腦如何獲取當(dāng)前所處的地理位置?它不會(huì)像我們一樣對地理位置有感性的認(rèn)知,它只認(rèn)識數(shù)據(jù),簡言之,電腦可以通過獲取當(dāng)前連接的公網(wǎng)IP,反推所處的位置環(huán)境,需要的朋友可以參考一下
    2022-03-03
  • python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解

    python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解

    這篇文章主要介紹了python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解的相關(guān)資料,這里提供實(shí)現(xiàn)方法,幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • Python基本知識點(diǎn)總結(jié)

    Python基本知識點(diǎn)總結(jié)

    這篇文章主要介紹了Python基本知識點(diǎn)總結(jié),Python基本知識,Python字符串,Python函數(shù),Python模塊,Python創(chuàng)建類,Python類的繼承,Python重載,Python單下劃線說明,Python雙下劃線說明,Python頭尾雙下劃線說明,需要的朋友可以參考下
    2022-04-04
  • python爬蟲 Pyppeteer使用方法解析

    python爬蟲 Pyppeteer使用方法解析

    這篇文章主要介紹了python爬蟲 Pyppeteer使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 在Pytorch中計(jì)算自己模型的FLOPs方式

    在Pytorch中計(jì)算自己模型的FLOPs方式

    今天小編就為大家分享一篇在Pytorch中計(jì)算自己模型的FLOPs方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論

桂阳县| 克拉玛依市| 民和| 乐至县| 烟台市| 潜江市| 翁源县| 苍南县| 准格尔旗| 武乡县| 石泉县| 虞城县| 吉安市| 和政县| 永春县| 金昌市| 含山县| 揭东县| 澎湖县| 横峰县| 乡城县| 晋宁县| 盖州市| 荆州市| 监利县| 珠海市| 万源市| 易门县| 平江县| 广宁县| 涟源市| 万山特区| 莆田市| 星子县| 营口市| 抚松县| 梅河口市| 耿马| 澜沧| 德令哈市| 海口市|