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

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

Django 自定義權限管理系統詳解(通過中間件認證)

瀏覽:32日期:2024-10-22 13:50:46

1. 創建工程文件, 修改setting.py文件

django-admin.py startproject project_name

特別是在 windows 上,如果報錯,嘗試用 django-admin 代替 django-admin.py 試試

setting.py 最終的配置文件

import osimport sys# Build paths inside the project like this: os.path.join(BASE_DIR, ...)BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.insert(0,os.path.join(BASE_DIR,'apps')) # Quick-start development settings - unsuitable for production# See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret!SECRET_KEY = ’!g%gzw+-t8*+c2irzcm=r_#*x$q^(x-(^prn7wpnph3w#j$1gl’ # SECURITY WARNING: don’t run with debug turned on in production!DEBUG = TrueALLOWED_HOSTS = [] # Application definitionINSTALLED_APPS = [ ’django.contrib.admin’, ’django.contrib.auth’, ’django.contrib.contenttypes’, ’django.contrib.sessions’, ’django.contrib.messages’, ’django.contrib.staticfiles’, ’apps.system’,] MIDDLEWARE = [ ’django.middleware.security.SecurityMiddleware’, ’django.contrib.sessions.middleware.SessionMiddleware’, ’django.middleware.common.CommonMiddleware’, # ’django.middleware.csrf.CsrfViewMiddleware’, ’django.contrib.auth.middleware.AuthenticationMiddleware’, ’django.contrib.messages.middleware.MessageMiddleware’, ’django.middleware.clickjacking.XFrameOptionsMiddleware’, ’libs.middleware.permission.permissionMiddleware’] ROOT_URLCONF = ’iFactory.urls’ TEMPLATES = [ { ’BACKEND’: ’django.template.backends.django.DjangoTemplates’, ’DIRS’: [os.path.join(BASE_DIR, ’templates’)], ’APP_DIRS’: True, ’OPTIONS’: { ’context_processors’: [’django.template.context_processors.debug’,’django.template.context_processors.request’,’django.contrib.auth.context_processors.auth’,’django.contrib.messages.context_processors.messages’, ], }, },] WSGI_APPLICATION = ’iFactory.wsgi.application’ # Database# https://docs.djangoproject.com/en/dev/ref/settings/#databasesDATABASES = { ’default’: { ’ENGINE’: ’django.db.backends.postgresql_psycopg2’, ’NAME’: 'iFactory', ’USER’: 'postgres', ’PASSWORD’: 'postgres', ’HOST’: '127.0.0.1', ’PORT’: '5432', ’CONN_MAX_AGE’: 5, }} # Password validation# https://docs.djangoproject.com/en/dev/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [ { ’NAME’: ’django.contrib.auth.password_validation.UserAttributeSimilarityValidator’, }, { ’NAME’: ’django.contrib.auth.password_validation.MinimumLengthValidator’, }, { ’NAME’: ’django.contrib.auth.password_validation.CommonPasswordValidator’, }, { ’NAME’: ’django.contrib.auth.password_validation.NumericPasswordValidator’, },] # Internationalization# https://docs.djangoproject.com/en/dev/topics/i18n/LANGUAGE_CODE = ’zh_Hans’TIME_ZONE = ’Asia/Shanghai’USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True # Static files (CSS, JavaScript, Images)# https://docs.djangoproject.com/en/dev/howto/static-files/STATIC_URL = ’/static/’STATICFILES_DIRS = ( os.path.join(BASE_DIR, ’static’), ) # Session settingSESSION_COOKIE_AGE = 30 * 60SESSION_ENGINE = ’django.contrib.sessions.backends.cache’ # session_permisson_keySESSION_PERMISSION_URL_KEY = 'perUrl'SESSION_MENU_KEY = 'menu'MENU_ALL = 'menuAll'MENU_PERMISSON = 'menuPer' # permissonLOGIN_URL = ’/login/’REGEX_URL = r’^{url}$’ # url作嚴格匹配SAFE_URL = [ ’/login/’,]

2. 根目錄創建apps文件夾(python包文件夾),創建應用system, 把應用放入到apps文件夾中

python manage.py startapp system, 在setting中的INSTALLED_APPS中添加對應的app

最終的目錄結構

Django 自定義權限管理系統詳解(通過中間件認證)

3. 修改system/model.py 文件

#-*-coding:utf-8-*-from django.db import models # Create your models here.class Menu(models.Model): ’’’ 菜單 ’’’ title = models.CharField(max_length=32, unique=True) parent = models.ForeignKey('Menu', null=True, blank=True) def __str__(self): # 顯示層級菜單 title_list = [self.title] p = self.parent while p: title_list.insert(0, p.title) p = p.parent return ’-’.join(title_list) class Permission(models.Model): ’’’ 權限 ’’’ title = models.CharField(max_length=32, unique=True) url = models.CharField(max_length=128, unique=True) menu = models.ForeignKey('Menu', null=True, blank=True) # 定義菜單間的自引用關系 # 權限url 在 菜單下;菜單可以有父級菜單;還要支持用戶創建菜單,因此需要定義parent字段(parent_id) # blank=True 意味著在后臺管理中填寫可以為空,根菜單沒有父級菜單 def __str__(self): # 顯示帶菜單前綴的權限 return ’{menu}---{permission}’.format(menu=self.menu, permission=self.title) class Role(models.Model): ’’’ 角色:綁定權限 ’’’ title = models.CharField(max_length=32, unique=True) # 定義角色和權限的多對多關系 permissions = models.ManyToManyField('Permission') def __str__(self): return self.titleclass User(models.Model): ’’’ 用戶 -- 角色劃分 ’’’ username = models.CharField(max_length=32) password = models.CharField(max_length=32) phone = models.CharField(max_length=11) email = models.EmailField() is_admin = models.BooleanField(default=False) is_push_email = models.BooleanField(default=True) is_push_phone = models.BooleanField(default=True) # create_datetime = models.DateTimeField(auto_now_add=True) # 定義用戶和角色的多對多關系 roles = models.ManyToManyField('Role') def __str__(self): return ’{username}---{phone}’ ’’.format(username=self.username, phone=self.phone)

4. 數據庫遷移

執行 python manage.py makemigrations system

執行python manage.py migrate system

Django 自定義權限管理系統詳解(通過中間件認證)

5. 建立userService.py文件(文件位置看上圖目錄),代碼如下:

from ..models import Menu def init_user_permission(request, user): ’’’ 查詢出用戶的所有權限,進行分類寫入session進行保存 :param request: :param user: :return: ’’’ # 查詢出用戶的所有權限 permisson_item_list = user.roles.values(’permissons__title’, ’permissons__url’, ’permissons__menu_id’ ).distinct() permisson_url_list = [] permisson_menu_list = [] all_menu_list = list(Menu.objects.values('id', 'title', 'parent_id')) for permission_item in permisson_item_list: permisson_url_list.append(permission_item['permissons__url']) if permission_item['permissons__menu__id']: temp = {'title': permission_item['permissons__title'],'url': permission_item['permissons__url'],'menu_id': permission_item['permissons__menu_id'] } permisson_menu_list.append(temp) # 寫入session from django.conf import settings request.session[settings.SESSION_PERMISSION_URL_KEY] = permisson_url_list request.session[settings.SESSION_MENU_KEY] = { settings.MENU_ALL: all_menu_list, settings.MENU_PERMISSON: permisson_menu_list, }

6. 建立views_user.py 文件:

#-*-coding:utf-8-*-from django.shortcuts import renderfrom django.http import JsonResponse, HttpResponsefrom apps.system.services import userServicefrom apps.system.models import User def user_login(request): ’’’ 用戶登錄 :param request: :return: ’’’ if request.method == 'GET': return render(request, 'login.html') else: res = {} username = request.POST.get('username') password = request.POST.get('password') user = User.objects.filter(username=username, password=password).first() if not user: res['status']= 'false' else: userService.init_user_permission(request, user) return JsonResponse(res)

注意: 以上的setting.py 增加的配置:

MIDDLEWARE = [ ’django.middleware.security.SecurityMiddleware’, ’django.contrib.sessions.middleware.SessionMiddleware’, ’django.middleware.common.CommonMiddleware’, # ’django.middleware.csrf.CsrfViewMiddleware’, ’django.contrib.auth.middleware.AuthenticationMiddleware’, ’django.contrib.messages.middleware.MessageMiddleware’, ’django.middleware.clickjacking.XFrameOptionsMiddleware’, ’libs.middleware.permission.permissionMiddleware’]

# Session settingSESSION_COOKIE_AGE = 30 * 60SESSION_ENGINE = ’django.contrib.sessions.backends.cache’ # session_permisson_keySESSION_PERMISSION_URL_KEY = 'perUrl'SESSION_MENU_KEY = 'menu'MENU_ALL = 'menuAll'MENU_PERMISSON = 'menuPer' # permissonLOGIN_URL = ’/login/’REGEX_URL = r’^{url}$’ # url作嚴格匹配SAFE_URL = [ ’/login/’,]

以上這篇Django 自定義權限管理系統詳解(通過中間件認證)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 干法制粒机_智能干法制粒机_张家港市开创机械制造有限公司 | 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | 诚暄电子公司首页-线路板打样,pcb线路板打样加工制作厂家 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 科普仪器菏泽市教育教学仪器总厂 | OLChemim试剂-ABsciex耗材-广州市自力色谱科仪有限公司 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 青海电动密集架_智能密集架_密集架价格-盛隆柜业青海档案密集架厂家 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 自动螺旋上料机厂家价格-斗式提升机定制-螺杆绞龙输送机-杰凯上料机 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 中控室大屏幕-上海亿基自动化控制系统工程有限公司 | 洛阳防爆合格证办理-洛阳防爆认证机构-洛阳申请国家防爆合格证-洛阳本安防爆认证代办-洛阳沪南抚防爆电气技术服务有限公司 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 交通信号灯生产厂家_红绿灯厂家_电子警察监控杆_标志杆厂家-沃霖电子科技 | 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 蓄电池回收,ups电池后备电源回收,铅酸蓄电池回收,机房电源回收-广州益夫铅酸电池回收公司 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 衬氟止回阀_衬氟闸阀_衬氟三通球阀_衬四氟阀门_衬氟阀门厂-浙江利尔多阀门有限公司 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 玻璃钢板-玻璃钢防腐瓦-玻璃钢材料-广东壹诺 | 广东成考网-广东成人高考网| 二维运动混料机,加热型混料机,干粉混料机-南京腾阳干燥设备厂 |