django配置文件、RBAC、admin配置类重要参数
django配置文件相关操作
1.django其实有两个配置文件 一个是暴露给用户可以自定义的基本配置 from 项目名 import settings 一个是全局的系统默认的配置(用户不指定的情况 采用的配置) from django.conf import global_settings 2.用户如果在暴露给用户的配置文件中指定了配置则使用用户的 不指定则又会使用系统默认的 # 思考:如何实现上述操作(两个配置文件相互兼容) """测试配置文件的兼容性 其实django系统默认支持很多国家的语言 只需要修改配置即可 LANGUAGE_CODE = 'en-us' 系统配置文件中还提供了很多其他语言配置 """ 3.暴露给用户的配置文件中有的配置 系统配置文件中肯定有 暴露给用户的配置文件中没有的配置 系统配置文件中也有 4.我们在django中如果想要使用配置文件 那么最正确的导入方式 from django.conf import settings # 思考:上述的settings既可以导入暴露给用户配置文件中的所有配置也可以导入系统默认的配置
""" 看源码不要想着所有的代码都看懂 看核心即可 """ 1.os.environ 可以看成是一个项目全局的大字典 任何地方都可以使用 2.django的入口文件是manage.py(也可以看成是启动文件) 3.os.environ.setdefault() 相当于给字典添加键值对 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day62_BBS.settings") from django.conf import settings class Settings(object): def __init__(self, settings_module): # 获取系统配置文件中所有的变量名 for setting in dir(global_settings): if setting.isupper(): # 校验变量名是否是纯大写(这就是为什么配置文件中的配置必须大写才能生效的原因) setattr(self, setting, getattr(global_settings, setting)) '''通过反射获取系统配置文件中所有的大写变量名和对应的值 赋值给settings对象''' self.SETTINGS_MODULE = settings_module mod = importlib.import_module(self.SETTINGS_MODULE) """rom day62_BBS import settings """ # 循环获取暴露给用户的配置文件中所有的变量名 for setting in dir(mod): if setting.isupper(): # 判断是否是纯大写 setting_value = getattr(mod, setting) setattr(self, setting, setting_value) # 给对象设置属性 class LazySettings(LazyObject): def _setup(self, name=None): # 获取暴露给用户的配置文件字符串路径 'day62_BBS.settings' settings_module = os.environ.get(ENVIRONMENT_VARIABLE) # 将上述字符串路径当做参数传给Settings类实例化 self._wrapped = Settings(settings_module) settings = LazySettings()
"""在自己的项目中实现与django配置文件一样的功能""" 模拟一个暴露给用户的配置文件 conf --settings.py 模拟一个系统内部默认配置文件 lib --conf ----global_settings.py

import importlib import os from lib.conf import global_settings class Settings(object): def __init__(self): for name in dir(global_settings): if name.isupper(): value = getattr(global_settings, name) setattr(self, name, value) module_path_str = os.environ.get('xxx') module_name = importlib.import_module(module_path_str) for name in dir(module_name): if name.isupper(): value = getattr(module_name, name) setattr(self, name, value) settings = Settings()
# web领域的权限 eg: 使用账号访问某个资源 有些人可以访问(VIP) 有些人不能访问(普通用户) ps:在web领域url其实就是权限 权限就是url """本质其实就是当用户登录之后 获取该用户的权限 之后每次用户发送网络请求先核对该请求地址是否在用户可以访问的url列表内 如果在则访问不在拒绝"""
"""用户数据多了之后与权限的绑定关系在第三张关系表中过于繁杂"""
# 基于角色的权限管理
用户表
角色表
权限表
用户角色关系表
角色权限关系表
"""
提前在角色和权限关系表中绑定好关系 之后又新用户
只有在用户和角色关系表中添加一两条数据即可,方便简介
"""
# url权限也不是固定写死的 可能会含有正则表达式 eg: /edit/book/1/ /edit/book/(\d+)/ /edit/book/?edit_id=1 /edit/book/.* 1.编写登陆功能 获取用户的权限并存储 2.校验每次用户访问的url比对是否含有该权限 自定义中间件 3.有些权限是所有用户都应该具备的 白名单:里面的东西所有人都可以访问 4.有些url是含有正则的 不能简单的使用成员运算来判断

from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse import re class MyPermission(MiddlewareMixin): def process_request(self, request): # 定义网站白名单 white_url_list = ['/login/', '/register/', '/admin/.*'] # 1.获取当前用户请求的url target_url = request.path # 1.1.先校验是否在白名单中 是则直接放行 for url in white_url_list: re_path = '^%s$' % url # 将白名单里面的url变成正则表达式 去校验用户访问的url res = re.search(re_path, target_url) if res: return # 2.获取当前用户的权限列表 permission_list = request.session.get('permission_list') # 3.判断当前请求url在不在用户可以访问的url列表中 '''也需要改成正则校验的方式''' # if target_url not in permission_list: # return HttpResponse("不好意思 你没有权限访问") for permission in permission_list: re_path = '^%s$' % permission res = re.search(re_path, target_url) if res: return return HttpResponse("你没有权限 滚蛋吧!!!")
class BookConfig(admin.ModelAdmin): list_display = ['title', 'price', 'publish_time'] # 控制展示的字段数量 list_display_links = ['price'] # 指定调整的字段数据 search_fields = ['title', 'price'] # 包含+或 查找 # 回想之前讲解的Q查询进阶用法 list_filter = ['publish','authors'] # 筛选功能 一般填写外键字段 普通字段没有实际意义 def patch_init(self,request,queryset): queryset.update(price = F('price') + 1000) patch_init.short_description = '价格批量处理' actions = [patch_init, ] # 自定义queryset的操作函数 admin.site.register(models.Book, BookConfig)
pip3 install django-debug-toolbar
https://www.cnblogs.com/Dominic-Ji/p/9260182.html
分类:
django
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人