web引入

web的应用本质

socket网络编程
    架构:c/s架构
  协议:TCP/udp协议
  传输层
web应用:
    架构:B/S架构
  协议:HTTP协议
    应用层
字节转字符串 str(res,encoding="utf-8")
字符串转自截 bytes(data,encoding='utf-8')

web框架总结

a.自己写socket服务端
b.路由系统:  将客户端请求的url映射到相对应的函数, 最后执行函数即可
c.模版渲染: a自己自定义的规则。b使用第三方的工具*jinja2

web框架分类

1第一种唯度分类:
    a,b,c都写的----tornado
  a(引入第三方),b,c----django。 
  a,c(引入第三方) b------flask
  
2.第二种唯度分类:
    1.djiango
                --orm
            --session
        --form表单验证
    2.其他
  

*********************自定义web框架********************
目标:
将自定制的server变成一个动态的server

    Http协议: (**************************************)
        
        请求头:
            GET / HTTP/1.1
            Host: 127.0.0.1:8080
            Connection: keep-alive
            Cache-Control: max-age=0
            Upgrade-Insecure-Requests: 1
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
            Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
            Accept-Encoding: gzip, deflate, br
            Accept-Language: zh-CN,zh;q=0.9 

        请求体:    
            请求的内容
    
    
        响应头:
            HTTP/1.1 200 OK
            
        响应体:
            "hello world"
            (用户看到的内容)
    
    
    改造之后, 动态的server:
        def f1():
            return bytes('xxxx', encoding='utf-8')

        def f2():
            return bytes('oooo', encoding='utf-8')

        def f3():
            return bytes('aaaa', encoding='utf-8')


        #### 路由系统  作用: 将客户端请求的url映射到相对应的函数, 最后执行函数即可
        routes = [
            ('/xxx', f1),
            ('/ooo', f2),
            ('/aaa', f3),
        ]


        def run():
            import socket
            sock = socket.socket()
            sock.bind(('127.0.0.1', 8080))
            sock.listen(5)

            while True:
                conn, addr = sock.accept()
                data = conn.recv(8090)
                # print(data)
                ### 转成字符串类型
                data_str = str(data, encoding='utf-8')

                header_list = data_str.split('\r\n\r\n')
                headers = header_list[0]
                url = headers.split('\r\n')[0].split(' ')[1]

                ### 判断url
                # if url == '/xxx':
                #     res = bytes('xxxx', encoding='utf-8')
                # elif url == '/ooo':
                #     res = bytes('oooo', encoding='utf-8')
                # else:
                #     res = bytes('404 not found', encoding='utf-8')
                func_name = None
                for items in routes:
                    if items[0] == url:
                        func_name = items[1]
                        break
                if func_name:
                    res = func_name()
                else:
                    res = bytes('404 not found', encoding='utf-8')

                conn.send(bytes("HTTP/1.1 200 OK\r\n\r\n",encoding='utf-8'))
                conn.send(res)
                conn.close()

猜你喜欢

转载自www.cnblogs.com/zhuyuanying123--/p/11317788.html