web框架本之内容梳理

1、http,无状态,短连接

2、浏览器(socket 客户端),网站(socket 服务端)

3、自己写网站

a、写socket 服务端

b、根据URL不同返回不同内容

     路由系统:

              URL ->函数

c、字符串返回给用户

    模板引擎渲染

           HTML充当模板(占位符)

          自己创建认识数据,替换占位符

4、web框架:

      框架种类:

               -a,b,c                 --> Tornado

               -(第三方a),b,c               -->wsgiref(a) -->Django(b,c)

              -(第三方a)b,(第三方c) ---flask 

     分类:

          -Django框架(重量级)

         -其他(轻量级)

import socket
import time
import pymysql

def f1():
    f = open('test1.html','rb')
    data = f.read()
    f.close()
    return data
def f2():
    f = open('test2.html','r',encoding='utf-8')
    data = f.read()
    data1=data.replace('user',str(time.time()))
    f.close()
    return bytes(data1,encoding='utf-8')
def f3():
    conn=None
    results=None
    #连接数据库
    conn=pymysql.connect("10.51.3.10","chenyuxiang","noifhenbo","test_django")
    if conn:
        print('创建数据库链接成功,连接信息:',conn)
        cur = conn.cursor(cursor=pymysql.cursors.DictCursor)#创建游标,cursor=pymysql.cursors.DictCursor 设置返回格式为字典
        query_sql = 'SELECT id,username,`password` from userinfo;'#要执行的sql语句
        cur.execute(query_sql)
        results = cur.fetchall()#取所有查询结果
        cur.close()
        conn.close()
        tmp_list=[]
        #循环处理,每一行生成一组tr
        for tmp in results:
            t_list = '<tr><th>{0}</th><th>{1}</th><th>{2}</th></tr>'.format(tmp['id'],tmp['username'],tmp['password'])
            tmp_list.append(t_list)
    content = ''.join(tmp_list)#拼接所有的tr
    f = open('test3.html','r',encoding='utf-8')
    data = f.read()
    f.close()
    data1=data.replace('@@ws@@',content)#替换占位符

    return bytes(data1,encoding='utf-8')

def f4():
    conn=pymysql.connect("10.51.3.10","chenyuxiang","noifhenbo","test_django")
    cur = conn.cursor(cursor=pymysql.cursors.DictCursor)#创建游标,cursor=pymysql.cursors.DictCursor 设置返回格式为字典
    query_sql = 'SELECT id,username,`password` from userinfo;'#要执行的sql语句
    cur.execute(query_sql)
    user_list = cur.fetchall()#取所有查询结果
    cur.close()
    conn.close()

    f = open('test4.html','r',encoding='utf-8')
    data = f.read()
    f.close()

    #利用from jinja2 import Template 做模板渲染功能
    from jinja2 import Template #导入渲染模块
    template = Template(data)
    data1 = template.render(userlist=user_list)
    print(data1,type(data1))
    return bytes(data1,encoding='utf-8')

routers = {'/test1':f1,
           '/test2':f2,
           '/test3':f3,
           '/test4':f4}
def mysockeyservers():

    hostName = "172.30.220.76"
    hostPort = 8080
    arders =(hostName,hostPort)
    sock = socket.socket()
    sock.bind(arders)#绑定地址
    sock.listen(5)#监听
    while True:
        conn , addr = sock.accept() #阻塞住
        data=conn.recv(1024)#获取数据
        sdata=str(data,encoding='utf-8') #bytes转换未字符串
        headers,bodys=sdata.split('\r\n\r\n') #分割获取请求头和请求体
        templist = headers.split('\r\n')#请求头再用换行分割
        method,url,protocol =templist[0].split(' ')  #空格分割获取 method,url,protocol
        print(templist[0],url)



        # 必须以HTTP响应头的格式返回数据,否则浏览器无法正常解析
        # 同时注意send的数据不能是str字符串,必须是bytes,否则会报错。
        conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
        sendmsg = bytes('<h1>testrepost</h1>',encoding='utf-8')
        func_name = None
        for item in routers:
            if item==url:
                func_name = routers[item]
                break
        if func_name:
            response = func_name()
        else:
            response=b'404 not found'
        conn.send(response)

        conn.close()#关闭连接

if __name__ == '__main__':
    mysockeyservers()
    # f3()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值