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()
posted @ 2019-08-07 20:57  enazede  阅读(174)  评论(0编辑  收藏  举报