django配置文件与admin相关内容

1. 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
复制代码

 

2. django配置文件源码

复制代码
"""
看源码不要想着所有的代码都看懂 看核心即可
"""
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. 基于setting源码编程

复制代码
"""在自己的项目中实现与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. RBAC

复制代码
# 基于角色的权限管理
    用户表
        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是含有正则的 不能简单的使用成员运算来判断
复制代码

 

 

7. admin配置参数

复制代码
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)
复制代码

 

posted @   thrombus  阅读(60)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示