使用字典管理请求路径 | 学习笔记

简介: 快速学习 使用字典管理请求路径

开发者学堂课程【Python入门 2020年版 使用字典管理请求路径】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10486


使用字典管理请求路径


内容介绍

一、HTTP 服务器函数封装

二、使用字典管理路径


一、HTTP 服务器函数封装

代码:

import json

from wsgiref.simple_server import make_server

def load_file(file_name,**kwargs):

try:

with open(page/+file_name,r,encoding=utf8) as file:

content=file.read()

if kwargs:

content=content.format(**kwargs)

return content

except FileNotFoundError print(‘文件未找到’)

def demo_app(environ,start_response):

path=environ[PATH_INFO]

status_code=’200 OK

if path == '/':

response =’欢迎来到我的首页'

elif path =='/test':

response = json.dumps({name:zhangsan,age:18})

elif path == /demo' :

response=load_file(xxxx.txt)

elif path == /hello' :

response=load_file(hello.html)

elif path == /info' :

response=load_file(info.html,username=zhangsan,age=19,gender=male)

else:

status_code=404 Not Found

response = '页面走丢了’

start_response(status_code,[(Content-Type,text/html;charset=utf8)])

return [‘response.encode(utf8)]

if_ name_=='_ main_ ':

httpd : make_server(‘’, 8080, demo_app):

sa = httpd.socket. getsockname()

print("Serving HTTP on", sa[0], "port", sa[1], "...")

httpd.serve_forever()

现在这个代码还是不够好的,而且这整个代码会非常的复杂,如果请求路径有很多,这里代码请求路径就五个,而且非常简洁,如果代码很多,都写在 response=...就会非常麻烦。

HTTP 服务器函数封装:

import json

from wsgiref.simple_server import make_server

def load_file(file_name,**kwargs):

try:

with open(page/+file_name,r,encoding=utf8) as file:

content=file.read()

if kwargs:

content=content.format(**kwargs)

return content

except FileNotFoundError

print(‘文件未找到’)

def index():

return‘欢迎来到我的首页’

def show_test():

return json.dumps({‘name:zhangsan,age:18})

def show_demo():

return load_file(‘xxxx.txt)

def show_hello():

return load_file(‘hello.html)

def show_info():

return load_file(‘info.html,username=zhangsan,age=19,gender=male)

def demo_app(environ,start_response):

path=environ[PATH_INFO]

status_code=’200 OK

if path == '/':

response =index()

elif path =='/test':

response =show_test()

elif path == /demo' :

response=show_demo()

elif path == /hello' :

response=show_hello()

elif path == /info' :

response=show_info()

else:

status_code=404 Not Found

response = '页面走丢了’

start_response(status_code,[(Content-Type,text/html;charset=utf8)])

return [‘response.encode(utf8)]

if_ name_=='_ main_ ':

httpd : make_server(‘’, 8080, demo_app):

sa = httpd.socket. getsockname()

print("Serving HTTP on", sa[0], "port", sa[1], "...")

httpd.serve_forever()

之前的代码是一个一个调的,现在把它变成函数了。如果有100行代码,只要管理函数就行了。

现在这个代码还是不够好,如果再有一个新的路径 elif path == /foo' :

response=show_foo(),如果有很多路径,比如有100个,这样写就很麻烦,我们不这样写,可以用字典管理路径。


三、使用字典管理路径

1.怎么写

先定义一个全局变量,是字典,注意字典里写‘/:index 不加括号。请求的是’/’,拿到的是 index 这个函数,再写 method,这是一个函数,调用这个函数,再把结果给到 response

如果直接写 method=url[path] response=method(),就会出现 bug,如果人家访问的页面不存在就会崩,所以要有判断。

代码:

import json

from wsgiref.simple_server import make_server

def load_file(file_name,**kwargs):

try:

with open(page/+file_name,r,encoding=utf8) as file:

content=file.read()

if kwargs:

content=content.format(**kwargs)

return content

except FileNotFoundError

print(‘文件未找到’)

def index():

return‘欢迎来到我的首页’

def show_test():

return json.dumps({‘name:zhangsan,age:18})

def show_info():

return load_file(info.html,username=zhangsan,age=19,gender=male)

url={‘/:index,

/test:show_test,

/demo:show_demo,

hello:show_hello

info:show_info

}

def demo_app(environ,start_response):

path=environ[PATH_INFO]

status_code=’200 OK

method=url.get(path)

if method:

response=method()

else:

status_code=404 Not Found

response = '页面走丢了’

start_response(status_code,[(Content-Type,text/html;charset=utf8)])

return [‘response.encode(utf8)]

if_ name_=='_ main_ ':

httpd : make_server(‘’, 8080, demo_app):

sa = httpd.socket. getsockname()

print("Serving HTTP on", sa[0], "port", sa[1], "...")

httpd.serve_forever()

这时代码就看着清爽多了,如果有新的请求,demo_app 那段函数就不用动了。

2.如果又有新的请求/foo 怎么写

代码:

print(‘文件未找到’)

/test:show_test,

/demo:show_demo,

hello:show_hello

info:show_info

/foo:show_foo

}

def demo_app(environ,start_response):

path=environ[PATH_INFO]

status_code=’200 OK

method=url.get(path)

if method:

response=method()

else:

status_code=404 Not Found

response = '页面走丢了’

start_response(status_code,[(Content-Type,text/html;charset=utf8)])

return [‘response.encode(utf8)]

if_ name_=='_ main_ ':

httpd : make_server(‘’, 8080, demo_app):

sa = httpd.socket. getsockname()

print("Serving HTTP on", sa[0], "port", sa[1], "...")

httpd.serve_forever()

运行访问都是正确的。有新的请求就再写一个新函数,再在字典里加入一个新的路径匹配就可以了,写的这个就是一个小框架。

相关文章
|
4天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
5天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1094 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1771 9
|
10天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
703 152
|
12天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
664 13
|
7天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
461 5