django配置文件与admin相关内容
1.
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
2.
""" 看源码不要想着所有的代码都看懂 看核心即可 """ 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()
3.
"""在自己的项目中实现与django配置文件一样的功能""" 模拟一个暴露给用户的配置文件 conf --settings.py 模拟一个系统内部默认配置文件 lib --conf ----global_settings.py
4.
# web领域的权限 在web领域url其实就是权限 权限就是url """本质其实就是当用户登录之后 获取该用户的权限 之后每次用户发送网络请求先核对该请求地址是否在用户可以访问的url列表内 如果在则访问不在拒绝""" # 权限的设计 用户表 id name pwd 1 jason 123 2 tony 321 3 kevin 222 权限表 id permission 1 添加书籍 2 查看书籍 3 编辑书籍 4 删除书籍 用户与权限的关系表 id user_id permission_id 1 1 1 2 1 2 3 1 3 """上述的权限设计是存在缺陷的 用户数据多了之后与权限的绑定关系在第三张关系表中过于繁杂"""
5.
# 基于角色的权限管理 用户表 id name pwd 1 jason 123 2 tony 321 3 kevin 222 角色表 id role 1 CEO 2 保安 3 扫地僧 权限表 id permission url 1 添加书籍 /add/book/ 2 查看书籍 /check/book/ 3 编辑书籍 /edit/book/ 4 删除书籍 /delete/book/ 用户角色关系表 id user_id role_id 1 1 1 2 2 2 角色权限关系表 id role_id permission_id 1 1 1 2 1 2 3 1 3 4 1 4 """ 提前在角色和权限关系表中绑定好关系 之后又新用户 只有在用户和角色关系表中添加一两条数据即可!!! """
6.
# url权限也不是固定写死的 可能会含有正则表达式 eg: /edit/book/1/ /edit/book/(\d+)/ /edit/book/?edit_id=1 /edit/book/.* 1.编写登陆功能 获取用户的权限并存储 2.校验每次用户访问的url比对是否含有该权限 自定义中间件 3.有些权限是所有用户都应该具备的 白名单:里面的东西所有人都可以访问 4.有些url是含有正则的 不能简单的使用成员运算来判断
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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下