• web框架


    手写简单的web框架

    WebServer

    import socket
    
    import pymysql
    def index(request): 
        '''
        处理用户请求,并回相应的内容
           request: 用户请求的所有信息
        '''
        return '<img src="https://baidubaike.com/base/dede/swsww237b.jpg"></img>'
    
    def login(request):
        with open('login.html','r',encoding='utf-8') as f:
            data = f.read()
        return data
    
    def time(request):
        import datetime
        now = datetime.datetime.now().strftime('%Y-%m-%d %X')
        with open('time.html','r',encoding='utf-8') as f:
            data = f.read()
        data = data.repalce('@@time@@',now)
        return data 
    
    def user_list(request):
        #连接数据库拿数据  拿到一个数据连接
        conn = pymysql.connect(host='127.0.0.1',port='3306',user='root',database='test',password='')
        #拿到一个游标对象
        cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
        #执行sql
        cursor.execute('select id,name,password from user')
        #把数据拿出来
        user_list = cursor.fetchall()
        print(user_list)
        cursor.close()
        conn.close()
        tr_list = []
        for row in user_list: #每个row数据库里一行数据
            tr = '<tr><td>%s</td><td>%s</td><td>%s</td></tr>'%(row['id'],row['name'],row['password'])
            tr_list.append(tr)
        with open('user_list.html','r',encoding='utf-8') as f:
            data = f.read()
        data = data.replace('@@body@@',''.join(tr_list))
        return data
    
    #使用jinja2
    def user_list_new(request):
        #创建连接
        conn = pymysql.connect(host='127.0.0.1',port='3306',user='root',database='test',password='')
        cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
        cursor.execute('select * from user')
        user_list = fetchall()
        cursor.close()
        conn.close()
        with open('user_list_new.html','r',encoding='utf-8') as f:
            data = f.read()
        from jinja2 import Template #基于第三方工具实现模板渲染 #模板渲染(模板+数据)
        template = Template(data)
        response = template.render(user_list=user_list) # 数据替换模板指定位置
        return response
    
    urls = [
        ('/index',index),
        ('/login',login),
        ('/time',time),
        ('/user_list',user_list),
        ('/user_list_new',user_list_new),
    ]
    
    def run ():
        sk = socket.socket()
        sk = socket.bind(('127.0.0.1',8080))
        sk = sockrt.listen(5)
        while True:
            conn,port = sk.accept()
            data = conn.recv(1024)
            print(data)
            data = str(data,encoding='utf-8')
            request_list = data.split('
    
    ')
            head_list = request_list[0].split('
    ')
            method, url, htt = head_list[0].split(' ')
            conn.send(b'HTTP/1.1 200 OK 
    
    ')
            print(url)
            func_name = None
            for u in urls:
                if url == u[0]:
                    func_name = u[1]
                    break
            if func_name:
                response = func_name(data)
            else:
                response = '404 not found'
               
            conn.send(response.encode("utf-8"))
            conn.close()
            
    if __name__ == '__main__':
        run()

    login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <form action="">
        <p>用户名:<input type="text"></p>
        <p>密码:<input type="password"></p>
    </form>
    </body>
    </html>

    time.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    @@time@@
    </body>
    </html>
    user_list.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>用户列表</title>
    </head>
    <body>
    
    <table border="1">
        <thead>
            <tr>
                <th>id</th>
                <th>用户名</th>
                <th>密码</th>
            </tr>
        </thead>
        <tbody>
            @@body@@
        </tbody>
    
    
    </table>
    
    </body>
    </html>

    user_list_new.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>用户列表</title>
    </head>
    <body>
    <table border="1">
        <thead>
        <tr>
            <th>id</th>
            <th>name</th>
            <th>password</th>
        </tr>
        </thead>
        <tbody>
    
        {% for user in user_list%}
        <tr>
            <td>{{user.id}}</td>
            <td>{{user.name}}</td>
            <td>{{user.password}}</td>
        </tr>
        {%endfor%}
    
    
        </tbody>
    
    
    </table>
    
    </body>
    </html>
  • 相关阅读:
    去除文件及子文件的隐藏和只读属性
    一个比较全的C++农历算法(转)
    Activity 的窗口去头的方式
    SQL查询显示行号、随机查询、取指定行数据
    C++中map用法详解(转)
    窗口消息大全(转)
    CTreeCtrl的用法汇总(转)
    CTreeView和CTreeCtrl的使用方法(转)
    用CImage加载内存里的Image(转)
    序列化编程,保存和读取配置文件
  • 原文地址:https://www.cnblogs.com/kingyanan/p/9593841.html
Copyright © 2020-2023  润新知