初始django

下载安装django
创建项目
创建应用
mtv 模式

django 路由

路由匹配的三种模式

include 包含路由

django视图

函数视图

类视图

请求对象

响应对象

反向解析

django 模板

模板引擎

Django 需要一种方便的方式来动态生成 HTML

TDL,janjia2
settings 配置

模板中的变量

字符串 + 数字
列表
字典

模板标签

csrf_token
if else endif

for

  1. {% for item in data_list %}
  2. <li>内容</li>
  3. {% empty %}
  4. <li>暂无内容<li>
  5. {% endfor %}
  1. {% for article in article_list %}
  2. <ul>
  3. <li>{{ article }}</li>
  4. </ul>
  5. {% endfor %}

for … empty

  1. {% for article in article_list %}
  2. <ul>
  3. <li>{{ article }}</li>
  4. </ul>
  5. {% empty %}
  6. <p> 文章不存在 </p>
  7. {% endfor %}

cycle

  1. <style>
  2. .row1 {
  3. color: red
  4. }
  5. .row2 {
  6. color: chocolate
  7. }
  8. </style>
  9. {% for article in article_list %}
  10. <ul>
  11. <li class="{% cycle 'row1' 'row2' %}">{{ article }}</li>
  12. </ul>
  13. {% empty %}
  14. <p> 文章不存在 </p>
  15. {% endfor %}
  1. {% for key, value in info.items %}
  2. <p>{{ key }}: {{ value }}</p>
  3. {% endfor %}
  1. {% if 18 <= info.age and info.age <= 25 %}
  2. 青春年少
  3. {% else %}
  4. 未成年
  5. {% endif %}

模板过滤器

模板继承和包含

extends
include

django模型

orm

orm 全称 Object-relational-mapping ,翻译过来就是对象关系映射。
我们先来介绍一下为什么要使用它。
我们在做的web开发,很多时候就是在面向数据库编程。操作数据库呢,就需要使用SQL语句,比如,这里我们要查询用户名为andy的数据。但是,我们需要使用编程语言例如Python, Java来操作数据库,而这些编程语言支持面向对象。所以,是否可以通过一种映射关系,不需要我们编写SQL语句,而是使用面向对象的方式来查询和操作数据库呢?这时候,ORM应运而生。简单来说,ORM就是让我们使用编程语言而不是SQL与数据库进行交互。

下面我们来看一下,他们是的映射关系。
在数据库中,有数据表,数据行,和字段, 那么,他们分别对应中面向对象中的类,对象,和属性。例如:
没使用orm前,我们需要创建数据表和字段,而现在我们用这种方式来创建。
然后通过实例化这个类,用类对象来操作数据的增删改查等等。
这就是orm。小伙伴,你学会了吗?

模型的增删改查

create : 新增/插入数据
read: 去取或查询数据
update: 修改
delete: 删除数据

新增数据

方式1: sava()保存
方式2:create新增数据
方式3:bulk_create()批量新增数据

实例1:save()

  1. user_obj = User(username='zhangsan', password='123456')
  2. user_obj.save()

实例2: create()

  1. user_obj = User.objects.create(username='admin', password='password')

实例3:bulk_create()

  1. user1 = User(username='zhangsan', password='123456')
  2. user2 = User(username='lisi', password='123456')
  3. userlist = [user1, user2]
  4. User.objects.bulk_create(user_list)

关联插入

插入文章时,插入作者。

  1. Article.objects.create(user=user, title='第一篇文章')

查询

all(): 返回所有数据
get(*kwargs): 按照查询条件返回单条数据
latest(
fields)/earlist(*fileds): 返回最晚/最早的一条记录
first()/ last() : 返回第一条 / 最后一条记录

快捷方式: 若有则返回,若无,则创建后返回

  1. object, created = User.objects.get_or_create(*args, **kwargs)

查询条件

get 和 filter的区别:https://stackoverflow.com/questions/3221938/difference-between-djangos-filter-and-get-methods

  • 相等/等于/布尔条件
  • 是否包含**字符串
  • 以**开始/结束
  • 日期及时间
  • 外键关联

exact 等于

  1. user1 = User.objects.get(id=6)
  2. user2 = User.objects.get(id__excact=6)

iexact 像

  1. user1 = User.objects.get(name__iexact='zhangsan')

布尔条件

  • gt: 大于某个值
  • gte: 大于或等于某个值
  • lt: 小于某个值
  • lte: 小于或等于
  • isnull: 是否为空

是否包含

contains: 包含**值

  1. name__contains = 'andy'

icontains: 不区分大小写

  1. name__contains = 'san' # zhangsan , zhangSan

in: 在** 选项(列表)之内

以**开始/结束

  • startswith, istartwith: 以** 开始
  • endswith, iendswith: 以**结束

日期及时间

  • date : 日期
  • year: 年
  • month: 月
  • day: 天
  • hour/minute/second: 时分秒
  • week/ week_day: 星期
  1. Article.objects.filter(updated_at__year=2022).count()
  2. from datetime import datetime
  3. new_year = datetime(2022,1,1)
  4. Article.obejcts.filter(created_at=new_year)

多条件查询

方式1: filter()指定多个条件

  1. User.objects.filter(age_gte=20).filter(status=1)
  2. User.objects.filter(age_gte=20, status=1)

方式2: &运算符

  1. User.objects.filter(age__get=20)&User.objects.filter(status=1)

方式3:Q()函数的使用, 支持&(且)和 |(或)

  1. from django.db.models import Q
  2. query = Q(status=1) & Q(age__gte=20)
  3. User.obejcts.filter(query)
  4. # 实例2
  5. query = Q(nickname__icontains='张') | Q(nickname__icontains='李')
  6. User.objects.filter(query)

修改模型

方式1:save() 修改单条
方式2:update() 批量修改数据
方式3: bulk_update() 批量修改数据

save()

  1. user_obj = User.objects.get(username='zhangsan')
  2. user_obj.age = 20
  3. user_obj.save()

updata()

  1. user = user.objects.filter(age=0)
  2. user.update(age=19, statu=1)

bulk_update()
User.objects.bulk_update(ojbs, fileds, batch_size=None)

  • objs:需要修改的记录列表
    - fields: 指定需要修改的字段
    - batch_size: 每次提交多少记录进行修改 ```python list_user = [] user1 = user.objects.get(id=1) user2 = user.objects.get(id=2) user3 = user.objects.get(id=3) list_user = [user1, user2, user3]

list_user[0].age = 30 list_user[1].age = 20

User.objects.bulk_update(list_user,[‘age’]) ```

后台

调试

vscode调试