刘沙河 刘沙河
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希

花开半夏,半夏花开
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希
  • Python基础

  • Python进阶

  • Python并发编程

  • Django

    • django 常见命令
    • Django模板母版
    • Django视图
    • Django路由系统
    • Django--orm系统-指令&属性
      • 内容回顾(django路由系统)
        • 1.urlconf
        • 2.正则表达式
        • 3.分组和命名分组
        • 4.路由分发 include
        • 5.传递参数
        • 6.url的命名和反向解析
        • 7.namespace
      • 1.orm的字段和参数
      • 2.表的参数(了解)
      • 3. ORM查询(13条) 必知必会13条
      • 4.单表双下划线
      • 5.外键的操作
    • Django--orm系统 -分组聚合
    • Django-cookie&session
    • middleware中间件
    • Django 的身份认证系统
    • Django models 之字段详解
    • Django缓存系统
    • Django数据库系统
    • Django信号系统
    • Django序列化和反序列化
    • Django中admin用法
    • DRF 版本、认证、权限、限制、解析器和渲染器
    • DRF(Django REST Framework)框架
  • Flask

  • 爬虫

  • Python
  • Django
bigox
2021-03-22
目录

Django--orm系统-指令&属性

# 内容回顾(django路由系统)

# 1.urlconf

from django.conf.urls import url
from . import views

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^home/$', views.home,{}, name='home'),

]
1
2
3
4
5
6
7
8

# 2.正则表达式

r ^ $ [0-9] \d \w + ? * {4}

# 3.分组和命名分组

url上捕获参数 都是字符串

分组

url(r'^blog/([0-9]{4})/(\d{2})$', views.blogs, name='blogs'),
1

捕获的参数会按照位置传参传递给视图函数

命名分组

url(r'^blog/(?P<year>[0-9]{4})/(?P<month>\d{2})$', views.blogs, name='blogs'),
1

捕获的参数会按照关键字传参传递给视图函数

# 4.路由分发 include

from django.conf.urls import url, include
from django.contrib import admin
from app01 import views

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^app01/', include('app01.urls', namespace='app01')),
    url(r'^app02/', include('app02.urls', namespace='app02')),

]
1
2
3
4
5
6
7
8
9
10

# 5.传递参数

  url(r'^home/(?P<year>\d{4})$', views.home,{'year':2019}, name='home'),
1

# 6.url的命名和反向解析

静态路由

命名:

	url(r'^home/$', views.home, name='home'),
1

反向解析:

模板

{% url 'home' %} ——》 '/app01/home/'

py文件

from django.urls import reverse

reverse('home') ——》 '/app01/home/'

分组:

命名:

url(r'^blog/([0-9]{4})/(\d{2})$', views.blogs, name='blogs'),
1

反向解析:

模板

{% url 'blogs' '2019' '06' %} ——》 '/app01/blog/2019/06'

py文件

from django.urls import reverse

reverse('blogs,'args=('2019','07')) ——》 '/app01/blog/2019/07'

命名分组:

命名:

url(r'^blog/(?P<year>[0-9]{4})/(?P<month>\d{2})$', views.blogs, name='blogs'),
1

反向解析:

模板

{% url 'blogs' '2019' '06' %} ——》 '/app01/blog/2019/06' 按照位置传参

{% url 'blogs' month='06' year='2019' %} ——》 '/app01/blog/2019/06' 按照关键字传参

py文件

from django.urls import reverse

reverse('blogs,'args=('2019','07')) ——》 '/app01/blog/2019/07' 按照位置传参

reverse('blogs',kwargs={'year':'2018','month':'08'}) ——》 '/app01/blog/2018/08' 按照关键字传参

# 7.namespace

 url(r'^app01/', include('app01.urls', namespace='app01')),
1

{% url 'app01:home' %} ——》 '/app01/home/'

reverse('app01:home') ——》 '/app01/home/'


# 1.orm的字段和参数

  • orm字段--orm -----Object Relational Mapping

    AutoField   #设置自增主键
    IntegerField  #设置整数
    CharField    #设置字符串
    BooleanField  #设置布尔值  
    TextField    #设置文本
    DateTimeField  #设置日期时间
    	auto_now_add=True    # DateTime参数  --表示新增数据的时候会自动保存当前的时间
        auto_now=True        # DateTime参数  --表示新增、修改数据的时候会自动保存当前的时间
    
    DateField  #设置日期时间
        auto_now_add=True    # DateTime参数  --表示新增数据的时候会自动保存当前的时间
        auto_now=True        # DateTime参数  --表示新增、修改数据的时候会自动保存当前的时间
    DecimalField   #十进制的小数
    	max_digits       # DecimalField属性  小数总长度   5
        decimal_places   # DecimalField属性  小数位长度   2
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
  • 自定义字段(了解)

  • 字段参数

    null = Ture    # 数据库中字段可以为空
    blank=True    #form表单填写时可以为空
    default       # 字段的默认值
    db_index=True   # 创建索引
    unique     #值唯一
    edittable=True  #可编辑
    hrlptext='提示信息'
    choices=((0, '女'), (1, '男'))    #可填写的内容和提示
    
    1
    2
    3
    4
    5
    6
    7
    8
class Person(models.Model):
    pid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    age = models.IntegerField(default=18)
    birth = models.DateTimeField(auto_now_add=True)
    phone = models.CharField(max_length=11,null=True,blank=True)
	gender= models.BooleanField('性别',choices=((0, '女'), (1, '男')))   #选择性别,默认为0
1
2
3
4
5
6
7

# 2.表的参数(了解)

class Person(models.Model):
    pid = models.AutoField(primary_key=True)
    class Meta:
    db_table = "person"  # 表名

    verbose_name = '个人信息'

    verbose_name_plural = '个人信息'

    index_together = [
        ("name", "age"),  # 联合索引,应为两个存在的字段
    ]
    unique_together = (("name", "age"),)   # 应为两个存在的字段
1
2
3
4
5
6
7
8
9
10
11
12
13

# 3. ORM查询(13条) 必知必会13条

#all()   获取所有的数据   ——》 QuerySet   对象列表
ret = models.Person.objects.all()

# get()  获取满足条件的一个数据   ——》 对象
#  获取不到或者多个都报错
ret = models.Person.objects.get(pk=1)

# filter()    获取满足条件的所有数据   ——》 QuerySet   对象列表
ret = models.Person.objects.filter(pk=1)

# exclude()    获取不满足条件的所有数据   ——》 QuerySet   对象列表
ret = models.Person.objects.exclude(pk=1)

# values()拿到对象所有的字段和字段的值 QuerySet  [ {} ,{} ]
# values('字段')  拿到对象指定的字段和字段的值 QuerySet  [ {} ,{} ]
ret = models.Person.objects.values('pid','name')

# values_list()    拿到对象所有的字段的值    QuerySet  [ () ,() ]
# values('字段')   拿到对象指定的字段的值      QuerySet  [ {} ,{} ]
ret = models.Person.objects.values_list('name','pid')

# order_by  排序   - 降序加一个负号    ——》 QuerySet  [ () ,() ]
ret = models.Person.objects.all().order_by('age','-pid') #传多个参数

# reverse  反向排序   只能对已经排序的QuerySet进行反转
ret = models.Person.objects.all()
ret = models.Person.objects.all().reverse()

# distinct 去重  完全相同的内容才能去重
ret = models.Person.objects.values('age').distinct()

#  count()  计数
ret = models.Person.objects.all().count()

# first  取第一元素   没有元素 None
# last  取最后一元素   没有元素 None
ret = models.Person.objects.filter(pk=1).values().first()

# exists 查询的数据是否存在
ret = models.Person.objects.filter(pk=1000).exists()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  • 帮助记忆

    #返回queryset
    all()    
    filter()
    exclude()
    values()  
    values_list() 
    order_by() 
    reverse() 
    distinct()
    
    #返回对象
    get() 
    first()
    last()
    
    #返回数字
    count()
    
    #返回布尔值的
    exists()
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

# 4.单表双下划线

ret = models.Person.objects.filter(pk=1)   # 等于1的
ret = models.Person.objects.filter(pk__gt=1)   # gt  greater than   大于1的
ret = models.Person.objects.filter(pk__lt=3)   # lt  less than   小于3的
ret = models.Person.objects.filter(pk__gte=1)   # gte  greater than equal    大于等于1的
ret = models.Person.objects.filter(pk__lte=3)   # lte  less than  equal  小于等于

ret = models.Person.objects.filter(pk__range=[2,3])   # range  范围
ret = models.Person.objects.filter(pk__in=[1,3,10,100])   # in  成员判断

ret = models.Person.objects.filter(name__contains='A')	#内容中包含A的
ret = models.Person.objects.filter(name__icontains='A')   # 忽略大小写

ret = models.Person.objects.filter(name__startswith='a')  # 以什么开头
ret = models.Person.objects.filter(name__istartswith='A') # 忽略大小写


ret = models.Person.objects.filter(name__endswith='a')  # 以什么结尾
ret = models.Person.objects.filter(name__iendswith='I') # 忽略大小写


ret  = models.Person.objects.filter(birth__year='2019')	#取年份
ret  = models.Person.objects.filter(birth__contains='2018-06-24')
ret  = models.Person.objects.filter(phone__isnull=False) #取不为空的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 5.外键的操作

  • 在多表关联后,产生外键.

    class Publisher(models.Model):
        name = models.CharField(max_length=32, verbose_name="名称")
    
    class Book(models.Model):
        title = models.CharField(max_length=32)
        pub = models.ForeignKey(Publisher, related_name='books',related_query_name='xxx',on_delete=models.CASCADE)
    
    
    1
    2
    3
    4
    5
    6
    7
  • 正反向查询

    • 从一查多查询时通过类名_set()查询
    • 从多查一的时候,直接通过外键查询
    # 基于对象的查询
    # 正向
    book_obj = models.Book.objects.get(title='菊花怪大战MJJ')
    # print(book_obj.pub)
    
    # 反向
    pub_obj = models.Publisher.objects.get(pk=1)
    # print(pub_obj.book_set.all())  # 类名小写_set   没有指定related_name
    # print(pub_obj.books.all())   #  指定 related_name='books'
    
    
    
    # 基于字段的查询
    ret = models.Book.objects.filter(title='菊花怪大战MJJ')
    #  查询老男孩出版的书
    ret = models.Book.objects.filter(pub__name='老男孩出版社')
    
    
    # 查询出版菊花怪大战MJJ的出版社
    # 没有指定related_name   类名的小写
    ret= models.Publisher.objects.filter(book__title='菊花怪大战MJJ')
    # related_name='books' 
    ret= models.Publisher.objects.filter(books__title='菊花怪大战MJJ')
    
    
    # related_query_name='xxx'(了解)
    ret= models.Publisher.objects.filter(xxx__title='菊花怪大战MJJ')
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
#Python#
上次更新: 2023/04/16, 18:35:33
Django路由系统
Django--orm系统 -分组聚合

← Django路由系统 Django--orm系统 -分组聚合→

最近更新
01
go与http代理
05-24
02
自制申威架构k8s-reloader
12-06
03
Docker Buildx 教程
12-01
更多文章>
Theme by Vdoing | Copyright © 2020-2024 小刘扎扎 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式