Django基础(2) - 框架简介
1|0一、MVC框架和MTV框架(了解即可)
Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:
Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。
Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。
1|12.1 Django的MTV模式
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
1|22.2 Django框架图示
一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。
2|0二、Django下载安装
2|12.1 安装(安装最新LTS版)
Django我们用的是1.11.9版本,大版本就是一版本,不要下载2版本。有一些功能是有差别的。
我们下载的类似于一个模块,借助这个模块我们可以创建项目,而不是直接下载了项目,一定要有所区分。
1.11 是17年开始的,支持时间很长。2.2 也是长期支持的。
2|22.2 创建一个django项目
下面的命令创建了一个名为"mysite"的Django 项目:
2|32.3 目录介绍
2|42.4 运行Django项目
2|52.5 模板文件配置
2|62.6 静态文件配置
看不明白?有图有真相:
刚开始学习时可在配置文件中暂时禁用csrf中间件,方便表单提交测试。
3|0三、Django基础必备三件套
3|13.1 HttpResponse
内部传入一个字符串参数,返回给浏览器。
例如:
3|23.2 render
除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。
将数据填充进模板文件,最后把结果返回给浏览器。(类似于我们上面用到的jinja2)
例如:
3|33.3 redirect
接受一个URL参数,表示跳转到指定的URL。
例如:
4|0四、APP
你会发现,上面没有什么view视图函数的文件啊,这里我们说一个应用与项目的关系,上面我们只是创建了一个项目,并没有创建应用,以微信来举例,微信是不是一个大的项目,但是微信里面是不是有很多个应用,支付应用、聊天应用、朋友圈、小程序等这些在一定程度上都是相互独立的应用,也就是说一个大的项目里面可以有多个应用,也就是说项目是包含应用的,它没有将view放到这个项目目录里面是因为它觉得,一个项目里面可以有多个应用,而每个应用都有自己这个应用的逻辑内容,所以他觉得这个view应该放到应用里面,比如说我们的微信,刚才说了几个应用,这几个应用的逻辑能放到一起吗,放到一起是不是就乱套啦,也不好管理和维护,所以这些应用的逻辑都分开来放,它就帮我们提炼出来了,提炼出来一个叫做应用的东西,所以我们需要来创建这个应用。
通过django命令创建的项目:他认为你的项目我已经给你创建好包含(服务器相关应用以及url等)。但是你的应用逻辑需要自己完成。也就是说咱们的项目中必须创建应用。
4|14.1 命令行创建
4|24.2 使用PyCharm创建
在下方弹出的命令窗口输入:
我们现在只需要看其中两个文件
models.py :之前我们写的那个名为model的文件就是创建表用的,这个文件就是存放与该app(应用)相关的表结构的
views.py :存放与该app相关的视图函数的
5|0五、基于Django项目实现简单的登录示例
接下来,我们基于Django项目实现一个简单的登录,将整个流程走通。
按照我们之前自己写的起飞版web项目,主要是两部分,服务器程序以及应用程序,在Django项目中服务器程序已经给我们封装好了,基本上学一些参数即可,比较容易,主要是应用程序,所以我们第一步先配置应用程序,应用程序的第一步在哪?启动项目,在浏览器输入ip端口,回车,这样服务端接收到路径根据不同的路径执行对应的函数,所以我们先配置路径url.
5|15.1 配置url
这里是通过正则匹配匹配的路径,前面固定拼接的就是'127.0.0.1:8000',现在你这样写'/index/' ,后面映射的就是views.py视图函数的login,因为是正则匹配,所以如果你访问的是这样的路径:'http://127.0.0.1:8000/index/login/666',也是可以映射到此函数的,你要想完全匹配的话应该这样写:
这样通过浏览器只能输入http://127.0.0.1:8000/index此url才可以映射到login函数。
5|25.2 配置views视图函数
找到views文件,定义一个login函数,之前我们自己写的时候可以接受形参envison,现在我们可以设置任意形式参数,一般我们设置为request,request参数就包含了服务器程序的请求响应所有的参数提供给我们使用。
那么如何返回一个html页面呢? 这里就需要引用另一个功能,就是render。之前jinja2有一个template通过render进行前后端渲染,现在django也给我们提供了一个render方法,可以给浏览器返回一个页面,并且能进行前后端的渲染。我们要完成的就是登录功能,所以我们下面写一个登录页面login.html。现在我们现在views文件中返回。
5|35.3、配置template
接下来我们要完善html页面,再此之前我们需要配置一下template的路径,让django可以找到(有的默认已经配置好了)。
在settings文件中配置:
路径配置成功之后,我们写一个登录的页面。
form表单两点注意:
1. action路径 index前面一定要主动加上‘/’,如果你不主动加上/,则最终路径会给你拼接成:http://127.0.0.1:8000/index/index/
2. form表单为什么用post提交数据?
你访问页面以及form表单提交数据都是通过http://127.0.0.1:8000/index此url也就是说都必须执行login函数,如果都是get请求,那么login函数如何区分哪个get是请求页面哪个get是提交数据呢?所以要用post请求提交数据。
5|45.4、完善views视图函数
之前写的views视图函数我们只完成了返回一个页面的功能,现在不仅是返回页面,我们应该处理post提交的数据,怎么处理?每次请求都是经过此函数,所以我们要对这两次请求加以区分,怎么区分?我们要判断请求方式是get还是post,通过request.method判断即可,那么如何获取提交过来的数据呢?如果是get请求的数据通过request.GET.get获取,如果是post请求的数据通过request.POST.get获取。所以我们views函数这样完成。
post提交数据时你们可能会遇到这种情况:
现在只需要做一步,在settings配置文件里面将这一行注释掉,这是django给你加的一个csrf的认证,现在不需要,我们会讲的
还记得django写视图函数的时候,有一个参数是必须要给的吗,叫做request,如果你是post请求,那么就用request.POST,就能拿到post请求提交过来的所有数据(一个字典,然后再通过字典取值request.POST.get('username'),取出来的就是个字符串,你在那个字典里面看到的是{'username':['taibai']},虽然看着是列表,但是request.POST.get('username')取出来的就是个字符串),通过request.GET就能拿到提交过来的所有数据,而且记着,每一个视图函数都要给人家返回一些内容,用render或者HttpResponse等,其实render里面也是通过HttpResponse来返回内容,不然会报错,错误是告诉你没有返回任何内容:
django认识了,以后我们就按照下面的步骤来学:
1.django的url控制器
2.django的视图
3.django的模板(template)
4.ORM(花的时间比较久)
做一个小总结
目前我们学过的一些参数:
__EOF__

本文链接:https://www.cnblogs.com/dongye95/p/13420184.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!