zoukankan      html  css  js  c++  java
  • web框架的本质及自定义web框架

    web框架

    简单版回复页面框架

    import socket
    server = socket.socket()
    server.bind(('127.0.0.1',8001))
    # 127.0.0.1:8001
    server.listen()
    while 1:
        conn,addr = server.accept()
        from_brower_msg = conn.recv(1024)
        # print(from_brower_msg)
        path = from_brower_msg.decode('utf-8').split(' ')[1]
        print(path)
        conn.send(b'HTTP/1.1 200 ok
    
    ')
        if path == '/':
            with open('04test.html','rb') as f:
                data = f.read()
        elif path == '/style.css':
            with open('style.css', 'rb') as f:
                data = f.read()
        elif path == '/test.js':
            with open('test.js', 'rb') as f:
                data = f.read()
        elif path == '/1.jpg':
            with open('1.jpg', 'rb') as f:
                data = f.read()
        conn.send(data)
        conn.close()
    

    进阶函数版框架+多线程web框架

    import socket
    from urls import urlpatterns
    from threading import Thread
    server = socket.socket()
    server.bind(('127.0.0.1',8003))
    # 127.0.0.1:8001
    server.listen()
    while 1:
        conn,addr = server.accept()
        from_brower_msg = conn.recv(1024)
        # print(from_brower_msg)
        path = from_brower_msg.decode('utf-8').split(' ')[1]
        print(path)
        conn.send(b'HTTP/1.1 200 ok
    
    ')
        for url in urlpatterns:
            if path == url[0]:
                # ret = url[1]()
                t = Thread(target=url[1],args=(conn,))
                t.start()
                break
        # else:
        #     t = Thread(target=nofount,args=(conn,))
        #     t.start()
        # if path == '/':
        #     ret = home()
        #     # t = Thread(target=home,)
        #     # t.start()
        #
        # elif path == '/style.css':
        #     ret = css()
        #
        # elif path == '/test.js':
        #     ret = js()
        #
        # elif path == '/1.jpg':
        #     ret = pic()
    

    动态页面的web框架

    import socket
    from urls import urlpatterns
    from threading import Thread
    
    server = socket.socket()
    
    server.bind(('127.0.0.1',8003))
    # 127.0.0.1:8001
    server.listen()
    
    
    
    
    while 1:
    
        conn,addr = server.accept()
    
        from_brower_msg = conn.recv(1024)
        # print(from_brower_msg)
        path = from_brower_msg.decode('utf-8').split(' ')[1]
        print(path)
        conn.send(b'HTTP/1.1 200 ok
    
    ')
    
        for url in urlpatterns:
            if path == url[0]:
                # ret = url[1]()
                t = Thread(target=url[1],args=(conn,))
                t.start()
                break
    

    不同html页面web框架

    import socket
    from urls import urlpatterns
    from threading import Thread
    
    server = socket.socket()
    
    server.bind(('127.0.0.1',8003))
    # 127.0.0.1:8001
    server.listen()
    
    
    
    while 1:
    
        conn,addr = server.accept()
    
        from_brower_msg = conn.recv(1024)
        # print(from_brower_msg)
        path = from_brower_msg.decode('utf-8').split(' ')[1]
        print(path)
        conn.send(b'HTTP/1.1 200 ok
    
    ')
    
        for url in urlpatterns:
            if path == url[0]:
                # ret = url[1]()
                t = Thread(target=url[1],args=(conn,))
                t.start()
                break
    

    wsgiref模块

    from wsgiref.simple_server import make_server
    
    from urls import urlpatterns
    
    def application(environ,start_response):
        # environ  所有请求相关信息
        # start_response --封装响应数据格式
    
        print('当前请求路径',environ['PATH_INFO'])
        path = environ['PATH_INFO']
        start_response('200 ok',[]) # conn.send(b'HTTP/1.1 200 ok
    
    ')
        for url in urlpatterns:
            if path == url[0]:
                ret = url[1]()
    
        return [ret]
    
    
    if __name__ == '__main__':
        h = make_server('127.0.0.1', 8080, application)
        h.serve_forever()
    
    
    
    
    

    jinja2模块

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="x-ua-compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>Title</title>
    </head>
    <body>
        <h1>姓名:{{name}}</h1>
        <h1>爱好:</h1>
        <ul>
            {% for hobby in hobby_list %}
            <li>{{hobby}}</li>
            {% endfor %}
        </ul>
    </body>
    </html>
    
    from wsgiref.simple_server import make_server
    from jinja2 import Template
    
    
    def index():
        with open("index2.html", "r",encoding='utf-8') as f:
            data = f.read()
        template = Template(data)  # 生成模板文件
        ret = template.render({"name": "于谦", "hobby_list": ["烫头", "泡吧"]})  # 把数据填充到模板里面
        return [bytes(ret, encoding="utf8"), ]
    
    
    # 定义一个url和函数的对应关系
    URL_LIST = [
        ("/index/", index),
    ]
    
    def run_server(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/html;charset=utf8'), ])  # 设置HTTP响应的状态码和头信息
        url = environ['PATH_INFO']  # 取到用户输入的url
        func = None  # 将要执行的函数
        for i in URL_LIST:
            if i[0] == url:
                func = i[1]  # 去之前定义好的url列表里找url应该执行的函数
                break
        if func:  # 如果能找到要执行的函数
            return func()  # 返回函数的执行结果
        else:
            return [bytes("404没有该页面", encoding="utf8"), ]
    
    
    if __name__ == '__main__':
        httpd = make_server('', 8000, run_server)
        print("Serving HTTP on port 8000...")
        httpd.serve_forever()
    
  • 相关阅读:
    [bzoj1731] [Usaco2005 dec]Layout 排队布局
    [bzoj1914] [Usaco2010 OPen]Triangle Counting 数三角形
    [bzoj1774] [Usaco2009 Dec]Toll 过路费
    [bzoj1783] [Usaco2010 Jan]Taking Turns
    [bzoj1705] [Usaco2007 Nov]Telephone Wire 架设电话线
    [bzoj1700]: [Usaco2007 Jan]Problem Solving 解题
    定时启动任务
    数据库表转javaBean
    验证码的生成
    MD5加密与验证
  • 原文地址:https://www.cnblogs.com/beichen123/p/11937218.html
Copyright © 2011-2022 走看看