您的位置:首页 > 编程语言 > Python开发

python web自制框架之-完整服务端实现

2018-02-13 16:01 211 查看
今天我们做下服务端的完整实现,把路由与模型分开来。
首先是run函数,实现接收请求与返回客户端数据
1.def run(host='', port=3000):
"""
启动服务器
"""
# 初始化 socket 套路

log('start at', '{}:{}'.format(host, port))
with socket.socket() as s:
s.bind((host, port))
# 无限循环来处理请求
while True:
# 监听 接受 读取请求数据 解码成字符串
s.listen(5)
connection, address = s.accept()
r = connection.recv(1000)
r = r.decode('utf-8')
# log('ip and request, {}\n{}'.format(address, request))
# 因为 chrome 会发送空请求导致 split 得到空 list
# 所以这里判断一下防止程序崩溃
if len(r.split()) < 2:
continue
path = r.split()[1]
# 设置 request 的 method
request.method = r.split()[0]
# 把 body 放入 request 中
request.body = r.split('\r\n\r\n', 1)[1]
# 用 response_for_path 函数来得到 path 对应的响应内容
response = response_for_path(path)
# 把响应发送给客户端
connection.sendall(response)
# 处理完请求, 关闭连接
connection.close()这个是完整的服务器接收与返回数据(客户端).
这里的注意:
with socket.socket() as s:
# 使用 with 可以保证程序中断的时候正确关闭 socket 释放占用的端口
request是个全局变量,为了接收数据而设,在我上篇文章里有介绍。
response = response_for_path(path)response_for_path(path)为函数,如下:def response_for_path(path):
path, query = parsed_path(path)
request.path = path
request.query = query
log('path and query', path, query)
"""
根据 path 调用相应的处理函数
没有处理的 path 会返回 404
"""
r = {
'/static': route_static,
# '/': route_index,
# '/login': route_login,
# '/messages': route_message,
}
r.update(route_dict)
response = r.get(path, error)
log('request',response(request))
return response(request)这里的注意:
path, query = parsed_path(path)parsed_path是得路径与参数,具体代码就不贴了,如果需要,可以留言。
path里是路径,query里存的参数。
r = {
'/static': route_static,
# '/': route_index,
# '/login': route_login,
# '/messages': route_message,
}这里,我们刚开始是在这里存路由,现在我们把路由放在别的文件中,所以,这里只是放着静态文件的路径。
r.update(route_dict)r更新,把route_dict里的路径添加进去。如下route_dict = {
'/': route_index,
'/login': route_login,
'/register': route_register,
'/messages': route_message,
}到这里,我们就完成了简单的mvc模式分离的一部分。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python web 框架