Python Web 框架-Django day05
目录
1.F查询和Q查询
2.原生的数据库操作方法
3.使用后台管理 models
day04
1.增加数据
Entry.objects.create(属性=值)
返回值:创建好的实体对象创建实体对象,通过save()完成保存
obj = Entry(属性=值)
obj.save()通过字典构建实体对象,通过save()完成保存
dic = {
'属性':'值',
}obj = Entry(**dic)
obj.save()
2.查询数据
- 所有的查询操作都要基于Entry.objects
- all()
将每个实体对象保存在列表中进行返回 values('列1',...)
将每个实体对象转换成字典再保存在列表中进行返回- values_list('列1',...)
将每个实体对象转换成元组再保存在列表中进行返回 get(条件)
查询只返回一条数据filter(条件)
- 构建等值条件
Entry.objects.filter(id=1)
- 构建不等值条件
使用 查询谓词(Field Lookups)
__gt,__ gte,__ lt,__ lte,__ contains,__ startswith,__ endnds,__ in,__ range,__ exact,__ date,__ month
- 构建等值条件
exclude(条件)
实现不等值条件判断order_by('列','列')
排序,默认是升序,降序的话则在列前加 "-"aggregate()
不带分组,整表做聚合
Entry.objects.aggregate(名=聚合函数('列'))
聚合函数:
Avg() ,Sum() ,Count(), Max(), Min()- annotate()
带分组的聚合Entry.objects.filter(条件).values('分组列').annotate(名=聚合函数('列')).filter(条件)
- all()
3.修改数据
- 修改单条数据
- 查
obj=Entry.objects.get()
- 改
obj.xxx = xxx - 保存
obj.save()
- 查
- 修改多条数据
调用QuerySet的update()实现批量修改
Entry.objects.filter(id=1).update(name='xxx')
4.数据删除
调用实体对象/QuerySet的 delete() 完成删除
1.F查询和Q查询
- F()
作用:在执行中获取某列的值
更新Author中所有人的age都 + 10SQL:update author set age=age+10
Django: Author.objects.all().update(age=age+10) 错误语法:
from django.db.models import F
F('列名'):允许取出该列的值
Author.object.all().update(age=F('age')+10) - Q()
作用:在查询条件中可以完成 or 操作
语法:
from django.db.modles import Q
Q(条件)|Q(表达式)
ex:查询Author中id为1 或 年龄 为48 的人的信息
Author.objects.filter(Q(id=1)|Q(age=48))
SQL: select * from author where id=1 or age=48;
2.原生的数据库操作方法
- 查询
函数:raw(sql语句)
语法:Entry.objects.raw(sql)
返回:QuerySet - 增删改
from django.db import connection
def doSQL(request):
with connection.cursor() as cursor:
sql = "delete from ..."
cursor.execute(sql)
return ' '
3.使用后台管理 models
- 后台的配置
登录地址:http://localhost:8000/admin
创建后台管理员
./manage.py createsuperuser
Username:输入用户名,默认为系统账户名
Email Address:电子邮件
Password:密码
Password(agian):重复密码 - 基本管理
- 在应用中的 admin.py 中注册要管理的数据
- admin.py
作用:注册需要管理的Models类,只有在此注册的Models类才允许被管理 - 注册Models
from .models import *
admin.site.register(Entry)
admin.site.register(Entry)
- admin.py
- 通过Models类的内部类 Meta 来定义展现形式
class Author(models.Model):
... ...
class Meta:- db_table
指定该实体类映射到表的名称
(该属性设置完成后需要同步回数据库) - verbose_name
定义实体类在 admin 中显示的名字(单数) - verbose_name_plural
定义实体类在 admin 中显示的名字(复数) - ordering
指定数据在后台管理中的排序方式,取值是一个列表,将排序的列表示在列表,默认升序,降序使用 -
- db_table
- 练习:
- 修改Publisher 的后台管理
- 更改表名为 publisher
- 修改展示名称为 出版社
- 修改每个属性对应的中文名称
class Publisher(models.Model):name = models.CharField(max_length=30,verbose_name='名称')address = models.CharField(max_length=200,verbose_name='地址')city = models.CharField(max_length=50,verbose_name='城市')country = models.CharField(max_length=50,verbose_name='国家')website = models.URLField(verbose_name='网站')def __str__(self):return self.nameclass Meta:db_table = 'publisher'verbose_name = '出版社'verbose_name_plural = verbose_name
- 修改Book的后台管理
- 更改表名为book
- 修改展示名为 书籍
- 指定排序 - 按出版时间降序排序
- 修改每个属性对应的中文名称
class Book(models.Model):title = models.CharField(max_length=50,verbose_name='名称')publicate_date = models.DateField(verbose_name='出版时间')def __str__(self):return self.titleclass Meta:db_table = 'book'verbose_name_plural = '书籍'ordering=['-publicate_date']
- 修改Publisher 的后台管理
- 在应用中的 admin.py 中注册要管理的数据
- 高级管理
- 在 admin.py 中 创建高级管理类并注册
- 定义 EntryAdmin 类,继承自 admin.ModelAdmin
class AuthorAdmin(admin.ModelAdmin):
pass - 注册高级管理类
admin.site.register(Entry,EntryAdmin)
- 定义 EntryAdmin 类,继承自 admin.ModelAdmin
- 允许在EntryAdmin中增加的属性
- list_display
作用:定义在 列表页 上显示的字段们
取值:由属性名组成的元组或列表 - list_display_links
作用:定义在列表页中也能够连接到详情页的字段们
取值:同上
注意:取值必须要出现在list_display中 - list_editable
作用:定义在列表页中就允许修改的字段们
取值:同上
注意:取值必须出现在list_display中但不能出现在list_display_links中 - search_fields
作用:添加允许被搜索的字段们
取值:同上 - list_filter
作用:列表页的右侧增加过滤器,实现快速筛选
取值:同上 - date_hierarchy
作用:列表页的顶部增加时间选择器,取值必须是DateField 或 DateTimeField的列名 - fields
作用:在详情页中,指定显示哪些字段并按照什么样的顺序显示
取值:由属性名组成的元组或列表 - fieldsets
作用:在详情页面中,对字段们进行分组显示的
注意:fieldsets 与 fields 是不能共存的
取值:
fieldsets = (
#分组1
('分组名称',{
'fields':('属性1','属性2'),
'classes':('collapse',),
}),
#分组2
())
练习:完成publisher的高级管理功能
- 在列表页显示name,address,city,website属性
- address 和 city是可编辑的
- 右侧增加过滤器,允许按照address和city进行筛选
- 顶部增加搜索框,允许按照name和website 进行搜索
- 详情页中分组显示
- name,address,city为‘基本选项’
- country,website 为‘高级选项’并可以折叠
class PublisherAdmin(admin.ModelAdmin):list_display = ('name','address','city','website')list_editable = ('address','city')list_filter = ('address','city')search_fields = ('name','website')fieldsets = (('基本选项',{'fields':('name','address','city'),}),('高级选项',{'fields':('country','website'),'classes':('collapse',),}))
- list_display
- 在 admin.py 中 创建高级管理类并注册
- 关系映射
- 一对一映射
- 语法
在关联的两个类中的任何一个类中:
属性=models.OneToOneField(Entry)class Author(models.Model):
... ...class Wife(models.Model):
... ...#增加对Author的一对一引用
author = models.OneToOneField(Author)在数据库中:
生成一个外键(author_id)列在 wife 表中,要引用自author 表中的主键在 Author 的实体中:
增加一个隐式属性叫wife - 查询
- 正向查询:直接通过关联属性查询即可
通过 wife 找 author
wife = Wife.objects.age(id=1)
author = wife.author - 反向查询:通过反向引用属性查询
通过 author 找 wife
author = Author.objects.get(id=1)
wife = author.wife
- 正向查询:直接通过关联属性查询即可
- 语法
- 一对多映射
- 语法
在‘多’实体中增加对‘一’实体中的引用
属性 = models.ForeignKey(Entry)ex:
Book (多) 和 Publisher (一) 实现一对多关联class Publisher(models.Model):
... ...class Book(models.Model):
... ...
publisher = models.ForeignKey(Publisher) - 查询
- 正向查询:通过Book查询Publisher
book = Book.objects.get(id=1)
publisher = book.publisher - 反向查询:
Django默认会在publisher中增加book_set属性,来表示对应的所有书籍的查询对象pub = Publisher.objects.get(id=1)
books = pub.book_set.all()
- 正向查询:通过Book查询Publisher
- 语法
- 多对多映射
- 语法
在关联的两个类的任意一个类中,增加:
属性 = models.ManyToManyField(Entry)class Author(models.Model):
... ...class Book(models.Model):
... ...authors = models.ManyToManyField(Author)
- 查询
- 正向查询:通过Book查询 Author
Author 属性只是提供了对关联表的一个查询引用,使用all(),values() 等方法获取最终数据
ex:
book = Book.objects.get(id = 1)
authors = book.authors.all() - 反向查询:
ex:
author = Author.objects.get(id = 2)
books = author.book_set.all()
- 正向查询:通过Book查询 Author
- 语法
- 一对一映射
详细笔记,请查阅
3vr5
Python Web 框架-Django day05相关推荐
- Python Web框架Django学习(二)
python web框架Django学习(二) 目录: 三.Django创建APP 四.创建登录页面,实现用户交互,后台管理用户(非数据库方式) ========================= ...
- Python web框架Django学习(1)
2019独角兽企业重金招聘Python工程师标准>>> 1.Django简介 (1)Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的 ...
- Python Web框架 Django项目搭建与测试详解
Django项目搭建 0. 项目准备: python:(目前更新到3.9了),下载地址: 点此下载python https://www.python.org/downloads/ python解释器: ...
- 基于Python web框架Django+Bootstrap的房源推荐系统
哈喽,大家好呀,本次给大家推荐一个房源推荐系统,以成都市的某几个区的数据为例,仿链接平台,主要业务逻辑是: 1)将链家的数据爬取下来存储为Json文件 2)Json文件向前端JavaScript传递参 ...
- Python Web框架Tornado的异步处理代码演示样例
1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...
- python web框架互相融合, Pyramid或取代Django
Django用久了,难免会感觉到自由度不够.不可否认,这种自由度的牺牲能够带来一些好处.比如,一体化的框架(full-stack framework)能够提供全面的solution,你不需要再为cac ...
- python搭建django框架,Python之Web框架Django项目搭建全过程
Python之Web框架Django项目搭建全过程 IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 注:可通过pip fre ...
- python twisted和flask_浅谈Python Web 框架:Django, Twisted, Tornado, Flask, Cyclone 和 Pyramid...
Django 是一个高级的 Python Web 框架,支持快速开发,简洁.实用的设计.如果你正在建一个和电子商务网站相似的应用,那你应该选择用 Django 框架.它能使你快速完成工作,也不必担心太 ...
- [Link]选择一个 Python Web 框架:Django vs Flask vs Pyramid
选择一个 Python Web 框架:Django vs Flask vs Pyramid
最新文章
- 使用 MSBuild 和 Windows Installer XML 执行自动发布(转)
- C#——实现IComparable接口、IComparableT 接口、IComparer接口、IComparerT 接口和ComparerT 类DEMO
- Android Studio 使用Log
- CentOS7桌面版系统使用的一些小技巧
- ubuntu中执行jupyter格式代码
- AssertJ断言系列一
- 最大似然估计_机器学习最大似然估计
- PCM data flow - 1 - Overview
- Class.isAssignableFrom instanceof 区别
- Visio使用注意事项
- H3C/ 华为 路由交换基础知识官方 PPT
- JADE学习笔记1:JADE简介与配置
- 《2018版-业余无线电(相关频率)对照表》
- 你绝没看如此详细的PDF去水印教程
- 世预赛:12强赛首战国足0-3不敌澳大利亚,下一场面对日本队国足会如何调整?
- MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具
- 16秋南开计算机应用答案,南开16秋学期《计算机应用基础》在线作业.doc
- Office服务器意外响应,Office 所有使用过程中未响应,崩溃,意外关闭
- 织梦DEDECMS 整合Kindeditor编辑器美化版nkeditor版可H5多图上传摒弃SWF上传
- Elasticsearch+X-pack和Java Transport方式连接
热门文章
- PPT计算机基础知识,计算机基础知识(精美版).ppt
- 《网上赚钱葵花宝典1.0完整版》
- 公安警务指挥一张图三维电子沙盘可视化地理信息大数据系统
- Lattice CrosslinkNx LIFCL-40应用连载6:搭建HDMI(DVI)发送系统
- 手机和单反变焦的区别 安卓相机
- .NET 横向打印,自定义纸张的横向打印
- C#中的反射原理及应用
- 简介NXP的车规级MCU之KEA系列
- python有一分数序列求前20项和答案_求分数序列前20项和matlab
- 5 分钟上手 Material 主题编辑器