zoukankan      html  css  js  c++  java
  • Django框架介绍

    django框架--底层架构

    Django小白入门到实战教程(2020)

    一、对于web服务的理解

    web服务应该至少包含两个模块:web服务器和web应用程序,两个模块在功能和代码上解耦。
    web服务器负责处理socket调用http数据解析和封装等底层操作
    web应用程序负责业务处理、数据增删改查、页面渲染/生成等高层操作

    二、对于wsgi协议的理解

    web服务器和web应用程序之间需要定义一个接口规则,这也叫协议,用于明确两者之间以什么样的形式交互数据。即:web服务器应该以什么样的形式调用web应用程序,而web应用程序又应该定义成什么形式。

    python下规定的web服务的接口规则叫做wsgiwsgi协议对于serverapplication的接口定义如下:

    对于server调用规则的定义:

    response = application(environ, start_response) 
    

    对于application接口编码的定义:

    def application(environ, start_response):
        status = '200 OK'
        response_headers = [('Content-Type', 'text/plain'),]
        start_response(status, response_headers)
        
        return [b'hello',]

    只要是遵从如上形式进一步封装serverapplication的,均称为实现了wsgi协议的server/application

    python内置提供了一个wsigref模块用于提供server,但是只能用于开发测试,django框架就是使用此模块作为它的server部分,也就说,实际生产中的server部分,还需要使用其他模块来实现。

    任何web框架,可能没有实现server部分或者只实现一个简单的server,但是,web框架肯定实现了application部分。

    application部分完成了对一次请求的全流程处理,其中各环节都可以提供丰富的功能,比如请求和响应对象的封装、model/template的实现、中间件的实现等,让我们可以更加细粒度的控制请求/响应的流程。

    三、自定义一个简单的基于wsgi协议的web框架

    用以下图示表示简单的web请求流程架构(伪代码)

    web服务器就像是一颗心脏不停的跳动,驱动整个web系统为用户提供http访问服务,并调用application返回响应

    四、django中的server实现

    django使用的底层server模块是基于python内置的wsgiref模块中的simple_server,每次django的启动都会执行如下run函数。run函数中会执行serve_forever,此步骤将会启动socket_server的无限循环,此时就可以循环提供请求服务,每次客户端请求到来,服务端就执行django提供的application模块。

    djangoserver的启动----django.core.servers.basehttp.py

    底层无限循环将作为web服务的主要驱动----socektserver.py

    五、django中的application实现

    djangoapplication模块是通过WSGIHandler的一个实例来提供的,此实例可以被call,然后根据wsgi的接口规则传入environstart_response

    所以本质上,django就是使用的内置python提供的wsgiref.simple_server再对application进行丰富的封装。大部分的django编码工作都在application部分。

    六、django的底层调用链

  • 相关阅读:
    第四章:(2)原理之 Dubbo 框架设计
    大三学习进度29
    大三学习进度27
    大三学习进度31
    大三学习进度24
    大三学习进度29
    大三学习进度26
    大三学习进度28
    大三学习进度25
    大三学习进度32
  • 原文地址:https://www.cnblogs.com/liyonghua/p/12950510.html
Copyright © 2011-2022 走看看