web应用
一 什么是web应用
Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件
应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助IE等浏览器来运行。WEB应用程序一般是B/S模式。
本质上:浏览器是一个socket客户端,服务器是一个socket服务端
二 基于socket写一个web应用
主要步骤如下:
WEB应用(网站): 浏览器(socket客户端): 02. www.cnblogs.com(42.121.252.58,80) sk.socket() sk.connect((42.121.252.58,80)) sk.send('你好 web') 05. 接受 06. 连接断开 博客园(socket服务端): 01. 监听ip和端口 while True: 用户 = 等待用户连接 03. 收到'你好 web' 04. 响应: '好' 用户断开 自己写的网站 a. socket服务端 b. 根据URL的不同返回不同的内容 路由系统: URL --> 视图函数 c. 字符串返回给用户 模板引擎渲染: HTML充当模板(特殊字符替换) 自己创造任意数据 返回字符串 用户在页面上看到的内容”字符串“(看到页面效果,由于浏览器解析)
web框架的分类:
WEB框架: 框架种类: 01 a,b,c --> Tornado 02 [第三方a],b,c -->wsgrief(服务端 内置的)->Django 03 [第三方a],b,[第三方c] --> flask,(c用的jinja2) 另一种分类: Django框架(web。。。) 其他
py如下:
import socket def server_run(): sk = socket.socket() sk = socket.bind(('127.0.0.1',8080)) sk = socket.listen(5) while True: conn,addr = sk.accept() #有人来连接了 #获取用户发送的数据 data = conn.recv(1024) print(data) # 1. 直接在send里写,发送给客户端 # 响应头 + 响应体(已经遵规则了) conn.send(b'HTTP/1.1 200 OK\r\n\r\n")<h1>hello web</h1><img src="https://baidu.com/se44rr4r5r5k.jpg"></img>') # 2. 打开一个html文件,发送给客户端 with open('index.html','r',encoding='utf-8') as f: data = f.read() conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8')) # 3. 动态网页,字符串替换 import datetime now = datetime.datetime.now().strftime('%Y-%m-%d %X') with open('index.html','r',encoding='utf-8') as f: data = f.read() data = data.replace('@@time@@',now) conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8')) conn.close() if __name__ == '__main__': server_run()
index.html 文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>@@time@@</h2> <img src="https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5e3814acf9edab64607f4592965fc4a6/14ce36d3d539b600c0c465d0eb50352ac65cb74b.jpg" alt=""> </body> </html>