• 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('
    
    ')
    				headers = header_list[0]
    				url = headers.split('
    ')[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
    
    ",encoding='utf-8'))
    				conn.send(res)
    				conn.close()
  • 相关阅读:
    AC自动机【学习笔记】
    SCOI2016 背单词【Trie树,贪心】
    【字符串算法】字典树Trie入门
    USACO 1.3 Name That Number【暴搜】
    MapReduce分组
    MapReduce排序
    博客园添加访问人数统计
    MapReduce的分区
    MapReduce的计数器
    MapReduce部分源码解读(一)
  • 原文地址:https://www.cnblogs.com/zhuyuanying123--/p/11317788.html
Copyright © 2020-2023  润新知