欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

深浅赋值+orm操作+Django-admin简单配置

程序员文章站 2023-10-28 23:17:10
1 知识点 2 深浅copy 3 浅值深id 4 orm操作 5 ManyToManyField 虚拟字段 6 告诉Django orm 自动帮你创建第三张表 7 查询的时候可以借助该字段跨表 8 外键属性可赋值外联对象 9 Model.object下13个必会操作 10 返回QuerySet对象的... ......

 

  1 知识点
  2     深浅copy
  3         浅值深id
  4     orm操作
  5         manytomanyfield 虚拟字段
  6             告诉django orm 自动帮你创建第三张表
  7             查询的时候可以借助该字段跨表
  8         外键属性可赋值外联对象
  9         model.object下13个必会操作
 10             返回queryset对象的方法有
 11                 all()
 12                 filter()
 13                 exclude()
 14                 order_by()
 15                 reverse()
 16                 distinct()
 17             特殊的queryset
 18                 values()       返回一个可迭代的字典序列
 19                 values_list() 返回一个可迭代的元祖序列
 20             返回具体对象的
 21                 get()
 22                 first()
 23                 last()
 24             返回布尔值的方法有:
 25                 exists()
 26             返回数字的方法有
 27                 count()
 28         外键操作
 29             add
 30             remove
 31             set
 32             上面三个可以传一个或多个参数(可迭代数据类型)  并且即可以是数字也可以是对象
 33             clear
 34             不传参数 直接清空 
 35             以上方法使用时会清空缓存,所以不需要再用save()。
 36         跨表查询
 37             基于对象的跨表查询  (都是子查询),‘.’连接
 38                 基于对象的反向查询 除了一对一直接点表名小写就可以拿到关联对象
 39                 一对多个多对多反向都必须 表名小写_set
 40             基于双下划线的跨表查询 (都是联表查询)
 41             关键是:正向字段反向表名小写
 42         正-反向查询
 43             外键正向,按外键字段
 44             被外键反向,按表名小写
 45             
 46 8|0django终端打印sql语句
 47 
 48         
 49     if __name__ == '__main__':
 50         作为脚本执行时内容
 51     else:
 52         作为模块时内容
 53         
 54     查询集
 55         django中的queryset本质上是一个懒加载的对象,作用是进行表级操作,返回结果集(一张视图:类型<class 'django.db.models.query.queryset'>值<queryset [<person: person object (1)>, <person: person object (2)>]>或一条记录:类型<class 'testmodels.models.person'>值person object (1)),当结果集是视图时可链式调用。<queryset [<person: person object (1)>, <person: person object (2)>]>
 56     url路由反向解析---后台反向解析
 57         django.urls.reverse(name,args)
 58         
 59 只有理解并记住的才能算是自己的。才是对未来学习内容做减法。越接近本质、简洁模型,越利于理解、记忆。学习、运用、减负效果越好。
 60 10m对人陨石 100m对地区 1km对洲 10km 对行星陨石
 61 
 62 settings源码
 63     算法
 64         总结:manage.py 中设置'django_settings_module'缺省值为'untitled.settings'模块字符串,再利用上述方法读取全局设置'global_settings'为字典再向字典中写入用户设置(有优点:利用了键的再赋值实现了用户设置高优先级,和用户设置参数的可扩展性)
 65             'django_settings_module'='untitled.settings'
 66             'django_settings_module'+'global_settings'->'environment_variable'    
 67         第三方存储(如os.environ)暴露给用户的设置文件模块导入名,构造一个类来存储设置键值对,导入两个设置模块(用户设置文件要先从第三方读取模块名再利用importlib模块导入),依次利用getattr()、setattr()将两个设置模块的名称空间内键值对写入该类
 68     知识点
 69         importlib模块
 70             利用importlib可以导入‘模块名字符串’代表的模块
 71         os与sys
 72             os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
 73         项目测试启动文件
 74             /xxx.py
 75             import os
 76             import sys
 77             base_dir=os.path.dirname(__file__)
 78             sys.path.append(base_dir)
 79             ···
 80         from importlib模块
 81         getattr(名称空间(模块名))、setattr(object,name,value)
 82 
 83 admin文件用户配置
 84     配置类,继承admin.modeladmin类
 85         五大配置参数
 86             list_display 控制展示字段 注意不能放多对多字段
 87             list_display_links 控制链接展示字段 注意不能放多对多字段
 88             search_fields 多字段检索 注意不能放多对多字段
 89             list_filter 筛选列表 多用于放外键字段
 90             class bookconfig(admin.modeladmin):
 91                 list_display = ['title','price','publish_date','publish']
 92                 list_display_links = ['title','price']
 93                 search_fields = ['title','price']
 94                 list_filter = ['publish','authors']
 95                 def patch_init(self,request,queryset):#固定参数
 96                     queryset.update(price=666)#2.queryset选择集操作方法逻辑
 97                 patch_init.short_description = '价格批量修改'#3.方法简称
 98                 actions = [patch_init]#1.actions操作框批量处理函数方法列
 99             admin.site.register(models.book,bookconfig)
100     
101 admin运行逻辑
102     1.admin启动源码
103         django在启动的时候会依次执行每一个应用下的admin.py文件
104         manage.py->settings.py~~~'django.contrib.admin'->autodiscover_modules('admin',register_to=site)->adminsiteclass=import_string(apps.get_app_config('admin').default_site)
105         单例模式
106     2.注册源码
107         admin.py注册语句
108             admin.site.register(models.publish)  # 仅仅是将注册了的模型表和以模型表为参数实例化产生的对象
109             # 当做键值对存入了site对象中的_registry字段
110     3.url
111         admin会给每一个注册了的表生成增删改查四条url
112 路由分发的本质
113     路由:url('',func,none,none)      可迭代 路由分发的本质为视图函数替换为路由数列,多级为视图函数替换为标准路由分发组

 

 1 个性化后台管理应用设计与实现
 2     stark(自定义后台管理应用应用名)
 3         启动 通过stark读取其他应用中的stark.py
 4             令django一启动就要执行每一个应用下的stark.py文件#该文件如果被用户在应用下创建,替代应用下的admin.py文件
 5             算法:
 6                 配置文件中注册:
 7                     installed_apps = [
 8                         'stark.apps.starkconfig',
 9                     ]           
10                 app配置模块apps.py 添加:
11                     def ready(self):#函数重写
12                         from django.utils.module_loading import autodiscover_modules
13                         return autodiscover_modules('stark')
14         注册 在其他应用admin.py和urls.py中替代django.contrib.admin.site使用
15             应用下创建stark.py
16                 快复制django默认admin配置 django.contrib.admin.sites和django.contrib.admin.modeladmin中的内容,根据需要重写方法
17                 算法:
18                     site=管理站点类(admin中是adminsite()),
19                     管理站点类中需要用到模型管理类(admin中是django.contrib.admin.modeladmin),这两个类中的诸般方法根据用户需要重写
20                 1.二级路由分发
21                     为了实现二级路由生成,一级路由写在管理站点类,二级路有写在模型管理类,因为:
22                         class modelstark(object):
23                             list_display = ['__str__',]
24                             def __init__(self,model):
25                                 self.model = model
26                 2.