知识点
深浅copy
浅值深id
orm操作
ManyToManyField 虚拟字段
告诉Django orm 自动帮你创建第三张表
查询的时候可以借助该字段跨表
外键属性可赋值外联对象
Model.object下13个必会操作
返回QuerySet对象的方法有
all()
filter()
exclude()
order_by()
reverse()
distinct()
特殊的QuerySet
values() 返回一个可迭代的字典序列
values_list() 返回一个可迭代的元祖序列
返回具体对象的
get()
first()
last()
返回布尔值的方法有:
exists()
返回数字的方法有
count()
外键操作
add
remove
set
上面三个可以传一个或多个参数(可迭代数据类型) 并且即可以是数字也可以是对象
clear
不传参数 直接清空
以上方法使用时会清空缓存,所以不需要再用save()。
跨表查询
基于对象的跨表查询 (都是子查询),‘.’连接
基于对象的反向查询 除了一对一直接点表名小写就可以拿到关联对象
一对多个多对多反向都必须 表名小写_set
基于双下划线的跨表查询 (都是联表查询)
关键是:正向字段反向表名小写
正-反向查询
外键正向,按外键字段
被外键反向,按表名小写 8|0Django终端打印SQL语句 if __name__ == '__main__':
作为脚本执行时内容
else:
作为模块时内容 查询集
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)>]>
URL路由反向解析---后台反向解析
django.urls.reverse(name,args) 只有理解并记住的才能算是自己的。才是对未来学习内容做减法。越接近本质、简洁模型,越利于理解、记忆。学习、运用、减负效果越好。
10m对人陨石 100m对地区 1km对洲 10km 对行星陨石 settings源码
算法
总结:manage.py 中设置'DJANGO_SETTINGS_MODULE'缺省值为'untitled.settings'模块字符串,再利用上述方法读取全局设置'global_settings'为字典再向字典中写入用户设置(有优点:利用了键的再赋值实现了用户设置高优先级,和用户设置参数的可扩展性)
'DJANGO_SETTINGS_MODULE'='untitled.settings'
'DJANGO_SETTINGS_MODULE'+'global_settings'->'ENVIRONMENT_VARIABLE'
第三方存储(如os.environ)暴露给用户的设置文件模块导入名,构造一个类来存储设置键值对,导入两个设置模块(用户设置文件要先从第三方读取模块名再利用importlib模块导入),依次利用getattr()、setattr()将两个设置模块的名称空间内键值对写入该类
知识点
importlib模块
利用importlib可以导入‘模块名字符串’代表的模块
os与sys
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
项目测试启动文件
/xxx.py
import os
import sys
BASE_DIR=os.path.dirname(__file__)
sys.path.append(BASE_DIR)
···
from importlib模块
getattr(名称空间(模块名))、setattr(object,name,value) admin文件用户配置
配置类,继承admin.ModelAdmin类
五大配置参数
list_display 控制展示字段 注意不能放多对多字段
list_display_links 控制链接展示字段 注意不能放多对多字段
search_fields 多字段检索 注意不能放多对多字段
list_filter 筛选列表 多用于放外键字段
class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish_date','publish']
list_display_links = ['title','price']
search_fields = ['title','price']
list_filter = ['publish','authors']
def patch_init(self,request,queryset):#固定参数
queryset.update(price=666)#2.queryset选择集操作方法逻辑
patch_init.short_description = '价格批量修改'#3.方法简称
actions = [patch_init]#1.actions操作框批量处理函数方法列
admin.site.register(models.Book,BookConfig) admin运行逻辑
1.admin启动源码
django在启动的时候会依次执行每一个应用下的admin.py文件
manage.py->settings.py~~~'django.contrib.admin'->autodiscover_modules('admin',register_to=site)->AdminSiteClass=import_string(apps.get_app_config('admin').default_site)
单例模式
2.注册源码
admin.py注册语句
admin.site.register(models.Publish) # 仅仅是将注册了的模型表和以模型表为参数实例化产生的对象
# 当做键值对存入了site对象中的_registry字段
3.URL
admin会给每一个注册了的表生成增删改查四条url
路由分发的本质
路由:url('',func,None,None) 可迭代 路由分发的本质为视图函数替换为路由数列,多级为视图函数替换为标准路由分发组
 个性化后台管理应用设计与实现
stark(自定义后台管理应用应用名)
启动 通过stark读取其他应用中的stark.py
令django一启动就要执行每一个应用下的stark.py文件#该文件如果被用户在应用下创建,替代应用下的admin.py文件
算法:
配置文件中注册:
INSTALLED_APPS = [
'stark.apps.StarkConfig',
]
app配置模块apps.py 添加:
def ready(self):#函数重写
from django.utils.module_loading import autodiscover_modules
return autodiscover_modules('stark')
注册 在其他应用admin.py和urls.py中替代django.contrib.admin.site使用
应用下创建stark.py
快复制Django默认admin配置 django.contrib.admin.sites和django.contrib.admin.ModelAdmin中的内容,根据需要重写方法
算法:
site=管理站点类(admin中是AdminSite()),
管理站点类中需要用到模型管理类(admin中是django.contrib.admin.ModelAdmin),这两个类中的诸般方法根据用户需要重写
1.二级路由分发
为了实现二级路由生成,一级路由写在管理站点类,二级路有写在模型管理类,因为:
class ModelStark(object):
list_display = ['__str__',]
def __init__(self,model):
self.model = model
2.

深浅赋值+orm操作+Django-admin简单配置的更多相关文章

  1. Django Admin 简单部署上线

    前言 打算为公司弄一个管理公用密码的平台,由于比较懒,就选择使用Django admin,默认的admin并不漂亮,于是我使用了这个django-suit插件来美化 如图: 是不是比原来的漂亮多了. ...

  2. Django admin参数配置

    admin参数配置 一. admin 启动 admin: Django的后台数据管理的web版本 针对Food表,url: http://127.0.0.1:8000/admin/app02/food ...

  3. 如何给django admin.py配置超级管理员?注册表格?

    admin.py是django给我们提供的功能非常强大的后台,况且支持拓展,,如果你要是觉得admin的后台不够牛逼你可以自己写一个!如何自己写一个后台,后面我有时间了会给大家更新!一起学习!一起进步 ...

  4. django admin site配置(二)

    1. ModelAdmin.inlines 将有外键的子类包含进视图 ,实例: class Author(models.Model): name = models.CharField(max_leng ...

  5. Django admin简单介绍

    生成同步数据库的脚本: python manage.py makemigrations 同步数据库: python manage.py migrate 创建后台用户 python manage.py ...

  6. 【Django admin 中文配置】

    打开settings.py文件,找到语言编码.时区的设置项,将内容改为如下: [其中 zh-Hans是简体中文 zh-Hant是繁体中文] LANGUAGE_CODE = 'zh-Hans' # LA ...

  7. 01: 重写Django admin

    目录: 1.1 重写Django admin项目各文件作用# 1.2 重写Django admin用户认证 1.3 将要显示的表注册到我们自己的kind_admin.py中 1.4 项目首页:显示注册 ...

  8. Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作

    静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...

  9. WEB框架Django之ORM操作

    一 ORM的简介 MVC或者MVC框架中包括的一个重要部分就是ORM,它实现了数据模型与数据库的解耦. 即数据模型的设计不需要依赖于特定的数据库,通过简单的配置可以轻松更换数据库,这可以大大减少开发人 ...

随机推荐

  1. 201871010128-杨丽霞《面向对象程序设计(java)》第十三周学习总结

    201871010128-杨丽霞<面向对象程序设计(java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  2. SpringBoot使用@Value来获取properties的值

    今天在项目中想使用@Value来获取Springboot中properties中属性值.场景:定义了一个工具类,想要获取一些配置参数,使用了@value来获取,但是死活也获取不到.如何解决:在使用这个 ...

  3. 史上最全NOIP初赛知识点

    CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...

  4. JS判断是否是ioS或者Android

    每个客户端都带有自身的UA标识,通过JavaScript,可以获取客户端标识,我们可以获取浏览器的userAgent,用正则来判断手机是ios(苹果)还是Android(安卓)客户端. 项目实例:ht ...

  5. 洛谷P2996 [USACO10NOV]拜访奶牛Visiting Cows

    题目 树形dp 设f[i][j]表示走到第i号节点的最大权值 j为0/1表示这个点选或者不选 如果这个点不选 就从他的子树里的选或者不选选最大 如果这个点选 就加上他子树的不选 f[x][0] += ...

  6. machine_math2

    1. 2. 3.拉格朗日对偶??? 弱对偶 强对偶: <1>slater条件(强对偶的充分条件): 1.凸函数. 2.存在一个可行解满足不等式成立. 4.KKT条件

  7. [LeetCode] 890. Find and Replace Pattern 查找和替换模式

    You have a list of words and a pattern, and you want to know which words in words matches the patter ...

  8. [LeetCode] 419. Battleships in a Board 平板上的战船

    Given an 2D board, count how many battleships are in it. The battleships are represented with 'X's, ...

  9. zlib: 不同语言,比如go, php, python 压缩的结果可能不同

    1.这个是实际工作中发现的问题,一边用了go语言对一个文件进行了zlib压缩,然后我用 php 写了个脚本对同一个文件进行zlib压缩,但是生成的两个文件不同,当时一直以为是压缩参数选择错了,后来经过 ...

  10. NTT&FFT(快速?变换)

    NTT&FFT 预先知识:无 我觉得我们可以从NTT/FFT讲起? 两个其实本质相同,都是求 多项式乘积 的算法 FFT \((x,y)\)指复数,我们可以不用管它 首先我们构造单位根\(\o ...