【Django】学习笔记 -- Lesson.3 框架的一些信息

Django采用了MVT的软件设计模式,暨模型(Model),视图(View),模板(Template)

  · M:负责和数据库交互,进行数据处理。

  · V:接受请求,进行业务处理,返回应答,做逻辑函数

  · T:负责封装构造要返回的html

 

MVT模型的工作流程:

  路由控制器将请求转发给对应的视图函数,完成业务逻辑,视图函数将从model中获取的数据嵌入到template中的模块(html)渲染成一个页面字符串,返回给客户端的流程。

 

Django的重点在于:

  url路由器+MVT设计模型

 

流程图:

Django完整的目录结构如下:

 

 

Django创建一个项目:# django-admin startproject 项目名

启动项目:# python manage.py runserver IP:PORT

创建应用:# python manage.py startapp 应用名

 --------------------------------------------------------------------------------------------------------------

一开始的'项目名'下的urls.py其实本质是一种映射关系,请求路径和视图函数的映射关系

 

根路径的话不用加'/',比如可以是path("",getindex)就可以了访问根路径了,但是上图其实并不符合我们程序员的一般习惯,所以最好是吧get_timer函数放到自己创建的'应用名'文件之中,然后用from...import...去调用即可,在这个例子里,我们把它放在了views之中。

以下图为例,他的'应用名'叫做'app01',然后去调用它views.py里的get_timer和index函数就行,这样的话代码会好看一些。

----------------------------------------------------------------------------------------------------------------

render()函数是个渲染函数,render函数第一个参数放请求request,第二个参数放模板文件,比如index.htmltemplates之中,但是其实我们写render函数的时候可以这么写就行:return render(request,"index.html"),不用写路径,这其实是django里封装好的。为什么呢?因为我们可以在与‘项目名’同名的‘应用名’中的settings.py配置文件中的TEMPLATES里的‘DIRS’路径其实就render函数找的默认路径,如下图所示。也就是每次找函数都是在BASE_DIR下的templates里去找。从这里可以看出templates这个文件夹不能改的原因:暨django封装的配置里规定了其下路径以templates来搞。

那么,如果在templates下还有个文件夹我们称作“multiend”,"multiend"文件夹下才有这个index.html的话,那么你render中的路径就要变成:multiend/index.html

 目前为止,均为静态页面。。。

——————————————————————————————————————————————————————

 Q:如何给客户端返回动态数据?

如果我们想在timer.html中获得一个实时更新的时间,所以流程是获取数据再嵌入。我们可以在templates中的timer.html中写{{ now }}来占位,然后再回到views中去调用datatime函数获取当前时间,对其nowStr进行字符串处理,下面就是嵌入的问题:引入render的第三个参数,其本质是个字典{"now":nowStr}。

      ----->     

如上图所示即可。

 __________________________________________________________________________________________________

Q:为什么每个视图函数都会有request的原因?

 

 

 因为一开始启动函数runserver时wsgi.py会解析请求,封装响应,再传给urls。所以通俗地说,wsgi才是django的第一站,而urls只是我们开发的第一站。

———————————————————————————————————————————————————————

Q:关于正则分组查询和request传参的问题?

 

 

 上图为urls.py中正则传参,这里的path要写做re_path,(\d{4})表示传一个4位数字以正则的方式去查找。

 

view里接受参数的时候,参数就不仅仅是一个request了,还要包含你上面的(\d{4})和(\d{2})这2个东西对标year和month,HttpResponse就可以接受啦。

补充,如果想模糊传参,(\d{2})只能传2位,但(\d{1,2})可以传1或2位。

真实流程大概如下:

 

 

 

 ————————————————————————————————————————————

Q:关于有名分组?

 

定义了传参的标准,接受的时候只能以同样的key来接受,不过顺序可以改变。

——————————————————————————————————————————————

Q:关于路由分发?

 

 

 

 

 

 这时候去访问app01里的urls

 

此时若要在网页匹配成功,

 

posted @ 2021-11-07 13:32  Anonytt  阅读(35)  评论(0编辑  收藏  举报