Django项目实战(1)

Django

从今天开始进行Django项目的实战系列更新,希望这系列笔记,能给帮助到和我一样正在学习路上的你和我!

Django中请求处理流程

因为之前没有Web开发的经验,本身也是转行到计算机这个领域中来,之前也折腾过很长的时间,视频教程、博客、国内的书籍等等,各有利弊,所以这几天看了一些国外的书籍,国外的书籍相比较于国内的更新速度更快,这是很大的一个优点,再就是觉得还是看书比较的系统掌握像Django这样的框架,高屋建瓴的了解一些思想、逻辑会有助于理解框架的代码细节。

这里先回忆昨天学习的成果。相比较于Java Spring全家桶的开发工作来说,Django的开发工作明显较少,很多事情Django都已经帮助你完成了,因此开发速度快速,但是对于大型服务系统来说,是不是鲁棒性会差一点??(这里还不是很懂,请大家指教)

在这里插入图片描述

1、 用户通过浏览器请求一个页面(上传数据、点击访问等等)
2、请求到达Request Middlewares,中间件对request做一些预处理或者直接response请求
3、URLConf通过urls.py文件和请求的URL找到相应的View()
4、View Middlewares被访问,它同样可以对request做一些处理或者直接返回response
5、调用View中的函数
6、View中的方法可以选择性的通过Models访问底层的数据
7、所有的Model-to-DB的交互都是通过manager(QuerySet)完成的
8、如果需要,Views可以使用一个特殊的Context
9、Context被传给Template用来生成页面
  a.Template使用Filters和Tags去渲染输出
  b.输出被返回到View
  c.HTTPResponse被发送到Response Middlewares
  d.任何Response Middlewares都可以丰富response或者返回一个完全不同的response
  e.Response返回到浏览器,呈现给用户

可以从流程图中看出Middleware(中间件,包括request、view、exception、response)发挥了很重要的作用,这里暂未涉及,先不讨论。
参考:https://www.cnblogs.com/lyq-biu/p/9626234.html、https://segmentfault.com/a/1190000002399134

URLConf(URL映射):就像是Django所支撑网站的目录。本质是URL模式以及要为该URL模式调用的视图函数(view)之间的映射表。就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。例如,当用户访问/foo时,调用视图函数foo_view(),视图函数存在于views.py中。
在执行创建项目的时候,会自动创建一个URLConf(就是项目的urls.py)。在同时创建的settings.py文件中,还有一个变量ROOT_URLCONF,其变量的值就是根(项目文件夹下的)URLconf的模块名。默认值是urls.py文件的模块名。

###Django application组织原则

实际上,每个 Django App(Application) 的组织结构符合 Django 的 MTV 法则——Model (模型)+ Template (模板)+ View (视图)。MTV 与大家比较熟悉的 MVC 在思想上非常相似,但是命名有比较大的出入,如下表所示:
在这里插入图片描述
区别:
  MVC中的View的目的是「呈现哪一个数据」,而MTV的View的目的是「数据如何呈现」。

也就是把MVC中的View分成了视图(展现哪些数据)模板(如何展现) 2个部分,而Contorller这个要素由框架自己来实现了,我们需要做的就是把(带正则表达式的)URL对应到视图就可以了,通过这样的URL配置,系统将一个请求发送到一个合适的视图。

https://www.cnblogs.com/wqzn/p/10009217.html、https://blog.csdn.net/YangHeng816/article/details/52213983

理解视图(views):业务逻辑的编写

创建Application之后,下一步就是编写业务逻辑和接入路由,完成访问了。

如前所述Django中的Project目录和application目录下分别有urls.py文件

分别负责不同的功能:
一个是全局路由,一个是子应用路由组成。简单来说,根据用户输入的 URL,全局路由表进行匹配并选择正确的子应用路由,再由所选择的子应用路由匹配并选择正确的视图( View )。整个流程如下图所示:

在这里插入图片描述
例如,用户访问 example.com/apple/buy,然后全局路由根据 /apple/buy 先选择 apple 的路由表,再从 apple 路由表中根据 /buy 选择 /buy 路由,然后执行 /buy 对应的 BuyView 视图,返回给用户结果。

编写第一个视图

首先打开 news/views.py ,写一个简单的视图函数,返回一串 Hello World!

from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello World!')

上面这个 index 函数可以说是一个最简单的视图函数了,实际大部分应用的视图要比这复杂得多。Django 同时支持基于函数的视图( FBV,Function-based View )和基于类的视图( CBV,Class-based View ),这里显然是 FBV,接收一个 request 请求对象作为参数,返回了一个 HttpResponse 对象。

将视图接入路由(view.py–>urils.py)

接着,我们要让路由系统能够访问到刚才写好的视图函数。因此先实现子应用

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值