电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:104日期:2024-10-08 10:48:23

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

一、舉例

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); } }; #當選擇的類型改變的時候觸發react函數 django.jQuery(function () { react(); django.jQuery(’#id_tiptype’).on(’change’, react); });

二、admin.py

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.contrib import adminfrom image_cropping import ImageCroppingMixinfrom salmonella.admin import SalmonellaMixinfrom 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 = ’小貼士標簽’ class Media(): js = (’tip/tip.js’,)@admin.register(TipTag)class TiptagAdmin(admin.ModelAdmin): search_fields = (’name’, ) list_display = ('name', )

補充知識:Django之自定義用戶權限(自定義RBAC組件)

RBAC組件

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

什么是權限: 一個含有正則表達式的 url

基于 RBAC 設計表關系:

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

class User(models.Model): class Meta: # 此處設置 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.nameclass 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.titleclass Permission(models.Model): class Meta: verbose_name = verbose_name_plural = ’權限表’ 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=’圖標’, null=True, blank=True)

添加需要的權限信息

任何利用中間件和自定義的模塊 傳輸和獲取 當前用戶的權限信息

# 通過自定義 middleware 模塊在 setting 中加入,引入中間件from django.utils.deprecation import MiddlewareMixinfrom django.shortcuts import HttpResponse, redirectimport reclass PermissionMiddleWare(MiddlewareMixin): def process_request(self, request): current_path = request.path # 設置白名單 for reg in [’/login/’, ’/admin/*’]: ret = re.search(reg, current_path) if ret:return None # 校驗是否登錄 user_id = request.session.get(’user_id’) if not user_id: return redirect(’/login/’) # 校驗權限 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('無權訪問!')

rbac 自定義模塊

from app1.models import *def initial_sesson(user, request): ''' 功能:將當前登錄人的所有權限錄入 session 中 :param user:當前登錄人 :param request: :return: ''' # 查詢當前登錄人的所有權限列表 permissions = Role.objects.filter(user=user).values(’permissions__url’) print(’roles’, permissions) permissions_list = [] for item in permissions: permissions_list.append(item[’permissions__url’]) # 將當前登錄人的權限列表注入 session 中 request.session[’permission_list’] = permissions_list

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

動態顯示菜單權限

動態獲取顯示菜單,注意本次顯示是后臺操作

需要獲取當前用戶的權限信息,獲取 url 和 是否為菜單,以及所帶的 icon 圖標。因為設計到傳值的問題,于是我們產生了自定過濾器。

首先自定過濾器

# web.py 文件中from django.utils.safestring import mark_safefrom django.template import Libraryimport reregister =Library()@register.inclusion_tag('rbac/menu.html')# 將當前函數的 permission_menu_dict 傳給 rbac 的 menu.htmldef get_menu_styles(request): ''' 自定義過濾器 :param request:傳入當前用戶菜單信息 :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='http://www.hdgsjgj.cn/bcjs/{{ 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 根據choice字段選擇的不同來顯示不同的頁面方式

以上這篇django admin 根據choice字段選擇的不同來顯示不同的頁面方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 回转支承-转盘轴承-回转驱动生产厂家-洛阳隆达轴承有限公司 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 | 合肥风管加工厂-安徽螺旋/不锈钢风管-通风管道加工厂家-安徽风之范 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 石英粉,滑石粉厂家,山东滑石粉-莱州市向阳滑石粉有限公司 | ★塑料拖链__工程拖链__电缆拖链__钢制拖链 - 【上海闵彬】 | 蒸压釜_蒸养釜_蒸压釜厂家-山东鑫泰鑫智能装备有限公司 | 电子天平-华志电子天平厂家 | 高压包-点火器-高压发生器-点火变压器-江苏天网 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 航空连接器,航空插头,航空插座,航空接插件,航插_深圳鸿万科 | 潍坊大集网-潍坊信息港-潍坊信息网| Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 储能预警-储能消防系统-电池舱自动灭火装置-四川千页科技股份有限公司官网 | 过跨车_过跨电瓶车_过跨转运车_横移电动平车_厂区转运车_无轨转运车 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | 昆明挖掘机修理厂_挖掘机翻新再制造-昆明聚力工程机械维修有限公司 | 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | 润滑脂-高温润滑脂-轴承润滑脂-食品级润滑油-索科润滑油脂厂家 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 混合反应量热仪-高温高压量热仪-微机差热分析仪DTA|凯璞百科 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 北京遮阳网-防尘盖土网-盖土草坪-迷彩网-防尘网生产厂家-京兴科技 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 家用净水器代理批发加盟_净水机招商代理_全屋净水器定制品牌_【劳伦斯官网】 | 不锈钢水箱厂家,不锈钢保温水箱-山东桑特供水设备 |