• python的web框架知识点


    一个完整的web应用:服务器收到来自浏览器的一个请求,服务器将请求内容的网页返回给浏览器,让浏览器显示出来。【而浏览器与服务器之前的传输协议是HTTP】

    HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

    http:是网络上传输html的协议,用于浏览器与服务器的通信。

    html:是一种定义网页的文本。

    常见的状态码!

    200              ok             请求成功。一般用于GET与POST请求

    404           not found  服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面

    500           Internal Server Error          服务器内部错误,无法完成请求

    Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。

    Content-Type 标头告诉客户端实际返回的内容的内容类型。

    语法格式:

    Content-Type: text/html; charset=utf-8
    Content-Type: multipart/form-data; boundary=something
    content-type:application/javascript
     HTTP请求:
    流程:
    1、浏览器向服务器发送http请求:【1、方法(GET---仅仅请求资源    POST----会附带用户数据)2、路径  3、域名 4、其他相关的header ,如果是POST,请求包括一个body包含用户数据】
     
    2、服务器向浏览器返回http响应,包括【1、状态码。  2、响应类型【Content-Type】。  3、其他相关的header。 】
     
    http协议具备极强的扩展性,可以在html中链入其他服务器的资源,从而将请求压力分散到各个服务器上,并且一个站点可链接到其他站点,无数个站点链接起来就是www【world wide web】
     
     
     
     
     
     
     
     

    WSGI:web server gateway interface【web服务器网关接口】

    WSGI server 负责从客户端接受请求,将request 转发给application,将application返回的response返回给客户端。

    原理:要求web开发者实现一个函数,就可以响应http请求。

    wsgi = [web服务器+web应用程序]

    例子:

    def application(environ , start_response):

         start_response('200 ok',[('Content-Type','text/html')])

         return '<h1>hello ,web</h1>'

    environ: 一个包含所有http请求信息dict对象

    start_response:一个发送http响应的函数

    在application()函数中:调用:

         start_response('200 ok',[('Content-Type','text/html')])

    form django.core.handlers import base

    class
    WSGIHandler(base.BaseHandler): request_class = WSGIRequest def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.load_middleware() def __call__(self, environ, start_response): set_script_prefix(get_script_name(environ)) signals.request_started.send(sender=self.__class__, environ=environ) request = self.request_class(environ) response = self.get_response(request)#处理请求 response._handler_class = self.__class__ status = '%d %s' % (response.status_code, response.reason_phrase) response_headers = list(response.items()) for c in response.cookies.values(): response_headers.append(('Set-Cookie', c.output(header=''))) start_response(status, response_headers) if getattr(response, 'file_to_stream', None) is not None and environ.get('wsgi.file_wrapper'): response = environ['wsgi.file_wrapper'](response.file_to_stream) return response

    简单的wsgi的demo【django simple_server】

    案例0001

    from wsgiref.simple_server import make_server
    
    def app(environ, start_response):  # wsgi协议规定的application部分的编码形式,可在此基础上扩展
        status = '200 OK'
        respones_headers = []
        
        start_response(status, response_headers)
        return [b'hello',]
    
    if __name__ == '__main__':
        httpd = make_server('127.0.0.1', 8080, app)
        httpd.serve_forever()


    # -*- coding: utf-8 -*-
    
    
    # class WSGIHandler(base.BaseHandler):
    if __name__ == '__main__':
        httpd = make_server('', 8000, demo_app)
        sa = httpd.socket.getsockname()
        print("Serving HTTP ON ", sa[0], "port", sa[1], "...")
    
        import webbrowser
    
        webbrowser.open('http://localhost:8000/xyz?abc')
    
        # 调用WSGIserver的hanndle_request方法处理http请求
        httpd.handle_request()
        httpd.server_close()
    
    
    def make_server(host, port, app, server_class=WSGIServer, handler_class=WSGIRequestHandler):
        server = server_class((host, port), handler_class)
        server.set_app(app)
        return server
    
    
    def demo_app(environ, start_response):
        from io import StringIO
        stdout = StringIO()
        print("hello world ", file=stdout)
        print(file=stdout)
        h = sorted(environ.items())
        for k, v in h:
            print(k, '=', repr(v), file=stdout)
        start_response("200 ok", [('Content-Type', 'text/plain; charset = utf-8')])
        return [stdout.getvalue().encode("utf-8")]
    
    """
    demo_app()表示一个简单的WSGI application实现,通过make_server()方法创建一个WSGIServer实例,
    调用其handle_request()方法,该方法会调用demo_app()处理请求,并最终返回响应。
    
    """

    实现的逻辑图

     

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

     

  • 相关阅读:
    Rsync数据同步详情及配置
    ssh密钥及发放
    ssh服务及简单应用
    二叉搜索树的第k个结点
    序列化二叉树
    把二叉树打印成多行
    按之字形顺序打印二叉树
    对称的二叉树
    二叉树的下一个结点
    删除链表中重复的结点
  • 原文地址:https://www.cnblogs.com/1314520xh/p/11621096.html
Copyright © 2020-2023  润新知