zoukankan      html  css  js  c++  java
  • web框架

    1、wsgiref模块1

    Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站

    的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速

    开发web应用了。浏览器和服务器的是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使

    用的方法,大大提高了开发的效率。

    wsgiref模块

    让我们专注于web开发,其他的接受HTTP请求、解析HTTP请求、发送HTTP请求让wsgiref模块处理

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

    data=conn.recv(1024)
        print(data)
    b
    'GET / HTTP/1.1 Host: 127.0.0.1:8880 Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: csrftoken=IU9cIEWdRzTx7gm6JIjASm9TZJSve8jUGcfXPbgTXpSW0iHot1NOxpjdroESRB4f ' b'GET /yuan?name=yuan&age=22 HTTP/1.1 Host: 127.0.0.1:8880 Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: csrftoken=IU9cIEWdRzTx7gm6JIjASm9TZJSve8jUGcfXPbgTXpSW0iHot1NOxpjdroESRB4f ' b'POST / HTTP/1.1 Host: 127.0.0.1:8880 Connection: keep-alive Content-Length: 20 Pragma: no-cache Cache-Control: no-cache Origin: http://127.0.0.1:8880 Upgrade-Insecure-Requests: 1 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Referer: http://127.0.0.1:8880/ Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: csrftoken=IU9cIEWdRzTx7gm6JIjASm9TZJSve8jUGcfXPbgTXpSW0iHot1NOxpjdroESRB4f user=bisheng&pwd=456' ---------------------------------------------
    URL: 协议://IP:端口(80)/路径?a=1&b=2 '''

     一个简单的wsgiref模块

    from wsgiref.simple_server import make_server
    # make_server 封装了以下内容
    # sock_server=socket.socket()
    # ip_port=('127.0.0.1',8080)
    # sock_server.bind(ip_port)
    # sock_server.listen(5)
    def application(environ,start_response):
        # 按着http协议解析数据:environ
        # 按着http协议组装数据:start_response
        print(environ)
        print(type(environ)) # 字典
        start_response('200 OK')
        return [b'<h1>hello word</h1>']
    
    #封装了socket
    httped=make_server('127.0.0.1',8080,application)
    
    # 等待用户连接:conn,addr=sock.accept()
    httped.serve_forever()
    View Code

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

    升华版本:

    from wsgiref.simple_server import make_server
    # make_server 封装了以下内容
    # sock_server=socket.socket()
    # ip_port=('127.0.0.1',8080)
    # sock_server.bind(ip_port)
    # sock_server.listen(5)
    def application(environ,start_response):
        # 按着http协议解析数据:environ
        # 按着http协议组装数据:start_response
        print(environ)
        print(type(environ)) # 字典
    
        # 当前的请求路径
        path=environ.get('PATH_INFO')
    
        start_response('200 OK',[])
    
    
        if path=='/login':
            with open('login.html','r',encoding='utf-8')as f:
                data=f.read()
    
        elif path=='/index':
            with open('index.html','r',encoding='utf-8')as f:
                data=f.read()
    
    
        return [data.encode('utf-8')]
    
    
    #封装了socket
    httped=make_server('127.0.0.1',8080,application)
    
    # 等待用户连接:conn,addr=sock.accept()
    httped.serve_forever()
    View Code

     

     start_response('200 OK',[])后面的空括号可以没有内容,但必须有

     DIY一个web框架

    图标请求

    浏览器主动请求服务器,获取图标

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

    from wsgiref.simple_server import make_server
    
    
    def application(environ,start_response):
        start_response('200 OK',[])
        print(environ.get('PATH_INFO'))
        path = environ.get('PATH_INFO')
    
        # 方案一
        # if path=='/favicon.ico': # 图表请求
        #     with open('favicon.ico','rb')as f:
        #         data=f.read()
        #     return [data]
        # elif path=="/login":
        #      with open("login.html","rb") as f:
        #         data=f.read()
        #      return [data]
        #
        # elif path=="/index":
        #      with open("index.html","rb") as f:
        #         data=f.read()
        #      return [data]
    
        # 对上面的优化 ------ 路由分化
    
    
        url_patterns=[
            ('/login','login'),
            ('/index','index'),
            ('/favicon.ico','favicon')
        ]
    
        func = None
        for item in url_patterns:
            if path==item[0]:
                func=item[1]
                break
        if func:
            return [func1(func,environ)]
        else:
            return [b'404!']
    
    
    # def login():
    #     with open('login.html','rb')as f:
    #         data=f.read()
    #     return data
    # def index():
    #     with open('index.html','rb')as f:
    #         data=f.read()
    #     return data
    # def favicon():
    #     with open('favicon.ico','rb')as f:
    #         data=f.read()
    #     return data
    
    # 继续优化代码
    def func1(func,environ):
        if func=='favicon':
            with open(f'{func}.ico', 'rb')as f:
                data = f.read()
            return data
    
        with open(f'{func}.html', 'rb')as f:
            data = f.read()
        return data
    
    
    httpd=make_server('127.0.0.1',8080,application)
    print('server http on port ')
    # 开始监听HTTP请求
    httpd.serve_forever()
    优化代码

    软件开发目录规范

    代码解耦

    如下就相当于一个简单的web框架

    urls.py----路由分配

    views.py----

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

    扩展框架关于数据库的操作(核心)

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

    web框架 总结
    
    main.py: 启动文件,封装了socket
    
    1 urls.py: 路径与视图函数映射关系  ---- url控制器
    
    2 views.py 视图函数,固定有一个形式参数:environ -----视图函数,
    
    3 templates文件夹: html文件   -----模板
    
    4 models: 在项目启动前,在数据库中创建表结构    ----- 与数据库相关

  • 相关阅读:
    make -j 8参数的作用
    使用请求头认证来测试需要授权的 API 接口
    查看Linux系统的平均负载
    服务器负载均衡的基本功能和实现原理
    Oracle RAC学习笔记:基本概念及入门
    详解物化视图(汇总比较有用的资料)
    程序优化注意的一些点
    PR 审批界面增加显示项方法
    Most Common Solutions to FRM-41839 and .tmp Files Not Being Deleted
    APPCORE Routine APIs
  • 原文地址:https://www.cnblogs.com/foremostxl/p/9937519.html
Copyright © 2011-2022 走看看