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

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

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

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

1、stu/add_stu/

2、stu/upload_homework/

3、stu/query_homework/

4、stu/add_record/

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

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

老師可以訪問:1,4

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

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

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

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='用戶登陸后請(qǐng)修改為真實(shí)名字')
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):
  """動(dòng)態(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訪問,后臺(tái)還是沒有對(duì)這些url進(jìn)行控制

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

裝飾器:

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

class Mddile1(MiddlewareMixin):
  def process_request(self,request):
    #如果用戶訪問的url是登錄、注冊(cè)頁(yè)面,記錄到白名單,放行
    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頁(yè)面
    if not Permission_url_list:
      return redirect(settings.LOGIN_URL)
    current_url=request.path_info
    #由于數(shù)據(jù)庫(kù)的數(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)限')

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

相關(guān)文章

  • TensorFlow神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)之張量與變量概念

    TensorFlow神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)之張量與變量概念

    這篇文章主要為大家介紹了TensorFlow神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的基本知識(shí)張量與變量概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Python如何實(shí)現(xiàn)大型數(shù)組運(yùn)算(使用NumPy)

    Python如何實(shí)現(xiàn)大型數(shù)組運(yùn)算(使用NumPy)

    這篇文章主要介紹了Python如何實(shí)現(xiàn)大型數(shù)組運(yùn)算,文中講解非常細(xì)致,幫助大家更好的了解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • python 使用pygame工具包實(shí)現(xiàn)貪吃蛇游戲(多彩版)

    python 使用pygame工具包實(shí)現(xiàn)貪吃蛇游戲(多彩版)

    這篇文章主要介紹了python 使用pygame工具包實(shí)現(xiàn)貪吃蛇游戲,本篇給大家分享的是一個(gè)多彩版,通過實(shí)例代碼給大家講解,非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • python操作gmail實(shí)例

    python操作gmail實(shí)例

    這篇文章主要介紹了python操作gmail的方法,實(shí)例分析了python針對(duì)gmail操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • Python API自動(dòng)化框架總結(jié)

    Python API自動(dòng)化框架總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于Python API自動(dòng)化框架總結(jié)內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-11-11
  • 如何教少兒學(xué)習(xí)Python編程

    如何教少兒學(xué)習(xí)Python編程

    在本篇文章里小編給大家整理了關(guān)于教少兒學(xué)習(xí)Python編程的相關(guān)文章及知識(shí)點(diǎn),需要的朋友們可以參考下。
    2020-07-07
  • 通過5個(gè)例子讓你學(xué)會(huì)Pandas中的字符串過濾

    通過5個(gè)例子讓你學(xué)會(huì)Pandas中的字符串過濾

    毋庸置疑Pandas是使用最廣泛的Python庫(kù)之一,它提供了許多功能和方法來執(zhí)行有效的數(shù)據(jù)處理和數(shù)據(jù)分析,下面這篇文章主要給大家介紹了關(guān)于如何通過5個(gè)例子讓你學(xué)會(huì)Pandas中字符串過濾的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 淺談Python3中print函數(shù)的換行

    淺談Python3中print函數(shù)的換行

    這篇文章主要介紹了淺談Python3中print函數(shù)的換行,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 一文教你如何創(chuàng)建Python虛擬環(huán)境venv

    一文教你如何創(chuàng)建Python虛擬環(huán)境venv

    創(chuàng)建?Python?虛擬環(huán)境是一個(gè)很好的實(shí)踐,可以幫助我們管理項(xiàng)目的依賴項(xiàng),避免不同項(xiàng)目之間的沖突,下面就跟隨小編一起學(xué)習(xí)一下如何創(chuàng)建Python虛擬環(huán)境venv吧
    2024-12-12
  • Python編程中非常重要卻又被嚴(yán)重低估的庫(kù)decorator

    Python編程中非常重要卻又被嚴(yán)重低估的庫(kù)decorator

    今天介紹的是一個(gè)已經(jīng)存在十年,但是依舊不紅的庫(kù) decorator,好像很少有人知道他的存在一樣。本篇文章不會(huì)過多的向你介紹裝飾器的基本知識(shí),我會(huì)默認(rèn)你知道什么是裝飾器,并且懂得如何寫一個(gè)簡(jiǎn)單的裝飾器
    2021-10-10

最新評(píng)論

江源县| 滨州市| 克山县| 郯城县| 澳门| 平安县| 凌海市| 泗洪县| 富平县| 化德县| 榆树市| 加查县| 灵寿县| 林芝县| 独山县| 金沙县| 资源县| 固始县| 曲沃县| 浏阳市| 藁城市| 长沙县| 石嘴山市| 通河县| 北京市| 浦北县| 通榆县| 高邑县| 高平市| 潢川县| 荔浦县| 天峨县| 康保县| 抚顺市| 佳木斯市| 阳朔县| 神木县| 青浦区| 永年县| 天津市| 洪泽县|