@TOC
MVC与MTV
MVC
mvc是模型(Model)-视图(View)-控制器(Controller)的缩写; 一种软件开发模式。这种模式不仅仅是python独有,各种web开发语言大多都会遵循此模式。
存在必要:web项目的使用流程无非是
客户端发起请求1---->web服务器接受请求2---->服务器调用后台开发语言(python)3---->代码获取请求中的数据4---->访问数据库获取数据5---->组装前端代码6---->通过响应返回给客户端7---->在浏览器窗口显示8。
其中4~7环节都需要开发者编写后台语言来完成,如果将这些步骤的代码集中编写在同一个函数下会显得臃肿,并且不符合一个函数做一个事情的思想,所以我们要进行拆分。拆分之后遍形成了MVC这种模式。
M表示模型层,负责与数据打交道,主要操作数据库进行增删改查。
V表示视图层,负责数据展现,渲染html文档,控制在浏览器窗口的展现。
C表示控制层,负责请求和响应的管理,并调用模型层与视图层。
mvc流程如图:
MTV
"模型-模板-数据"("Model-template-view"); 一种软件模式,风格类似于MVC,但是更好地描述了 Django 所做的事。
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回响应。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
我们可以这么理解,MTV其实就是MVC,思想是一样的,只不过MTV更符合Django的逻辑。
Django简介
Django最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。它强调使用更少的代码更快地构建更好的Web应用程序,使开发变得更容易。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件。
Django功能一览
官方自我介绍:
The web framework for perfectionists with deadlines.
有截止日期的完美主义者的web框架。
- 集成ORM的方式操作数据库
- 提供完善的admin站点,解放后台管理模块的开发
- 通过配置的方式实现URL与函数的映射
- 提供内置中间件,支持自定义中间件
- 各种类型的请求和响应的支持,包括文件上传
- 提供模板语法完成数据渲染
- 帮助创建表单和处理表单数据
- 提供多种保护手段和机制,保证web的安全
- 国际化和本地化
- 日志系统
- 会话
- 静态资源管理
- 数据验证
- 发送邮件
- 缓存
- 。。。
Django快速搭建
接下来我们使用PyCharm来体验一下Django2.2的基本使用。此demo最终我们得到一个获取数据库中新闻表的表数据展示在客户端浏览器的页面。
需要准备工作需要python3环境,因为当前教程使用的Django2.2版本需要python3.5版本以上。
Django 版本 | Python 版本 |
---|---|
1.11 | 2.7, 3.4, 3.5, 3.6, 3.7 (1.11.17 添加) |
2.0 | 3.4,3.5,3.6,3.7 |
2.1,2.2 | 3.4,3.5,3.6,3.7 |
创建项目安装Django
创建Django有两种方式:
1命令行方式
2使用开发工具创建
命令行方式存在于官方文档,我们这里直接跳过,直接使用PyChram进行创建,更符合开发。
你得避免使用 Python 或 Django 的内部保留字来命名你的项目
查看Django的版本
python -m django --version
Django项目层级结构
我们需要着重讲解一下Django项目的目录结构
这些目录和文件的用处是:
最外层的 django1/ 根目录只是你项目的容器, Django 不关心它的名字,你可以将它重命名为任何你喜欢的名字。
manage.py: 一个让你用各种方式管理 Django 项目的命令行工具。Django的很多动作需要执行此py文件来实现。
里面一层的 django1/ 目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如 mysite.urls).
django1/__init__.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。
django1/settings.py:Django 项目的配置文件。
django1/urls.py:Django 项目的 URL 声明,就像你网站的“目录”。
django1/wsgi.py:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。
启动测试
让我们来确认一下你的 Django 项目是否真的创建成功了。如果你的当前目录不是外层的 django1目录的话,请切换到此目录,然后运行下面的命令:
python manage.py runserver
命令解释:此命令启动的是 Django 自带的用于开发的简易服务器,它是一个用纯 Python 写的轻量级的 Web 服务器,
我们将这个服务器内置在 Django 中是为了让你能快速的开发出想要的东西,
**千万不要** 将这个服务器用于和生产环境相关的任何地方。这个服务器只是为了开发而设计的。
如果运行命令之后出现一下文字,则表示运行成功。
内置服务器默认使用8080端口,访问 http://127.0.0.1:8000/ 出现小火箭证明成功。
提示:
1代码发生改变,内置服务器会自动的进行重新部署。
2默认runserver命令会在终端中前台显示,也就是阻止了其他命令的输入,想要在终端行中想要继续执行其他命令需要暂时退出,使用快捷键"ctrl+c"
创建应用
目前我们的第一个Django 项目 已经基本配置完成,可以在此基础上进行开发。我们接下里需要创建 应用之后再正式开始代码。
项目和应用的区别:
应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者简单的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。
在Django中创建项目之后,需要先创建应用,在应用中进行代码书写,并且Django的应用也是有固定的层级目录结构。创建应用需要执行manage.py文件自动带有层级结构的 应用。
保证当前在manager.py目录下执行命令来创建应用:
python manage.py startapp myapp
命令解释: myapp是自定义的应用名称,根据应用的功能自行选择。
命令运行效果:每一个应用的目录结构都如下图所示,其中的每一个文件在接下来的学习过程中我们会详细讲解。
编写视图
视图就是我们刚才提到的MTV中的V,也就是View,重复一下视图的功能:接收请求,进行业务处理,返回响应.
编写视图代码。
Django要求我们将视图代码以函数的形式定义在每一个应用下的views.py文件中。
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
#函数的名字就是视图名,函数参数为request,封装了请求
def index(request):
#函数体中进行业务逻辑操作,比如获取请求数据,数据校验,调用数据库操作等
#函数返回就是处理响应HttpResponse函数用于组装的响应,参数是返回内容
#我们这里自行组装一段Html代码
return HttpResponse("Hello
")
以上就是最简单的一个视图代码。
配置视图的URL
视图想要接受请求,就必须拥有自己的url路径映射到他,所以接下来我们需要为我们的第一个视图指定url路径,此处需要注意理解。
此时我们回顾一下整个项目的目录结构,其中在项目层级中有一个urls.py文件,我们一般称他为URLconf文件,就如它的名字表述的一样,此文件用于配置url路径与视图代码的映射。
但是这里需要注意,我们一个项目下可能会有很多个应用,每一个应用都会有很多的视图,也就是说有很多的url路径,如果我们将所有的url路径都配置在此会变得难以管理,所以我们一般会在每一个应用下创建一个 urls.py文件作为当前应用专属的url配置文件。
在 myapp/urls.py 中,输入如下代码:
from django.urls import path
#导入当前应用下的views文件,也就是我们刚才定义了视图函数的文件
from . import views
urlpatterns = [
#映射路径与函数。
#第一个参数是指定的url,第二个参数是函数,第三个参数是自定义的命名方便区分
path('index', views.index, name='index'),
]
配置路径还需要一个步骤,就是要在根 URLconf 文件中指定我们创建的 myapp.urls 模块。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
#将我们的应用引入
#第一个参数也是url的一部分,我们视图最终的完整路径是"http://127.0.0.1:8080/news/index"
#第二个参数需要使用include函数将我们的应用的urls.py文件引入
path('news/', include('myapp.urls')),
#这里是django admin模块所需要的,不要修改
path('admin/', admin.site.urls),
]
测试第一个视图
启动内置服务器,访问路径来进行访问。
命令:python manage.py runserver
路径:http://127.0.0.1:8000/myapp/index
http://ip:port/项目urls.py中path指定的url部分+应用urls.py中path指定的url部分
在浏览器中将看到视图代码中编写的响应部分。
加入模型
下一个章节我们会演示在此基础上加入数据库操作。