Day34:django相关

一、初识Django

  1、简介

     Django是一个遵循MVC开发模式的框架。

    它在models.py定义各种类代表数据模型(Model)和数据库引擎交互,进行数据的增删改查操作。

    templates文件夹中的模板文件则代表视图(View),负责展示数据内容

    urls.py中定义了访问url与views.py中定义的处理函数的对应关系, 根据不同的请求URL调用views.py中对应的处理函数。这个过程代表了Controller

    Django框架也被称为MTV框架:

      Model(模型):负责业务对象与数据库的对象(ORM)

           Template(模版):负责如何把页面展示给用户

           View(视图):负责业务逻辑,并在适当的时候调用Model和Template

      此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

  2、关于request和response

    我们知道,Django 是围绕着 Request 与 Response 进行处理的,也就是“求”与“应”。

    当请求一个页面时,Django 把请求的 metadata 数据包装成一个 HttpRequest 对象,然后 Django 加载合适的 view 方法,

    把这个 HttpRequest 对象作为第一个参数传给 view 方法。任何 view 方法都应该返回一个 HttpResponse 对象。

      - HttpRequest对象表示来自某客户端的一个单独的 HTTP 请求;HttpRequest 对象是 Django 自动创建的。

      - HttpResponse对象的功能是将服务器端的数据发送到客户端浏览器;HttpResponse对象必须自己创建。HttpResponse对象提供了一个数据集合cookie,

        它用于在客户端写入cookie值。若指定的cookie不存在,则创建它。若存在,则将自动进行更新。结果返回给客户端浏览器。

  3、request的几种用法

    1) request.method

      表示提交请求使用的HTTP方法。例如POST和GET

    2) request.POST

      HTTP协议定义的一种与服务器交互的方法,一个类字典对象,包含所有的HTTP的POST参数的信息,用于更新和提交数据。

      它会把提交的数据放置在HTTP包的包体中。

    3) request.GET

      HTTP协议定义的一种与服务器交互的方法,一个类字典对象,包含所有的HTTP的GET参数的信息,用于获取或查询资源信息;

      GET提交,请求的数据会附在URL之后,以“?”分割URL和传输数据,多个参数用&连接;如果数据是英文字母/数字,原样发送,

      如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密

    4) request.COOKIES和request.session

      session与Cookie都可以称作是一种缓存,其存在的最大目的都是为了减少用户request与response之间的时间损耗,提高用户的浏览体验。

      - cookies

        cookies 是浏览器为 Web 服务器存储的一小段信息。 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies。

        它保存在浏览器下的某个文件夹下。

      - session

        Django的Session机制会向请求的浏览器发送cookie字符串。同时也会保存到本地一份,用来验证浏览器登录是否为同一用户。

        它存在于服务器,Django默认会把session存入到数据库中。

        Session依赖于Cookie,如果浏览器不能保存cookie那么session就失效了。因为它需要浏览器的cookie值去session里做对比。

        session就是用来在服务器端保存用户的会话状态。由于session是保存在服务器端的,所以用户永远不可能拿到session内的具体内容。

      - session id 的作用

        session id是保存在cookie中的一个随机字符串。服务器通过查看用户cookie中的session id信息,获取id,

        来与session中的用户名进行比对,比对成功,则说明认证通过,可进行其他的操作。

  4、render和redirect函数

    1)render:

      render(request, template_name[, context])

      结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。

      参数:

         request: 用于生成响应的请求对象。

         template_name:要使用的模板的完整名称,可选的参数

         context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。

         content_type:生成的文档要使用的MIME类型。默认为DEFAULT_CONTENT_TYPE 设置的值。

         status:响应的状态码。默认为200。

    2)redirect:  

      参数可以是:

        一个模型:将调用模型的get_absolute_url() 函数

        一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称

        一个绝对的或相对的URL,将原封不动的作为重定向的位置。

        默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。

  5、django请求响应流    

       

    1)WSGI

      WSGI是为了解决一个基本问题而创建的工具:这个问题就是如何将Web服务器连接到Web框架

      WSGI有两面:服务器端和应用程序端

      为了处理WSGI响应,服务器端执行应用程序并向应用程序提供一个回调函数。

      应用程序处理请求,并使用提供的回调函数将响应返回给服务器。

      本质上,WSGI处理程序充当你Web服务器(Apache,Nginx等)和Django项目之间的看门人。

      服务器和应用程序之间就是中间件。

      你可以将中间件视为一系列双向过滤器:它们可以改变(或短路)网络和Django应用程序之间来回传递的数据

    2)Data Flow

      当你请求你的WEB应用程序时,一个WSGI handler实例化了 ,它做了以下操作:

        1、导入你项目的settings.py文件,和一些Django的异常处理类

        2、加载MIDDLEWARE中列出来的所有中间件类

        3、构建四个处理请求,视图,响应和异常处理的方法列表。

        4、循环遍历请求方法,按顺序执行它们

        5、解析请求的URL

        6、循环遍历每个视图处理方法

        7、调用视图函数(通常会渲染模板)

        8、处理任何异常的方法

        9、循环便利每个响应方法(从内向外,按请求中间件的反向顺序)

        10、最后建立一个返回值并将回调函数调用到Web服务器

    3)中间件

      Django项目中的一些关键功能中,都用到了中间件:例如,你使用CSRF中间件防止跨站请求伪造攻击,
      它们被用于处理session数据。认证和授权都是通过使用中间件完成的。
      你可以编写自己的中间件类,去修改(或短路)经过你应用程序的数据流。

    

 

   

 

    

posted @ 2017-12-14 19:13  世界辣么大  阅读(95)  评论(0)    收藏  举报