python实现一个web服务器

本文介绍了如何使用Python的简单服务器模块,并对其进行了扩展,实现URL路由和异常处理,以构建更灵活的应用。通过定义视图函数和配置路由,我们展示了如何处理不同URL请求和错误情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,使用python开启一个web服务器

自带的simple_server模块开启一个服务器;

from wsgiref.simple_server import make_server
#导入simple_server模块

#定义一个application,遵循wsgi协议;
def app(env, start_response):  #服务器接收到的客户端请求都会存储在env中,再传入到app进行处理,处理后再返回
    start_response("200 ok",[("Content-Type","text/plain")])
    return [b'hello'] #swgi协议规定必须返回bety


#实例化一个服务器设置ip为本机,端口为5000,执行程序为上面的app
server = make_server("", 5000, app)
#开启一个服务器,默认0.5秒轮询,接收客户端请求
server.serve_forever()

开启后在浏览器输入localhost:5000即可访问,如下:
在这里插入图片描述

二,将我们的app逻辑优化一下

app能够处理多个url以及异常处理如下:

#视图函数
def home(*args):
    return "home"
def login(*args):
    return "login"
def project(*args):
    return "project"

patterns = {"/":home,"/login":login,"/project":project}  #路由关系的字典

def app(env, start_response):
    url = env.get("PATH_INFO") #从环境变量获取web端传来的url
    params = env.get("QUERY_STRING") #从环境变量获取web端传入的参数
    if (url is None) or (url not in patterns.keys()):
        start_response("404 not found", [("Content-Type", "text/plain")])
        return [b"page not found"]
    start_response("200 ok",[("Content-Type", "text/plain")])
    resp = patterns.get(url)
    if resp is None:         #key在路由关系里,但是velue为none的情况处理
        start_response("404 not found", [("Content-Type", "text/plain")])
        return [b"page not found"]
    return [resp(params).encode()] #执行视图函数


server = make_server("", 5000, app)
server.serve_forever()

访问url=“/”
在这里插入图片描述
访问url=“/login”
在这里插入图片描述
访问不存在的url
在这里插入图片描述
这是用的python低层模块实现的web服务器,像成熟的框架flask以及django也都是在这个基础上封装的,希望能帮到你~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值