赞
踩
从今天开始进行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
创建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 对象。
接着,我们要让路由系统能够访问到刚才写好的视图函数。因此先实现子应用news
的路由表,创建 news/urls.py
文件如下:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
每一个 Django 路由表模块( urls.py
)中都约定必须包含一个 urlpatterns
列表用来存放路由映射表。列表中每个元素是一个用 django.urls.path
函数封装好的路由映射,通常接收以下三个参数:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。