av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

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

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

一、舉例

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_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 = ’小貼士標(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)限不同,訪問(wèn)的界面展示也不相同

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

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

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

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.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 = ’權(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)限信息

# 通過(guò)自定義 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 # 設(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('無(wú)權(quán)訪問(wè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

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

動(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ì)到傳值的問(wèn)題,于是我們產(chǎn)生了自定過(guò)濾器。

首先自定過(guò)濾器

# web.py 文件中from django.utils.safestring import mark_safefrom django.template import Libraryimport reregister =Library()@register.inclusion_tag('rbac/menu.html')# 將當(dāng)前函數(shù)的 permission_menu_dict 傳給 rbac 的 menu.htmldef get_menu_styles(request): ''' 自定義過(guò)濾器 :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='http://www.4tl426be.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 根據(jù)choice字段選擇的不同來(lái)顯示不同的頁(yè)面方式

以上這篇django admin 根據(jù)choice字段選擇的不同來(lái)顯示不同的頁(yè)面方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 免费看毛片网站 | 国产午夜精品一区二区三区视频 | 亚洲另类色图 | 午夜影院免费 | 一本色道久久综合亚洲精品酒店 | 亚洲欧美一区二区三区在线 | 国产精品福利一区 | 久久精品小视频 | 亚洲国产中文字幕 | 毛片av在线| 最近中文字幕在线 | 国产精品久久久一区二区 | 成人午夜av | 美国黄色一级大片 | 视频一区二区在线播放 | 国产尤物视频 | 成人福利在线观看 | 国产精品美女久久 | 久视频在线 | 国产精品九九九九 | 成人午夜激情视频 | 国产精品国产精品国产专区不卡 | 手机看片欧美 | 男人的天堂亚洲 | 久久亚洲免费视频 | 婷婷久久五月天 | 免费毛片在线播放 | 一区二区三区免费在线观看 | 欧美视频久久 | 黄色一节片 | 韩国精品一区二区 | 日韩欧美一区二区三区 | 簧片在线免费观看 | 黄色三级av | 91久久久久 | 国产第一福利 | 亚洲国产天堂 | 黄色精品视频 | 欧美三级韩国三级日本三斤在线观看 | 国产激情综合五月久久 | 一区二区三区在线免费观看 |