1. Django的框架模式 - MTV
????????M: Model层 模型层,负责数据库的建模以及CRUD操作
????????T: Templates层 模板层,用于处理用户显示的内容,如HTML
????????V: Views层 视图层, 处理与用户交互的部分操作,从模型中提取数据
? ? ? ? MVC:?Model(同M) Views(同T) Controllers(处理与用户交互的部分内容,从模型中获取数据,再交给视图层,再显示给用户
2. Django的使用
1. Django的介绍
????????网站: https://www.djangoproject.com
2. Django的安装
????????1. 在线安装
????????????sudo pip3 install django
????????2. 离线安装
????????????1. 解压 tar -xvf Django-*tar.gz
????????????2. 安装 sudo python3 setup.py install
3. 使用django
????????1. 创建django项目
????????????django-admin startproject 项目名
????????2. 启动服务,用于访问
????????????使用manage.py 文件 启动服务
????????????python3 manage.py runserver
????????3. 访问网站
????????????启动服务成功后,在浏览器中,通过一下地址访问127.0.0.1:8000
3. Django项目结构介绍
1. manage.py
????????负责执行django中各项操作文件,如: 启动服务、创建管理员、创建应用、数据库的同步操作
2. 主目录(名称与项目名称相同)
?????????项目初始化文件,每当服务器启动的时候,都会自动执行
????????项目的基础url(路由)配置文件
????????????应用服务器配置文件
????????项目的主设置文件如下:
????????????1. BASE_DIR 获取当前项目的根目录路径
????????????2. DEBUG: 调试模式
????????????????开发过程:推荐使用True
????????????????上线运行:推荐使用False
????????????3. ALLOWED_HOSTS
????????????????设置允许访问本项目的地址列表
????????????????如果不设置的话,只有本机能访问
????????????????推荐写'*',表示任何地址都允许访问该项目(局域网)
????????????????运行服务器得用0.0.0.0:端口号
????????????4. INSTALLED_APPS
????????????????指定已安装的应用,如果有自定义应用的话,需要在此位置进行注册
????????????5. MIDDLEWARE
????????????????指定注册的中间件
????????????6. ROOT_URLCONF
????????????????指定项目的基础路由配置文件
????????????7. TEMPLATES : 指定模板的信息
????????????8. DATABASES: 指定数据库的信息
??????????9. LANGUAGE_CODE: 指定当前网站的语言,如果要使用中文则可以修改为 zh-Hans
????????????10. TIME_ZONE 指定时区,如果指定中国时区,则可以修改为 Asia/Shanghai
?????????默认是在主目录中,主路由配置文件,会包含最基本的地址映射。每个请求到达之后,都会由由url.py的URL_PATTERNS列表的url进行匹配url()函数匹配之后,可能将请求转交给其他的urls.py或视图(views)去处理
????????url函数的语法:?url(regex,views,kwargs=None,name=None)
????????????????regex:正则表达式,匹配请求的url
????????????????views:视图处理函数或其他的urls.py
????????????????kwargs:字典,用来向views传参,没有参数则可以省略
????????????????name:字符串,给url()起别名,主要在模板中使用
4. Django应用
????????应用就是网站中一个独立程序模块
????????在INSTALLED_APPS中进行注册:
????????????????NSTALLED_APPS = [
????????????????????????'django.contrib.admin',
????????????????????????……,
????????????????????????'news']
- migrations 目录:?存放数据库中间文件(日志文件)
-
__init__.py:?应用的初始化文件 -
admin.py:应用的后台管理配置文件 -
apps.py:?应用的属性配置文件 -
models.py:?模型文件,同数据库有关 -
tests.py:?测试模块,基本没用 -
views.py:?定义视图的文件
5. Django的Templates
1. 什么是模板
????????模板就是要动态给用户呈现的网页内容
????????其实就是一个网页 ?- 前后端结合的一个网页
2. 模板的设置
????????在settings.py中TEMPLATES变量
????????????1. BACKEND: 指定模板的搜索引擎,不用动
????????????2. DIRS:指定模板所存放目录们, DIRS = ['index.temp'] ???index目录下的temp目录是模板存放位置,如果DIRS为空的话,那么django会自动到每个应用中去搜索一个叫templates的目录来作为模板的管理目录。
????????????????推荐:DIRS内容保持为空 和 在每个应用中都创建一个templates目录
????????????3. APP_DIRS
????????????????True: 首先从dirs中指定的目录中查找模板,如果没有找到的话,再搜索templates目录
3. 模板的加载方式
-
使用loader获取模板,并通过HttpResponse进行响应
????????from django.template import loader
????????????1. 通过loader加载模板
????????????????t = loader.get_template('模板名称')
????????????2. 通过t对象,将模板渲染成字符串
????????????????html = t.render()
????????????3. 通过HttpResponse将html响应给客户端
????????????????return HttpResponse(html)
????????from django.shortcuts import render
????????return render(request, '模板名称', 要传给模板变量字典形式)
4 模板的语法
????????作用: 允许将后端的数据传递给模板,在模板中,会根据变量的值进行显示
????????数字,字符串,列表,元素,字典,函数,对象
????????1. loader
????????????????dic = {
????????????????????'变量名1':'值1',
????????????????????'变量名2':'值2',
????????????????}
????????????????t = loader.get_template('xxx.html')
????????????????return HttpResponse(t.render(dic))
????????????????在模板中显示变量: {{变量名}}
????????2. 标签
????????????????1. 什么是标签
????????????????????允许将服务器端的一些功能嵌入模板中
????????????????2. 语法
????????????????????{% 标签内容 %}
????????????????3、常用标签
????????????????????????1、for
????????????????????????????????{% for 变量 in 列表|元组|字典 %}
????????????????????????????????{% endfor %}
????????????????????????????????允许使用 for 提供的内置变量 - forloop
????????????????????????????????1、forloop.counter:记录当前循环的次数,从1开始
????????????????????????????????2、forloop.first:是否是第一次循环(第一项)
????????????????????????????????3、forloop.last:是否是最后一次循环(最后一项)
????????????????????????2、if
????????????????????????????????1、{% if 条件 %} 满足条件运行的内容 {% endif %}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 条件中允许使用 比较运算符(>,<,>=,<=,==,!=),逻辑运算符(not,and,or)
????????????????????????????????注意:and 和 or 不能同时出现
????????????????????????????????2、{% if 条件 %}满足条件运行的内容{% else %}不满足条件运行的内容{% endif %}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3、{% if 条件1 %}满足条件1运行的内容{% elif 条件2 %}满足条件2运行的内容{% elif 条件3 %}满足条件3运行的内容{% else %}以上条件都不满足的时候运行的内容{% endif %}
????????3、过滤器
????????????????1、作用:过滤数据,在显示变量的数据之前,允许对数据进行筛选或改变
????????????????2、语法: {{变量|过滤器:参数}}
????????????????3、简单的过滤器
????????????????????????1、{{value|upper}} 将value变为大写字符
????????????????????????2、{{value|lower}} 将value编写小写字符
????????????????????????3、{{value|add:num}} 将num累加到value之后
????????????????????????4、{{value|floatformat:n}} 将value四舍五入到n位小数
????????????????????????5、{{value|truncatechars:n}} 将字符串截取到n位(包含...)
6.?模型 Model
????????模型,是根据数据库中数据表的结构来创建出来的class。每一张表到编程语言中就是一个class,表中的每一个列,到编程语言中就是class的一个属性。并且在模型中还可以完成对数据的CRUD操作
-
创建和使用模型 - ORM【对象关系映射(object Relational Mapping)】
????????三大特征:
????????????1. 数据表到类(class)的映射
????????????????将数据表自动生成一个class类,同时也允许将一个class类自动生成数据库中的一张表
????????????2. 数据类型的映射
????????????????允许将表中的字段的数据类型 自动 映射成编程语言中对应的数据类型,也允许将编程语言的数据类型自动映射成表中的字段的数据类型
????????????3. 关系映射
????????????????在编程语言中允许将表与表之间的关系映射处理,表与表之间的关系也可以自动映射到编程语言的class中,数据库表中的关联关系: 一对一,一对多,多对多
????????优点:
????????????????1. 提高了开发的效率,能够自动完成表到对象的映射
????????????????2. 不用SQL编码,也能够完成对数据的CRUD操作,可以省略庞大的数据访问层
????????1. 创建数据库(支持中文)
????????????????create database 数据库名 default charset utf8 collate utf8_general_ci;
????????2. 配置数据库(Django)
????????????????在settings.py中配置数据库的信息,连接Mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', ???# 引擎
'NAME': 'webdb', ???# DB名称
'USER': 'root', ????# 用户名
'PASSWORD': '*******', ?# 密码
'HOST': '127.0.0.1', ???# Host
'PORT': '3306', ??# 端口号
}
}
# Django中连接mysql的话依赖pymysql,? 在主目录中__init__.py
import pymysql
pymysql.install_as_MYSQLdb()
????????1. python manage.py makemigrations
? ? ? ? ? 作用: 将每个应用下的models.py文件生成一个数据库的中间文件,并保存在migrations目录中。
????????2. python manage.py migrate
? ? ? ? ? ? 作用: 将每个应用下的migrations目录中的中间文件同步到数据库中。
|