zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Lazarus教程 中文版后续给出
    QBASIC教程
    Object Pascal中文手册 经典教程
    Pascal 基础教程
    Delphi中的关键字与保留字
    Pascal数据结构与算法
    Pascal小游戏 贪吃蛇
    Pascal小游戏 俄罗斯方块怀旧版
    Pascal ASCII和文本的转换
    IDEA安装问题解决
  • 原文地址:https://www.cnblogs.com/kingyanan/p/9593841.html
Copyright © 2011-2022 走看看