django 基本使用教程

1. 创建工程

django-admin startproject 工程名

2. 创建应用

cd 工程名
mkdir apps
cd apps
python3 ../manage.py startapp 应用名

3. 数据库迁移

3.1 将应用添加到setting.py 的INSTALLED_APPS 中

3.2 生成迁移文件

python3 manage.py makemigrations

3.3 迁移

python3 manage.py migrate

4. 配置静态文件路径

STATIC_URL 访问静态文件的URL前缀
STATICFILES_DIRS 存放查找静态文件的目录

5. 数据库增加

save

from  .  import models
people = models.PeopleInfo(name="hhh",  age=3)
people.save()

create

from  .  import models
people = models.PeopleInfo.objects.create(name="hhh",  age=3)

6. 数据库修改

save

people = PeopleInfo.objects.get(name='hhh')
people.name = "HHH"
people.save()

update

PeopleInfo.objects.filter(name="HHH").update(name="HhH")

7. 数据库删除

模型类对象.delete()

people = PeopleInfo.objects.get(name="HhH")
people.delete()

模型类.objects.filter().delete()

PeopleInfo.objects.filter(name="HHH").delete()

8. 数据库查询

8.1 基本查询

8.1.1 get查询单一结果,如果不存在则会抛出 模型类. DoesNotExist 异常

      PeopleInfo.objects.get(name="HHH")

8.1.2 all 查询多个结果

      PeopleInfo.objects.all()

8.1.3 count 查询结果数量

      PeopleInfo.objecrs.count()

8.2 过滤查询

  • filter 过滤出多个结果
  • exclude 排除过滤掉符合条件剩下的结果
  • get过滤单一结果
  • 过滤条件表达语法如下
    属性名称__比较运算符=值 # 注意 属性名称 和 比较运算符之间是两个_

相等

exact:表示判等

        # 查询PeopleInfo表中id为1的对象
      PeopleInfo.objects.filter(id__exact=1) 可以简写 PeopleInfo.objects.filter(id=1)

模糊查询

contains:表示是否包含

      # 查询PeopleInfo表中name字段包含H的对象
      PeopleInfo.objects.filter(name__contains="H")

空查询

isnull:是否为null

      # 查询PeopleInfo表中name不为空的对象
     PeopleInfo.objects.filter(name__isnull=True)

范围查询(非连续)

in:是否包含在范围内

        # 查询PeopleInfo表中id为1,3,5的对象
      PeopleInfo.objects.filter(id__in=[1,3,5])

范围查询(连续)

range:是否包含在范围内

        # 查询PeopleInfo表中id为1到5之间的对象
      PeopleInfo.objects.filter(id__range=[1,5])

比较查询

  • gt:大于
  • gte:大于等于
  • lt:小于
  • lte:小于等于
      # 查询id大于3的对象
      PeopleInfo.objects.filter(id__gt=3)

返回满足条件以外的数据

  • exclude()
      # 查询id不等于3的对象
      PeopleInfo.objects.exclude(id__exact=3)

日期查询

  • pub_date 字段为 models.DateField(verbose_name='发布日期', null=True)
  • year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算
# 查询People表中pub_date字段的值为1998的
PeopleInfo.objects.filter(pub_date__year=1998)
# 查询People表中pub_date字段的值大于1998-1-1的
PeopleInfo.objects.filter(pub_date__gt='1998-1-1')

8.3 字段值进行比较

from django.db.models import F

8.3.1 F对象

  • 使用方法: F(属性名)
      # 查询money字段大于 age乘10
      PeopleInfo.objects.filter(money__gt=F("age")*10)

8.4 多条件过滤

8.4.1 Q对象进行多个条件查询

  • 使用方法: Q(属性名__运算符=值)
      # 查询 age 字段等于1 money大于500
      PeopleInfo.objects.filter(Q(age=1),Q(money__gt=500))
      PeopleInfo.objects.filter(Q(age=1)&Q(money__gt=500))
      # 查询 age 字段等于1 或  money大于500
       PeopleInfo.objects.filter(Q(age=1)|Q(money__gt=500))
       # 查询 age 字段等于1   money小于等于500
       PeopleInfo.objects.filter(Q(age=1), ~Q(money__gt=500))

8.4.2 多个条件查询

      # 查询 age 字段等于2 money 字段大于5000
      PeopleInfo.objects.filter(age__gt=2, money__gt=3000)
      # 查询 age 字段等于2 id字段大于3
      PeopleInfo.objects.filter(age__gt=2).filter(id__gt=3)

8.5 关联查询

由一到多

  • 使用方法: 一对应的模型类对象.多对应的模型类名小写_set
people = PeopleInfo.objects.get(id=1)
books = peopel.book_set.all()

由多到一

  • 使用方法: 多对应的模型类对象.多对应的模型类中的关系类属性名
book = Book.objects.get(id=1)
peoples = book.people

获取由多对一,获取一的属性值

  • 使用方法:多对应的模型类对象.关联类属性_id 可以为id 也可以 为其他字段
book = Book.objects.get(id=1)
book.people_id

9. 聚合函数

使用aggregate() 过滤器用来聚合函数

  • Avg平均
  • Count 数量
  • Max 最大
  • Min 最小
  • Sum 求和
from django.db.models import Sum
# 查询书的总量
BookInfo.objects.aggregate(Sum('readcount'))

10. 排序

  • 默认升序
PeopleInfo.objects.all().order_by('id')
  • 降序
PeopleInfo.objects.all().order_by('-id')

11. 分页

Paginator类方法

序号 方法名 说明
1 page(self, number) 返回第number页的page类实例对象

Paginator类属性

序号 属性名 说明
1 num_pages 返回分页之后的总页数
2 page_range 返回分页后的页码列表

Paginator实例方法

序号 方法名 说明
has_previous 判断当前页是否有前一页
has_next 判断当前页是否有下一页
previous_page_number 返回前一页的页码
next_page_number 返回下一页的页码

Paginator实例属性

序号 属性名 说明
1 number 返回当前页的页码
2 object_list 返回当前页的数据查询集
3 paginator 返回对应的Paginator类对象
# 查询数据
books = BookInfo.objects.all()
# 导入分页类
from django.core.paginator import Paginator
# 创建分页实例
paginator = Paginator(books, 2)  # 每页有2个数据
# 获取指定页码的数据
page_books = paginator.page(1)  # 第1页
# 获取分页数据
total_page=paginator.num_pages
posted @ 2021-01-12 17:51  萌新_python  阅读(921)  评论(0编辑  收藏  举报