96SEO 2026-02-20 04:04 0
API服务安装falcon构建falcon项目应用托管(Hosting

https://falcon.readthedocs.io/en/stable/user/tutorial.html安装falcon
app.py现在创建并打开app.py文件作为应用的入口编辑修改如下代码
可以使用任何变量名Gunicorn希望默认使用application。
WSGI应用只是一个可调用的明确定义的签名可以在任何支持WSGI协议的web
Falcon框架包含大量的内联文档可以通过使用python模块查看技巧来查询。
经过Falcon团队对文档可读性的大量优化可以很快浏览和查找我们需要的。
前面已经创建了一个简单的Falcon应用我们可以让它运行在WSGI
server上。
Python包含一个自托管的参考server但是我们还是使用实际部署时使用的server。
app应用服务部署后可以检验服务效果现在我们使用curl尝试查询它:
-v如果不出不意外你应当将会获取到404。
网络访问不到怎么回事
一方面说明应用服务已经运行已经有返回值404。
Falcon包含默认的404响应处理(response
handler)用来处理没有匹配到任何路由的请求地址。
另一方面返回404这很正常因为应用还没有设定任何路由(route)。
HelloWorldResource())在上面的示例中我们定义了一个名为HelloWorldResource的资源类它包含一个处理HTTP
on_get。
然后创建了一个Falcon应用并将资源路由到根路径’/。
Falcon使用请求req和响应resp对象来处理HTTP请求和构建HTTP响应。
以下是一个处理GET请求并返回JSON响应的示例
falcon.HTTP_200resp.content_type
Falcon使用路由来映射URI到资源。
可以通过add_route方法或者使用装饰器
GreetResource())在上面的示例中URI参数{name}将会传递给on_get方法。
Falcon允许使用中间件来执行在请求处理前后的一些逻辑。
以下是一个简单的中间件示例记录请求处理时间
params):resource.processing_time
req_succeeded):resp.set_header(X-Processing-Time,
str(resource.processing_time))app
falcon.App(middleware[TimingMiddleware()])异常处理
Falcon允许通过抛出自定义异常来处理错误。
以下是一个示例当请求的资源不存在时抛出HTTPNotFound异常
ResourceNotFound(Exception):def
resource_name):self.resource_name
ResourceNotFound(name)resp.status
app.add_error_handler(ResourceNotFound,
Falcon从REST架构风格引入一些术语REST概念。
Falcon的设计理念是尽可能直观地让所有人理解HTTP基本原理。
requests)称为资源(Resources)。
资源只是一个常规Class包含一些遵循一定命名规则的方法(Method)。
每个方法对应一个动作(API客户端为了获取或转换资源去请求执行的动作)。
现在项目需要在构建一个图片分享API那可以创建一个image资源。
在项目目录中创建一个image.py的文件可以在里面添加下面的代码:
falcon.HTTP_200Resource只是一个很常规的class类名可以任意取。
Falcon使用duck-typing所以不需要继承任何特定的基类。
上面的image资源定义单一方法on_get。
对于resource想要支持的任何HTTP方法只需要简单在resource上加on_x类方法(class
method)x可以是标准HTTP方法中的任何一个例如on_get,on_put,on_head(小写)等等。
方法称作responders(响应器)每个responder至少需要两个参数一个代表HTTP请求另一个代表对应请求的HTTP响应。
根据习惯一般缩写作req和resp。
如果是route(路由)和hooks(钩子)可以添加一些额外的参数。
和一个JSON对象。
Falcon默认是application/json作为互联网媒体类型但是可以设置成任何使用的类型。
例如可以使用MessagePack或者其他序列化格式。
现在再把应用服务关联上resource在app.py增加资源描述并关联请求URI将其修改成如下:
images)现在如果传入一个“/images”的请求Falcon请会调用images的资源中的响应器(responder)–对应所需要的HTTP方法。
重启gunicorn并且尝试向resource(资源)发送一个GET请求:
-vduck-typing:动态类型的一种风格。
在这种风格中一个对象有效的语义不是由继承自特定的类或实现特定的接口而是由当前方法和属性的集合决定。
在duck
资源(resource)中的每个响应器(responder)接收一个请求对象(request
object)可以被用作读取headers、查询参数和请求的body。
每个响应器(responder)也能接收一个响应对象(response
object)可以被用作设置HTTP状态码、headers和响应的body。
可以使用help函数去列举RequestResponse类的成员。
让我们探究一下如何运作。
当客户端(client)POST到images集合(collection)时需要创建一个新的image资源。
首先需指定images保存在什么地方。
_media_type_to_ext(media_type):#剥离/images/前缀return
storage_path):self.storage_path
_media_type_to_ext(req.content_type)filename
os.path.join(self.storage_path,
chunk:breakimage_file.write(chunk)resp.status
image_id程序给新图片生成了一个唯一的ID和文件名然后从req.stream
中读取文件数据再写入磁盘。
调用stream而不是body去强调事实正在从输入流读取;Falcon不会输出(spool)或解码(decode)请求数据(request
Created”。
预定义的状态字符清单可以通过对falcon.status_codes调用help函数来查看。
在on_post响应器的最后一行给新创建的资源设置Location
Header。
创建一个路由(route))注意Request类和Response类包含一些读取和设置通用header的便利属性但是通过声明req.get_header和resp.set_header方法总是可以使用任何header。
重启gunicorn然后尝试给resource发送一个POST请求(可以将test.jpg替换成任何你想操作的JPEG文件的路径)
已经完成上传图片到服务器接下来是要能获取它们通过带有文件路径的请求让服务器返回一张图片到Location
localhost:8000/images/87db45ff42
接下来可以在images资源中添加on_get响应器。
按照这个思路如果要处理多张图片除了表示单张图片资源的类以外还需要新建一个类。
我们可以在新的类中添加on_get响应器。
需要注意到on_get响应器中的name参数。
任何在路由中指定的URL参数都将被转换成对应的kwargs参数同时传递到目标响应器(responder)中。
在on_get响应器中按照文件名扩展去设置内容类型的header然后通过打开文件操作来直接以数据流形式输出图片。
还有需要注意resp.stream_len
的用法。
每当使用resp.stream来代替resp.body或resp.data的时候必须给数据流指定一个预期的长度以便web客户端知道从响应(response)中读取的数据有多大。
现在将事件关联上然后尝试运行一下。
首先按照下面的例子来编辑app.py:
/usr/local/var/lookimage_collection
images.ImgResource(storage_path)
image.Item(storage_path)api.add_route(/images,
image)定义了一个新的路由/images/{name}。
这会让Falcon将所有的对应的响应器(responder)和获取的name参数关联起来。
Falcon还支持更加复杂的参数化路径段(包含多个值)。
例如类Grasshopper(GH-like,可以通过参数的调整直接改变模型形态)的API能够使用下面的模板为两个分支添加一个路由。
/repo/{org}/{repo}/compare/{usr0}:{branch0}…{usr1}:{branch1}
Falcon提供了app.route装饰器可以简化路由的定义。
使用
Falcon提供了Request和Response对象的模型它们对原始HTTP请求和响应进行了封装提供更便捷的处理方式。
使用中间件处理通用逻辑
中间件是Falcon的强大功能之一可用于处理日志、鉴权等通用逻辑。
异常处理的一致性
GPT实战系列-ChatGLM3本地部署CUDA111080Ti显卡24G实战方案
GPT实战系列-ChatGLM2部署UbuntuCuda11显存24G实战方案
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback