码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • python cherry 用法


    CheeryPy是一个 Pythonic 的、面向对象的 Web 框架,能够用于接受POST或者GET请求并进行回复。

    CheeryPy中文文档:

    Cherrypy-一个极简的python web框架 — CherryPy 18.6.1.dev44+gc524a0da.d20220502 文档

    根据中文文档,给出一个简单的应用例子,

    包括:

    • 接受POST和GET请求,并进行回复
    • 解码JSON请求内容
    • 通过定义CheeryPy配置文件,自定义请求端口

    1. import cherrypy
    2. import json
    3. import logging
    4. logging.basicConfig(level=logging.DEBUG)
    5. class CheeryPyTest(object):
    6. @cherrypy.expose # 暴露接口
    7. def index(self):
    8. return "Hello world!"
    9. @cherrypy.expose # 暴露接口
    10. # @cherrypy.tools.json_out()
    11. @cherrypy.tools.json_in() # 解码JSON请求
    12. def generate_request(self): # 可以接受GET或者POST请求,参数为key和value
    13. try:
    14. request_para = cherrypy.request.json
    15. if "key" not in request_para or "value" not in request_para:
    16. logging.error("request para error!, request:%s", str(request_para))
    17. return "request para error!"
    18. key = request_para["key"]
    19. value = request_para["value"]
    20. logging.info("key: %s, value: %s", key, value)
    21. return "request succ!"
    22. except Exception as e:
    23. logging.error('unknow error: %s', e)
    24. return "request error!"
    25. def main():
    26. cherrypy.config.update({'server.socket_host': '0.0.0.0', # 主机IP
    27. 'server.socket_port': 7090, # 自定义端口
    28. 'engine.autoreload.on': False})
    29. cherrypy.quickstart(CheeryPyTest())
    30. if __name__ == '__main__':
    31. main()

    示例包括两个接口

    第一个接口:

    直接请求 :http://127.0.0.1:8080:7090/index,

    正常返回:"hello world"

    第二个接口:

     通过http://127.0.0.1:8080:7090,加上POST请求参数即可

    1. {
    2. "key": "hello",
    3. "value": "world"
    4. }

    或者使用curl请求的方式:

    curl -H "Content-Type: application/json" -X POST -d '{"key": "hello", "value":"world"}' http://localhost:7090/generate_request

    cheerypy实现wgsi架构:https://www.cnblogs.com/-wenli/p/10884168.html#:~:text=python%20WSGI%E6%A1%86%E6%9E%B6%E8%AF%A6%E8%A7%A3%201%20Application%2FFramework%20Application%2Fframework%20%E7%AB%AF%E5%BF%85%E9%A1%BB%E5%AE%9A%E4%B9%89%E4%B8%80%E4%B8%AA%20callable%20object%EF%BC%8Ccallable,...%204%20Path%20Dispatching%20...%205%20Django%E6%A1%86%E6%9E%B6%E5%88%86%E6%9E%90WSGI%20的使用方法:

    主函数

    1. import cherrypy
    2. def main():
    3. listening_port = 8080
    4. cherrypy.config.update({'server.socket_port': int(listening_port),
    5. 'server.socket_host': '0.0.0.0',
    6. 'engine.autoreload.on': False})
    7. # 这里能够挂载一些服务结束前要执行的函数
    8. # cherrypy.engine.subscribe('exit', lambda: log.stop()))
    9. cherrypy.quickstart(None, '/')
    10. if __name__ == '__main__':
    11. main()

    方法函数

    1. import cherrypy
    2. def api_check_health(environm, start_response):
    3. """
    4. api check health
    5. """
    6. status = '200 OK'
    7. response_headers = [('Content-type', 'application/json')]
    8. start_response(status, response_headers)
    9. return ['ok']
    10. # 获取请求参数并处理返回
    11. def api_get_data(environ, start_response):
    12. status = '200 OK'
    13. response_headers = [('Content-type', 'application/json')]
    14. start_response(status, response_headers)
    15. request_body_size = int(environ.get('CONTENT_LENGTH', 0))
    16. request_body = environ['wsgi.input'].read(request_body_size)
    17. rsp = process_func(request_body)
    18. rsp = rsp.encode("utf-8") # 需要转换
    19. return [rsp]
    20. cherrypy.tree.graft(api_check_health, '/my_server/check_health')
    21. cherrypy.tree.graft(api_get_data, '/my_server/api_get_data')

  • 相关阅读:
    深圳大学计软《程序设计基础》MOOC实验一:数据类型、运算符、输入输出
    MobLink后台基本配置
    计算光刻软件市场报告:半导体和微电子行业对于光刻技术的需求不断增长,推动了计算光刻软件的发展
    金融行业安全事件频发,数据共享与安全如何平衡?
    Mybatis架构原理(二)-二级缓存源码剖析
    越小越好: Q8-Chat,在英特尔至强 CPU 上体验高效的生成式 AI
    任务七 特征工程 特征选择
    Linux——进程信号
    MongoDB 语法大全
    【考研数学】数学“背诵”手册 | 需要记忆且容易遗忘的知识点
  • 原文地址:https://blog.csdn.net/breeze_blows/article/details/127580475
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号