欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django web自定義通用權(quán)限控制實現(xiàn)方法

 更新時間:2020年11月24日 10:59:39   作者:yoyo008  
這篇文章主要介紹了Django web自定義通用權(quán)限控制實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

需求:web系統(tǒng)有包含以下5個url,分別對于不同資源;

1、stu/add_stu/

2、stu/upload_homework/

3、stu/query_homework/

4、stu/add_record/

--------------------------------------------------------------------------------------------------------

學(xué)生可以訪問:2,3

老師可以訪問:1,4

可以通過基于角色對用戶權(quán)限進行控制:

一、數(shù)據(jù)模型

1、用戶表:用戶表和角色表為多對多關(guān)系,1個用戶可以有多個角色,1個角色可以被多個用戶劃分;

email = models.EmailField(
  verbose_name='email address',
  max_length=255,
  unique=True,
)
 password = models.CharField(_('password'),max_length=128,\
               help_text=mark_safe('''<a href ="password/" >修改密碼</a>'''))
name = models.CharField(max_length=32,help_text='用戶登陸后請修改為真實名字')
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
role = models.ManyToManyField("Role")

def __str__(self):
  return self.email


2、角色表:

class Role(models.Model):
  """角色表"""
  name = models.CharField(unique=True,max_length=32)
  menus = models.ManyToManyField("Menu")
  def __str__(self):
    return self.name

3、菜單表:

class Menu(models.Model):
  """動態(tài)菜單"""
  name = models.CharField(unique=True,max_length=32)
  url_type = models.SmallIntegerField(choices=((0,'relative_name'),(1,'absolute_url')))
  url_name = models.CharField(unique=True,max_length=128)

  def __str__(self):
    return self.name

二、前端根據(jù)用戶權(quán)限生成菜單

<div class="container-fluid">
 <div class="row">
   {% block side-bar %}
  <div class="col-sm-3 col-md-2 sidebar">
   <ul class="nav nav-sidebar">
    {% block side-bar-menus %}
       {% for role in request.user.userprofile.roles.all %}
        <hr>
        {% for menu in role.menus.all %}
         <li>
           <a href="{% if menu.url_type == 0 %}{% url menu.url_name %}{% else %} {{ menu.url_name }}{% endif %}" rel="external nofollow"  >
           {{ menu.name }}
           </a>
         </li>
        {% endfor %}
      {% endfor %}
    {% endblock %}
    </ul>
  </div>
   {% endblock %}

這樣就可以根據(jù)用戶生成菜單,但是如果用戶不是通過菜單方法,而是直接通過url訪問,后臺還是沒有對這些url進行控制

三、后臺根據(jù)用戶權(quán)限控制菜單訪問

裝飾器:

簡言之,python裝飾器就是用于拓展原來函數(shù)功能的一種函數(shù),這個函數(shù)的特殊之處在于它的返回值也是一個函數(shù),使用python裝飾器的好處就是在不用更改原函數(shù)的代碼前提下給函數(shù)增加新的功能。

class Mddile1(MiddlewareMixin):
  def process_request(self,request):
    #如果用戶訪問的url是登錄、注冊頁面,記錄到白名單,放行
    for url in settings.PASS_URL_LIST:
      if re.match(url,request.path_info):
        return None
    Permission_url_list=request.session.get(settings.SESSION_PERMISSION_URL_KEY)
    #如果用戶訪問的url 不在當(dāng)前用戶權(quán)限之內(nèi) 返回login頁面
    if not Permission_url_list:
      return redirect(settings.LOGIN_URL)
    current_url=request.path_info
    #由于數(shù)據(jù)庫的數(shù)據(jù),可能是正則所有 一定要精確匹配
    flag=False
    for url in Permission_url_list:
      url='^%s$'%(url)
      if re.match(url,current_url):
        flag=True
        break
    if not flag:
      if settings.DEBUG: #如果是程序調(diào)試應(yīng)該 顯示用戶可以訪問的權(quán)限
        url_html='<br/>'.join(Permission_url_list)
        return HttpResponse('無權(quán)訪問您可以訪問%s'%url_html)
      else:
        return HttpResponse('沒有權(quán)限')

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python數(shù)據(jù)封裝json格式數(shù)據(jù)

    python數(shù)據(jù)封裝json格式數(shù)據(jù)

    本次內(nèi)容是小編在網(wǎng)上整理的關(guān)于如何python數(shù)據(jù)封裝json格式的內(nèi)容總結(jié),有興趣的讀者們參考下。
    2018-03-03
  • 使用Python實現(xiàn)XLS和XLSX之間的相互轉(zhuǎn)換

    使用Python實現(xiàn)XLS和XLSX之間的相互轉(zhuǎn)換

    在日常工作中,我們經(jīng)常需要處理和轉(zhuǎn)換不同格式的Excel文件,以適應(yīng)不同的需求和軟件兼容性,Excel文件的兩種常見格式是XLS(Excel 97-2003)和XLSX(Excel 2007及以上版本),本文將詳細介紹如何使用Python在XLS和XLSX格式之間進行轉(zhuǎn)換,需要的朋友可以參考下
    2024-09-09
  • 關(guān)于Torch?torchvision?Python版本對應(yīng)關(guān)系說明

    關(guān)于Torch?torchvision?Python版本對應(yīng)關(guān)系說明

    這篇文章主要介紹了關(guān)于Torch?torchvision?Python版本對應(yīng)關(guān)系說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python異常處理:try、except、else、finally的全面解析

    Python異常處理:try、except、else、finally的全面解析

    在Python中,異常是程序在運行時發(fā)生的錯誤,當(dāng)Python解釋器遇到一個它不能處理的錯誤時,它會拋出一個異常,異常處理的主要目的是在程序遇到錯誤時,提供一種方法來處理這些錯誤,而不是簡單地讓程序崩潰,本文介紹了Python異常處理:try、except、else、finally的全面解析
    2024-07-07
  • Python構(gòu)建區(qū)塊鏈的方法詳解

    Python構(gòu)建區(qū)塊鏈的方法詳解

    區(qū)塊鏈(Blockchain)是一種分布式賬本(listributed ledger),它是一種僅供增加(append-only),內(nèi)容不可變(immutable)的有序(ordered)鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)由網(wǎng)絡(luò)中的一系列節(jié)點共同維護,并且這些節(jié)點之間互不信任
    2023-02-02
  • python開發(fā)中module模塊用法實例分析

    python開發(fā)中module模塊用法實例分析

    這篇文章主要介紹了python開發(fā)中module模塊用法,以實例形式較為詳細的分析了Python中模塊的功能、定義及相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • python中ASCII碼字符與int之間的轉(zhuǎn)換方法

    python中ASCII碼字符與int之間的轉(zhuǎn)換方法

    今天小編就為大家分享一篇python中ASCII碼字符與int之間的轉(zhuǎn)換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 如何在vscode中安裝python庫的方法步驟

    如何在vscode中安裝python庫的方法步驟

    這篇文章主要介紹了如何在vscode中安裝python庫的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • PyTorch實現(xiàn)模型剪枝的方法

    PyTorch實現(xiàn)模型剪枝的方法

    剪枝是一種優(yōu)化模型的技術(shù),可以幫助減少模型的大小和計算量,同時保持模型的準(zhǔn)確性,本文主要介紹了PyTorch實現(xiàn)模型剪枝的方法,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • Python爬蟲之Spider類用法簡單介紹

    Python爬蟲之Spider類用法簡單介紹

    這篇文章主要介紹了Python爬蟲之Spider類用法簡單介紹,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評論