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

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

开发者学堂课程【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()

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

相关文章
Request请求转发和重定向的资源路径问题,目录到底加不加,取决于浏览器用,还是服务器用,规避项目目录发生修改,导致重定向失败
Request请求转发和重定向的资源路径问题,目录到底加不加,取决于浏览器用,还是服务器用,规避项目目录发生修改,导致重定向失败
|
2月前
|
存储 安全 PHP
安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
|
1月前
|
Java 数据库连接 应用服务中间件
表单数据返回不到,HTTP状态 404 - 未找未找到,解决方法,针对这个问题,写一篇文章,理一下思路,仔细与原项目比对,犯错的原因是Mapper层的select查询表单数据写错,注意打开的路径对不对
表单数据返回不到,HTTP状态 404 - 未找未找到,解决方法,针对这个问题,写一篇文章,理一下思路,仔细与原项目比对,犯错的原因是Mapper层的select查询表单数据写错,注意打开的路径对不对
|
3月前
|
Python
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
127 1
|
JSON 小程序 数据库
借助云开发实现小程序列表页(包含json数据的请求和解析)
借助云开发实现小程序列表页(包含json数据的请求和解析)
279 0
|
XML 数据格式
为什么访问同一个网址却返回不同的内容
为什么访问同一个网址却返回不同的内容
|
文件存储
Yii2.0框架提供了内置的文件访问组件,可以通过配置只允许访问指定的目录,防止非法文件的包含。这个如何使用?
Yii2.0框架提供了内置的文件访问组件,可以通过配置只允许访问指定的目录,防止非法文件的包含。这个如何使用?
129 0
|
PHP
Laravel返回不重复的某个字段信息列表
->groupBy('brand_id') ->pluck('brand_id');  学习交流群:364976091
1848 0