zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    子类构造函数中调用虚函数问题验证
    socks5代理浅识
    关于C++标准库(第2版)std::remove_if的"特性"概述
    动态获取结构体中指定的属性值
    构造和析构函数定义为私有场景
    remove_pointer使用测验
    广播自定义消息实现进程间的通信问题
    遍历窗口权限问题
    嵌入窗口到桌面的问题
    实验一 熟悉实验环境
  • 原文地址:https://www.cnblogs.com/zhuyuanying123--/p/11317788.html
Copyright © 2011-2022 走看看