Django 入门
Django 入门
这篇文章仅仅我初步了解 Django 的入门笔记
一、 Django的框架模式 - MTV
M: Models 层
负责数据库的建模以及 CRUD操作
T: Templates 层
用于处理用户显示的内容 如 HTML
V: Views 层
处理用户交互操作,从模板中取得数据,再将数据发送给模板,并显示给用户
二、 Django 的使用
1.目录结构介绍
- 主目录(名称和项目名相同)
- init.py 项目初始化文件,每当服务器启动的时候,都会自动执行
- urls.py :项目的基础url 配置文件
- wsgi.py:应用服务器配置文件
- setting.py:项目的主设置文件
2.启动服务
script 1
2
3
4
5
6
7
8# 安装django
pip3 install django==2.0.2
# 进入桌面文件夹
cd desktop
# 创建新项目 mall
django-admin startproject mall
# 运行manage.py ,启动web服务器
python manage.py runservermanage.py 负责执行Django中的各项操作文件script 1
python manage.py runserver - 启动服务
- 创建管理员
- 创建应用
- 数据库的同步操作
三、URL的使用
1. urls.py:默认是在主目录中,主路由配置文件包含最基本的地址映射,每个请求到达之后都由urls.py 中的
urlpatterns 列表中的url()进行匹配
url() 函数匹配上 之后,可能将请求转交给其他urls.py 或者 试图(Views)去处理
url()函数语法:
url(regex,views,kwargs=None,name=None)
正则表达式:匹配请求的url
视图处理函数或者其他的urls.py
字典,用来给views 传参,没有参数可以省略
字符串,给url()起别名,主要在模板中使用
四、应用的结构组成
1. migrations 目录:存放数据库中间文件(日志文件)
2. __init__.py:应用的初始化文件
3. admin.py:应用的后台管理配置文件
4. apps.py:应用的属性配置文件
5. models.py:模型文件,与数据库有关
6. test.py:测试模块
7. views.py:定义视图的文件
五、数据三大特征
- 数据表 到 类 的映射,将数据表自动生成 一个 class 类 同时也允许将一个 class类自动生成数据库中的一张表
- 数据类型的映射 允许将表中的字段的数据类型 自动 映射成编程语言中对应的数据类型 也允许 将编程语言的数据类型 自动 映射 成表中的字段的数据类型
- 关系映射 在编程语言中允许将表与表之间的关系映射出来 表与表之间的关系也可以自动映射到编程语言的Class中4. 编写 Models - Models 中的每个class 都称为 模型类 实体类 - Models 中的每个模型类,必须继承 models.Model
模型 字段类型 和 字段选项
字段类型(Field Type)
- BooleanField()
- CharField()
- DateField()
- DateField()
- DateTimeField()
- DecimalField()
- EmailField() # 存电子邮件 - varchar
- FloatField()
- ImageField(upload_to=’’) # 存图片路径 - varchar
- IntergerField()
- URLField()
- TextField() # 存大量文本数据 - text
字段选项(Field Option)
数据模型的版本切换
1
2
3./manage.py migrate # 执行所有应用中最新的数据库中间文件
./manage.py migrate 应用名称 版本号 # 执行 应用中版本号对应的中间文件
./manage.py inspectdb > 文件名.py # 通过数据库自动导出 Models
六、连接 MySQL
环境按照
1
2
3sudo apt-get install python3-dev
sudo apt-get install python3-dev libmysqlclient-dev
pip install mysqlclient项目配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': '3306',
'USER': 'root',
'PASSWORD': 'root',
'NAME': 'django',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'charset': 'utf8mb4',
},
}
}
七、模型中的 CRUD
1.通过 ORM 向 DB 中添加数据
Entry.objects.create(属性=值,……)
Entry:具体要操作的Model类
1
Author.objects.create(name='张三',age='20')创建一个Models对象,通过对象save() 完成
1
2obj = Author(name='张三',age='20')
obj.save()使用 字典序 构建对象,通过save() 完成增加
1
2
3
4
5
6dic = {
'属性1': '值1',
'属性1': '值1',
}
obj = Entry(**dic)
obj.save()
2.查询操作(重难点)查询
通过Entry.objects 调用方法
- 基本查询操作
- all()
- 基本查询操作
查询指定列
- value()
排序函数
- order_by()
对条件取反
- exclude()
根据条件查询部分行数据 ==重难点==
使用Entry 中的属性作为查询参数,多个参数,用 , 隔开 映射到SQL 语句上是用 and 进行关联的
- filter()
通过 Field Lookup(查询表达式)完成复杂条件查询(这里有点像 QueryDSL,各种方法,但是按照SQL的思维来就可以了,只不过稍微要注意用法,直接去官网查询即可)
查询表达式:每个查询表达式都是一个独立的查询条件,可以用在所有查询条件的位置处
__exact:精确查询,等值判断
1
2User.objects.filter(id__exact=1)
select * from user where id = 1__contains():筛选出属性中包含指定关键字的记录(模糊查询)
1
2User.objects.filter(name__contains='jun')
select * from user where name like '%jun%'__lt:筛选出属性值小于指定值的记录
__lte:筛选出属性值小于等于指定值的记录
__gt:筛选出属性值大于指定值的记录
__gte:筛选出属性值大于等于指定值记录
__startswith:
__endswith:
查询只返回一条数据
Entry.objects.get(查询条件/表达式)
3. 修改数据
修改单个数据(这里可以类比 JAP里的对单个实体进行操作,先拿再改最后存)
1. 通过 get() 得到要修改的实体对象 2. 通过实体对象的属性修改属性值 3. 再通过 实体对象的save() 保存回数据库批量修改数据(这个意义不是太大)
Entry.objects.all().update(属性=值,属性=值)
update user set 属性=值, 属性=值
4. 删除数据
1 | |
八、安全
1. CSRF 跨站处理
- 本文作者:Jun
- 本文链接:http://mambajun.github.io/2019/11/24/Django-%E5%85%A5%E9%97%A8/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!

