• Django——web框架(基于wsgiref自己写)


    一、web框架

    web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率

    二、基于wsgiref写一个web框架

     

     models.py

    '''
    链接数据库返回字典格式:
    cursor=pymysql.cursors.DictCursor
    '''
    
    import pymysql
    #连接数据库
    conn = pymysql.connect(host='127.0.0.1',port= 3306,user = 'root',passwd='123456',db='web') #db:库名
    #创建游标
    cur = conn.cursor()
    
    sql='''
    create table userinfo(
            id INT PRIMARY KEY ,
            name VARCHAR(32) ,
            password VARCHAR(32)
    )
    
    '''
    
    cur.execute(sql)
    
    #提交
    conn.commit()
    #关闭指针对象
    cur.close()
    #关闭连接对象
    conn.close()
    models.py

    myserver.py

    wsgiref模块内部帮我们实现 了socket,实现web服务

    from wsgiref.simple_server import make_server
    from urls import url_patters
    
    
    def server(environ, start_response):  # 必须传两个参数
        start_response('200 OK', [('Content-Type', 'text/html')])
        func=None
        for item in url_patters:
            if item[0] == environ.get('PATH_INFO'):
                func = item[1]
                break
        if func:
            data = func(environ, start_response)
        else:
            data='error'.encode('utf-8')
    
        return [data]
    
    
    if __name__ == '__main__':
        myserver = make_server('127.0.0.1', 8081, server)
        myserver.serve_forever()
    myserver.py

    urls.py

    # 路径和函数对应关系
    
    from views import *
    url_patters = [
        ('/login', login),
        ('/index', index),
        ('/time', time),
        ('/order', order),
    ]
    urls.py

    views.py

    def login(environ, start_response):
        with open('templates/login.html', 'rb') as f:
            data = f.read()
        return data
    
    
    def index(environ, start_response):
        with open('templates/index.html', 'rb') as f:
            data = f.read()
        return data
    
    
    def time(environ, start_response):
        import time
        with open('templates/time.html', 'r', encoding='utf-8') as f:
            #                replace(替换前 ,替换后)
            data = f.read().replace('{{time}}', str(time.time()))
    
        return data.encode('utf-8')
    
    
    def order(environ, start_response):
        return 'order'.encode('utf-8')
    views.py

    tempaltes下backend.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    登录成功
    </body>
    </html>
    tempaltes下backend.html

    tempaltes下index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    index
    </body>
    </html>
    tempaltes下index.html

    tempaltes下login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <h4>登录页面</h4>
    <form action="http://127.0.0.1:8011/login" method="post">
         用户名 <input type="text" name="user">
         密码 <input type="text" name="pwd">
        <input type="submit">
    </form>
    </body>
    </html>
    tempaltes下login.html

    其它socket服务端

    'cgi': CGIServer,
        'flup': FlupFCGIServer,
        'wsgiref': WSGIRefServer,
        'waitress': WaitressServer,
        'cherrypy': CherryPyServer,
        'paste': PasteServer,
        'fapws3': FapwsServer,
        'tornado': TornadoServer,
        'gae': AppEngineServer,
        'twisted': TwistedServer,
        'diesel': DieselServer,
        'meinheld': MeinheldServer,
        'gunicorn': GunicornServer,
        'eventlet': EventletServer,
        'gevent': GeventServer,
        'geventSocketIO':GeventSocketIOServer,
        'rocket': RocketServer,
        'bjoern' : BjoernServer,
        'auto': AutoServer,
    其它socket服务端
  • 相关阅读:
    WPF:ListView 分组合并
    WPF:ListView 分页
    SQL
    多线程27 -- ReentrantLock
    String 对象常用方法及属性 详细介绍
    js中Array 对象方法 详细介绍
    js--运算符与或非 及 if判断条件、隐式转换 介绍
    js-函数表达式和函数声明的区别
    js预编译案例分析
    js--万物皆对象
  • 原文地址:https://www.cnblogs.com/guojieying/p/13732310.html
Copyright © 2020-2023  润新知