### 一、内容回顾
#### 1. URL反向解析
```python
path('login/', views.login, name="login"),
```
1. 视图中使用
```python
from django.urls import reverse
url = reverse("login")
```
2. 模板中使用
```html
{% url 'login' %}
```
好处:便于扩展,当你的url发生改变的时候,通过反向解析的话,直接能获取最新的URL,不用自己手动修改。
#### 2. 名称空间
背景:
多个app时,下面有同名的name时,可以通过指定名称空间。来定位到,具体URL。
django1与django2的区别:
django1
```python
url('^app01/', include("app01.urls", namespace="app01")),
```
django2
```python
path('app01/', include(("app01.urls", "app01"))),
path('app02/', include(("app02.urls", "app02"), namespace="app02")),
```
1. 视图中使用
```python
url = reverse("app01:login") # login是app01下的
```
2. 模板中使用
```html
{% url 'app01:login' %}
```
#### 3. ORM简介
1. 概念
对象关系映射(Object Relational Mapping,简称ORM)
2. 优点:
1. 写python代码,实现对数据表的相关操作。提高开发效率;
2. 平滑切换数据库。
3. 缺点:
1. python代码,转换SQL需要时间,效率相对会有影响;
2. SQL能力下降;
4. django如何使用mysql数据库
1. 手动创建数据库
```sql
create database 库名 default charset=utf8;
```
2. settings里配置
```python
DATABASES = {
'default':{
'ENGINE': 'django.db.backends.mysql', # 引擎
'HOST': '127.0.0.1', # 数据库所在ip
'PORT': 3306, # 端口
'NAME': '数据库名', #
'USER': '用户名',
'PASSWORD': '', # 密码为空时,空字符串
}
}
```
3. 配置init(settings同级的init文件)
```python
import pymysql
pymysql.install_as_MySQLdb()
```
4. 在models里定义模型类
```python
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=32)
...
```
5. 命令行输入命令
```python
python manage.py makemigrations # 记录models变更记录下来
python manage.py migrate # 同步到数据库
```
5. 单表操作
1. 新增
1. 方式一:
```python
book = models.Book(title="xxids", price=234,...)
book.save() # 同步到数据库
```
2. 方式二:(objects管理对象)
```python
book = models.Book.objects.create(title="xxids", price=234,...)
```
2. 查询
1. QuerySet类似列表
1. all 返回所有数据,对象
2. filter 返回过滤满足条件的 对象列表。
3. order_by 默认是升序,降序-
4. values 类似字典。
5. reverse 反转
6. distinct 去重
7. values_list 类似元组
8. exclude 跟filter相反
2. 返回对象
1. get方法 (多个结果和没有结果会报错,有且只能有一个才行)
2. first方法 获取最开始的一个
3. last 方法 获取最后一个。
3. 返回数据类型
1. exists 返回值布尔值。判断是否有数据。
2. count 返回int 计数。
### 二、今日概要
1. 模糊查询
2. 单表删除
3. 单表修改
4. 作业讲解
5. ORM扩展(?)
### 三、今日详细
#### 1. 模糊查询
#### 2. 编辑操作
1. 新增的流程
![1552617211012](../课上截图/1552617211012.png)
2. 编辑流程
![1552617443761](../课上截图/1552617443761.png)
2. 单表编辑操作(代码见前一天的orm_danbiao的edit_book视图)
1. 方式一 对象的形式 save同步数据
2. 方式二 objects管理对象 update方法
1. 关键字传参
2. **打散传参
#### 3. 单表删除操作
1. 流程
![1552624686590](../课上截图/1552624686590.png)
2. 删除方式
1. obj.delete()
2. queryset.delete() # 有多个时,会全部删除。