• 【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

     

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

    前ICPC算法竞赛退役选手|现摸鱼ing
  • 相关阅读:
    linux创建用户和组
    ftp上来显示的时间和系统时间不一致
    在Linux下如何用Shell脚本读写XML?现有一个config.xml(转)
    关于业务主键和逻辑主键
    git push 提示
    浏览器默认样式
    css实现缩进无限嵌套
    使用设置报头x-Frame-Options限制iframe网页嵌套
    chrome控制台小技巧
    git版本库底层命令
  • 原文地址:https://www.cnblogs.com/Anonytt/p/15519688.html
Copyright © 2020-2023  润新知