1 MVC和MTV模型
1.1 初识MVC模型
MVC模型,全称为Model-View-Controller,是一种经典的软件设计模式,旨在将应用程序的输入、处理和输出分开,使得数据、视图和控制逻辑相互独立。这种模式通过将应用程序划分为模型(Model)、视图(View)和控制器(Controller)三个核心部分,来实现代码的分层和解耦,从而提高代码的可维护性、可扩展性和复用性。
1. 模型(Model)
- 定义:模型是应用程序中用于表示数据和业务逻辑的部分。它封装了数据的处理和管理,以及定义了应用程序的业务规则。
- 功能:
- 处理应用程序的数据和业务逻辑。
- 封装数据,提供数据的存取接口。
- 响应视图和控制器的请求,执行相应的数据操作。
2. 视图(View)
- 定义:视图是应用程序中用户界面的部分,负责向用户展示数据和状态。
- 功能:
- 显示模型中的数据,以图形化界面呈现给用户。
- 接收用户的输入,但不处理输入逻辑,只负责将输入传递给控制器。
- 观察模型的变化,实时更新用户界面。
3. 控制器(Controller)
- 定义:控制器是应用程序中处理用户输入的部分,负责协调模型和视图之间的交互。
- 功能:
- 接收用户的输入(如点击、输入文本等)。
- 根据输入调用相应的模型方法处理数据。
- 调用视图方法,将处理后的数据呈现给用户。
1.2 初识MTV模型
Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同。 MTV模型将软件系统分为三个基本部分:模型(Model)、模板(Template)和视图(View),每个部分都有其特定的职责和功能。
1. 模型(Model)
- 定义:模型是与数据库相关的部分,它定义了数据的结构和行为。在Django中,每个模型通常映射到数据库中的一张表,模型中的每个属性对应表中的一个字段。
- 功能:处理数据、状态和程序逻辑。接收请求,返回处理结果。实现业务对象与数据库的映射(ORM),即对象关系映射,允许开发者使用Python代码来操作数据库,而无需编写SQL语句。
2. 模板(Template)
- 定义:模板是Django用来动态生成HTML网页的工具。它包含所需的HTML部分代码以及一些特殊的语法,这些特殊语法用于描述如何将视图传递的数据动态插入HTML网页中。
- 功能:辅助生成HTML网页,使得开发者可以轻松地实现数据的展示和页面的渲染。
3. 视图(View)
- 定义:视图在MTV模型中类似于MVC模式中的控制器和视图的集成。它负责接收用户的请求,并调用相应的模型来处理数据,然后将处理结果传递给模板进行渲染,最终生成HTML页面返回给用户。
- 功能:图形界面的显示与交互,接收、解析、转发请求与结果。选择处理模型,选择视图
1.3 MVC与MTV的区别
虽然MTV和MVC在结构上非常相似,但主要区别在于“模板”和“控制器”的角色。在MVC中,控制器负责处理用户的输入,并调用模型和视图来完成请求。而在MTV中,视图则承担了控制器的部分职责,因为它不仅负责数据的展示,还负责接收用户的请求并调用模型来处理数据。此外,模板在MTV中扮演了更加重要的角色,它是生成HTML页面的关键部分。
2 django框架和基本命令的使用
2.1 django的下载
Django的下载可以通过多种方式进行,但最常用和推荐的方式是通过Python的包管理器pip来安装。以下是Django下载的详细步骤:
1. 安装Python
首先,确保你的计算机上已经安装了Python。Django是一个Python Web框架,因此需要Python环境来运行。可以从Python的官方网站下载python(https://www.python.org/downloads/)下载你需要的的版本
2. 使用pip安装Django
打开命令行工具(在Windows上是CMD或PowerShell,在Mac或Linux上是Terminal),然后输入以下命令来安装Django:
pip install django
这条命令会从Python包索引(PyPI)下载并安装最新版本的Django。如果你需要安装特定版本的Django,可以在django
后面加上==
和版本号,例如pip install django==4.1
来安装Django 4.1版本。
3. 验证安装
安装完成后,你可以通过运行以下命令来验证Django是否已成功安装:
python -m django --version
或者,如果你已经在你的Python环境中导入了Django,可以使用以下Python代码来检查Django的版本:
import django
print(django.get_version())
2.2 django基本命令的使用
1. 创建Django项目
安装并验证Django后,你可以通过以下命令来创建一个新的Django项目:
django-admin startproject myproject
将myproject替换为你想要的项目名称。这个命令会在当前目录下创建一个名为myproject
的目录,其中包含了Django项目的基本结构
目录结构如下:
manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。
settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
urls.py ----- 负责把URL模式映射到应用程序。
注意事项
-
确保你使用的pip与你的Python版本相匹配。如果你同时安装了Python 2和Python 3,可能需要使用
pip3
来确保为Python 3安装Django。 -
如果你在安装过程中遇到任何问题,如网络问题或权限问题,你可能需要查看pip的文档或搜索具体的错误信息来找到解决方案。
2 在mysite目录下创建应用
python manage.py starapp myapp
将myapp换成你·想要的app的名称
3 djangosetting环境的配置
3.1 应用的注册
在Django项目的settings.py
文件中,INSTALLED_APPS
列表用于告诉Django哪些应用是激活的。这个列表中的每一项都是Django应用或者自定义应用的名称。自定义的应用如app01可以直接添加列表后面
示例:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]
3.2 数据的配置
在Django的settings.py
文件中,DATABASES
设置用于配置Django项目所使用的数据库
-
数据库引擎:
'ENGINE': 'django.db.backends.mysql'
指定了Django将使用MySQL作为数据库后端。确保你已经安装了mysqlclient
或PyMySQL
(Django 2.2及以后版本推荐使用mysqlclient
,但PyMySQL
也是一个可行的选择,但需要在__init__.py
文件中进行一些额外的设置)。 -
数据库名称:
'NAME': 'day60'
指定了数据库的名称,在这个例子中是day60
。这个数据库应该已经在你的MySQL服务器上创建好了,或者Django会在第一次执行数据库迁移时尝试创建它(如果MySQL用户有相应的权限)。 -
数据库用户:
'USER': 'root'
指定了连接数据库时使用的用户名,这里使用的是root
用户。出于安全考虑,通常不建议在生产环境中使用root
用户,而是应该创建一个具有适当权限的专用用户。 -
数据库密码:
'PASSWORD': '123456'
指定了数据库用户的密码。请确保这个密码是安全的,并且只有授权人员知道。 -
数据库主机:
'HOST': '127.0.0.1'
指定了数据库服务器的主机地址。在这个例子中,数据库服务器运行在本地机器上(127.0.0.1
是本地回环地址)。如果你是在一个分布式环境中工作,这里应该填写数据库服务器的实际IP地址或域名。 -
数据库端口:
'PORT': 3306
指定了数据库服务器的端口号。MySQL的默认端口号就是3306,所以如果你没有更改MySQL的默认配置,这里就不需要修改。 -
字符集:
'CHARSET': 'utf8'
指定了数据库使用的字符集。然而,请注意,utf8
字符集在MySQL中可能不是完全支持Unicode的(特别是在处理某些特殊字符时)。因此,更推荐使用utf8mb4
字符集,它是utf8
的超集,并且完全支持Unicode。如果你的MySQL版本支持utf8mb4
,建议将CHARSET
更改为'utf8mb4'
。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day60',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': 3306,
'CHARSET': 'utf8'
}
}
3.3 静态文件的配置
新建一个目录叫:static,我们的css文件,js文件,图片文件都放在这下面
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]