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

django admin 根據(jù)choice字段選擇的不同來顯示不同的頁面方式

 更新時(shí)間:2020年05月13日 09:51:36   作者:海燕。  
這篇文章主要介紹了django admin 根據(jù)choice字段選擇的不同來顯示不同的頁面方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,大家還是直接看代碼吧!

一、舉例

tip/tip.js
    var react = function () {
    if (django.jQuery('#id_tiptype').val() == 'content') {
      django.jQuery('#id_content').parent().parent().show(500);
      django.jQuery('#id_image').parent().parent().hide(500);
      django.jQuery('#id_cropping').parent().parent().hide(500);
    }
    else {
      django.jQuery('#id_content').parent().parent().hide(500);
      django.jQuery('#id_image').parent().parent().show(500);
      django.jQuery('#id_cropping').parent().parent().show(500);
    }
    };

    #當(dāng)選擇的類型改變的時(shí)候觸發(fā)react函數(shù)
    django.jQuery(function () {
      react();
      django.jQuery('#id_tiptype').on('change', react);
    });

二、admin.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib import admin
from image_cropping import ImageCroppingMixin

from salmonella.admin import SalmonellaMixin

from tip.models import Tip,TipTag

@admin.register(Tip)
class TipAdmin(ImageCroppingMixin, SalmonellaMixin, admin.ModelAdmin):
  # search_fields = ('tiptype',)
  list_filter = ('enabled',)
  list_display = ('tiptype', 'enabled', 'get_tag','image')
  salmonella_fields = ('tags', )



  # fields = ('tiptype', 'enabled','tags','image')

  def get_tag(self, obj):
    print(obj.tags.all())
    if obj.tags.all():
      tag_list = [i.name for i in obj.tags.all()]
      return ','.join(tag_list)
    else:
      return ''

  get_tag.short_description = '小貼士標(biāo)簽'

  class Media():
    js = ('tip/tip.js',)


@admin.register(TipTag)
class TiptagAdmin(admin.ModelAdmin):
  search_fields = ('name', )
  list_display = ("name", )

補(bǔ)充知識(shí):Django之自定義用戶權(quán)限(自定義RBAC組件)

RBAC組件

rbac 組件一般我們用于權(quán)限的校驗(yàn),幫助我們更好的管理用戶認(rèn)證信息,不同的用戶權(quán)限不同,訪問的界面展示也不相同

什么是權(quán)限: 一個(gè)含有正則表達(dá)式的 url

基于 RBAC 設(shè)計(jì)表關(guān)系:

class User(models.Model):
  class Meta:
    # 此處設(shè)置 admin 中顯示名稱
    verbose_name = verbose_name_plural = '用戶表'

  name = models.CharField(max_length=32)
  pwd = models.CharField(max_length=32)
  roles = models.ManyToManyField(to='Role')

  def __str__(self):
    return self.name

class Role(models.Model):
  class Meta:
    verbose_name = verbose_name_plural = '職位表'

  title = models.CharField(max_length=32)
  permissions = models.ManyToManyField(to='Permission')

  def __str__(self):
    return self.title

class Permission(models.Model):
  class Meta:
    verbose_name = verbose_name_plural = '權(quán)限表'

  title = models.CharField(max_length=32)
  url = models.CharField(max_length=32)
 menu=models.ForeignKey("Menu",on_delete=models.CASCADE,null=True)
  
  def __str__(self):
    return self.title
  
class Menu(models.Model):
  class Meta:
    verbose_name = verbose_name_plural = '菜單表'
    
  title = models.CharField(max_length=32, verbose_name='菜單')
  icon = models.CharField(max_length=32, verbose_name='圖標(biāo)', null=True, blank=True)

添加需要的權(quán)限信息

任何利用中間件和自定義的模塊 傳輸和獲取 當(dāng)前用戶的權(quán)限信息

# 通過自定義 middleware 模塊在 setting 中加入,引入中間件
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse, redirect
import re

class PermissionMiddleWare(MiddlewareMixin):

  def process_request(self, request):

    current_path = request.path
    # 設(shè)置白名單
    for reg in ['/login/', '/admin/*']:
      ret = re.search(reg, current_path)
      if ret:
        return None

    # 校驗(yàn)是否登錄
    user_id = request.session.get('user_id')
    if not user_id:
      return redirect('/login/')

    # 校驗(yàn)權(quán)限
    permission_list = request.session.get("permission_list")
    for reg in permission_list:
      reg = "^%s$" % reg
      ret = re.search(reg, current_path)
      if ret:
        return None

    return HttpResponse("無權(quán)訪問!")

rbac 自定義模塊

from app1.models import *

def initial_sesson(user, request):
  """
  功能:將當(dāng)前登錄人的所有權(quán)限錄入 session 中
  :param user:當(dāng)前登錄人
  :param request:
  :return:
  """
  # 查詢當(dāng)前登錄人的所有權(quán)限列表
  permissions = Role.objects.filter(user=user).values('permissions__url')
  print('roles', permissions)

  permissions_list = []
  for item in permissions:
    permissions_list.append(item['permissions__url'])

  # 將當(dāng)前登錄人的權(quán)限列表注入 session 中
  request.session['permission_list'] = permissions_list

動(dòng)態(tài)顯示菜單權(quán)限

動(dòng)態(tài)獲取顯示菜單,注意本次顯示是后臺(tái)操作

需要獲取當(dāng)前用戶的權(quán)限信息,獲取 url 和 是否為菜單,以及所帶的 icon 圖標(biāo)。因?yàn)樵O(shè)計(jì)到傳值的問題,于是我們產(chǎn)生了自定過濾器。

首先自定過濾器

# web.py 文件中
from django.utils.safestring import mark_safe
from django.template import Library
import re
register =Library()

@register.inclusion_tag("rbac/menu.html")
# 將當(dāng)前函數(shù)的 permission_menu_dict 傳給 rbac 的 menu.html
def get_menu_styles(request):
  """
  自定義過濾器
  :param request:傳入當(dāng)前用戶菜單信息 
  :return: 
  """
  permission_menu_dict = request.session.get("permission_menu_dict")
  print("permission_menu_dict",permission_menu_dict)
  return {"permission_menu_dict":permission_menu_dict}

在 menu.html 中書寫

# menu.html
<div class="multi-menu">
{% for item in permission_menu_dict.values %}
<div class="item">
<div class="title"><i class="{{ item.menu_icon }}"></i>{{ item.menu_title }}</div>
<div class="body">
{% for foo in item.children %}
<a href="{{ foo.url }}" rel="external nofollow" >{{ foo.title }}</a>
{% endfor %}
</div>
</div>
{% endfor %}
</div>

使用自定義的組件

<div class="left-menu">
<div class="menu-body">
{% load web %}
{% get_menu_styles request %}
</div>
</div>

整體樣圖

以上這篇django admin 根據(jù)choice字段選擇的不同來顯示不同的頁面方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 如何將浮點(diǎn)數(shù)尾部無效0去掉和無效的‘.’號(hào)

    python 如何將浮點(diǎn)數(shù)尾部無效0去掉和無效的‘.’號(hào)

    這篇文章主要介紹了python 如何將浮點(diǎn)數(shù)尾部無效0去掉和無效的‘.’號(hào),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python對(duì)raw格式照片進(jìn)行降噪處理的方法詳解

    python對(duì)raw格式照片進(jìn)行降噪處理的方法詳解

    要對(duì)RAW格式的照片進(jìn)行降噪,我們可以使用rawpy庫來讀取RAW圖像,并使用imageio庫將處理后的圖像保存為其他格式,如PNG或JPEG,本文將詳細(xì)給大家介紹python如何對(duì)raw格式照片進(jìn)行降噪處理,文中有詳細(xì)的代碼流程,需要的朋友可以參考下
    2023-05-05
  • python3中numpy函數(shù)tile的用法詳解

    python3中numpy函數(shù)tile的用法詳解

    今天小編就為大家分享一篇python3中numpy函數(shù)tile的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python 3 實(shí)現(xiàn)定義跨模塊的全局變量和使用教程

    Python 3 實(shí)現(xiàn)定義跨模塊的全局變量和使用教程

    這篇文章主要介紹了Python 3 實(shí)現(xiàn)定義跨模塊的全局變量和使用,本文通過實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Django框架模板用法入門教程

    Django框架模板用法入門教程

    這篇文章主要介紹了Django框架模板用法,結(jié)合簡單入門實(shí)例形式分析了Django框架模板標(biāo)簽、過濾器、模板繼承等概念與使用技巧,需要的朋友可以參考下
    2019-11-11
  • Python入門篇之編程習(xí)慣與特點(diǎn)

    Python入門篇之編程習(xí)慣與特點(diǎn)

    本文是Python入門篇的第一篇文章,主要講述了Python編程習(xí)慣和特點(diǎn)等一些基礎(chǔ)知識(shí),有需要的朋友可以參考下
    2014-10-10
  • Python實(shí)現(xiàn)遞歸遍歷文件夾并刪除文件

    Python實(shí)現(xiàn)遞歸遍歷文件夾并刪除文件

    本文給大家匯總了3個(gè)Python實(shí)現(xiàn)遍歷文件夾并刪除的代碼,主要是給大家分享下這3種方法的實(shí)現(xiàn)思路,有需要的小伙伴可以參考下
    2016-04-04
  • python 打印完整異常問題

    python 打印完整異常問題

    這篇文章主要介紹了python 打印完整異常問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 利用pyuic5將ui文件轉(zhuǎn)換為py文件的方法

    利用pyuic5將ui文件轉(zhuǎn)換為py文件的方法

    今天小編就為大家分享一篇利用pyuic5將ui文件轉(zhuǎn)換為py文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 對(duì)python opencv 添加文字 cv2.putText 的各參數(shù)介紹

    對(duì)python opencv 添加文字 cv2.putText 的各參數(shù)介紹

    今天小編就為大家分享一篇對(duì)python opencv 添加文字 cv2.putText 的各參數(shù)介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評(píng)論

黔西县| 嘉荫县| 瑞丽市| 闽侯县| 永宁县| 洪雅县| 新田县| 昔阳县| 新兴县| 运城市| 尉氏县| 城口县| 天峨县| 岳普湖县| 松滋市| 鄂温| 竹溪县| 平定县| 岫岩| 刚察县| 舒城县| 清流县| 凯里市| 固始县| 绥中县| 翁牛特旗| 盐池县| 莲花县| 茌平县| 平顶山市| 宕昌县| 嘉义市| 晋州市| 巴东县| 沙坪坝区| 泸定县| 霍邱县| 中山市| 揭西县| 绥德县| 吴堡县|