用python实现一个简单的web应用

简单的web应用

其实,我们使用python的套接字就可以简单的实现一个web应用
应用程序有两种模式c/s,b/s即客户端服务器,浏览器服务器

简单的过程分析

当我们访问浏览器时,请求过程和响应过程;浏览器帮我们请求服务端数据,服务端返回数据给浏览器的过程

现在我们只要写一个简单的服务端程序,接受浏览器请求,然后再返回数据给浏览器就可以了

见代码

from socket import *
#申请一个sock对象
server = socket(AF_INET,SOCK_STREAM)

#绑定ip和端口,设置最大监听数
server.bind(("127.0.0.1",8001))
server.listen(5)
print("server accept...")
#接受浏览器连接
while True:
     conn,addr= server.accept()  #返回套接字对象和ip+端口
     data = conn.recv(1024)   #接受浏览器发过来的数据
     print(data.decode("utf8"))
     conn.send(b"HTTP/1.1 200 OK\r\n\r\nhello web")  #返回版本号 状态码 状态描述 回车 响应体
     conn.close()

浏览器只要使用127.0.0.1:8001就可以访问该页面
我们发送数据给浏览器数据时,要遵守http协议,所以,数据前面需要加HTTP/1.1 200 OK\r\n\r\n

http协议

简介:客户端服务器架构c/s,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

特点

  • 基于TCP/IP(需要建立链接再发送消息)
  • 基于请求响应模式(客户端发送请求,浏览器发送响应)
  • 无状态保存(不会保存之前的请求/响应报文)
  • 无连接(每次链接只处理一个请求,就断开连接)

请求协议

请求首行:方法(post/get),URL,协议版本
请求头中属性:
HOST:请求主机
Connection:请求状态keep-alive close
Content-Type:请求内容类型
Content-length:请求长度

注意:
请求首行和请求头之间用一个\r\n
请求头中:每一个请求属性之间用换行符隔开\r\n
请求头结束用\r\n\r\n

GET请求没有请求体,POST请求才有请求体
GET请求将数据放入URL中,与地址用?隔开(数据就是键值对)内容有大小限制,主要用来查询数据
POST请求将数据放入请求体中,内容无限,主要用来提交数据

示例:

GET / HTTP/1.1 
Host:hackr.jp

注意:每个属性都用换行分割(\r\n)

响应协议

响应首行:协议版本,状态码,状态码的原因短语
响应头:
Data:
Content:
Content-Type:text/html
响应体:给浏览器加载的
响应状态码:

重定向:让客户端再发一个请求到新的URL中去

示例:

HTTP/1.1 200 OK
Content-Type:text/html

wsgiref模块

python下基于wsgi开发的服务模块.用于接受HTTP请求,解析HTTP请求,发送HTTP响应。

导入:
from wsgiref.simple_server import make_server

示例

from wsgiref.simple_server import make_server
#创建回调函数
def application(environ,start_response):
    start_response("200 OK",[("Content-Type","text/html")])
    return [b"<h1>hellow web</h1>"]

print("server acceptting...")
#创建一个对象
httpd = make_server("127.0.0.1",8000,application)
httpd.serve_forever()

猜你喜欢

转载自blog.csdn.net/xgy123xx/article/details/81611738