使用WSGI怎么实现不同的路由访问
时间: 2024-02-01 15:17:03 浏览: 37
使用WSGI可以通过编写中间件来实现不同的路由访问。具体操作如下:
1. 编写一个可以将请求分发到不同路由的中间件。
```python
class RouterMiddleware:
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
path_info = environ.get('PATH_INFO', '')
if path_info == '/api/users':
environ['myapp.route'] = 'users'
elif path_info == '/api/posts':
environ['myapp.route'] = 'posts'
else:
environ['myapp.route'] = 'default'
return self.app(environ, start_response)
```
2. 在应用程序中使用这个中间件,并根据路由调用不同的处理程序。
```python
from wsgiref.simple_server import make_server
def users_handler(environ, start_response):
response_body = b'Users page'
status = '200 OK'
headers = [('Content-Type', 'text/plain')]
start_response(status, headers)
return [response_body]
def posts_handler(environ, start_response):
response_body = b'Posts page'
status = '200 OK'
headers = [('Content-Type', 'text/plain')]
start_response(status, headers)
return [response_body]
def default_handler(environ, start_response):
response_body = b'Hello World'
status = '200 OK'
headers = [('Content-Type', 'text/plain')]
start_response(status, headers)
return [response_body]
def myapp(environ, start_response):
route = environ.get('myapp.route', 'default')
if route == 'users':
return users_handler(environ, start_response)
elif route == 'posts':
return posts_handler(environ, start_response)
else:
return default_handler(environ, start_response)
app = RouterMiddleware(myapp)
with make_server('', 8000, app) as httpd:
print("Serving on port 8000...")
httpd.serve_forever()
```
以上代码实现了不同路由的访问,访问`/api/users`会调用`users_handler`函数,访问`/api/posts`会调用`posts_handler`函数,访问其他路径会调用`default_handler`函数。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)