深浅赋值+orm操作+Django-admin简单配置
程序员文章站
2022-06-13 07:55:43
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.
上一篇: IDEA使用总结