Package: cloudoll
cloudoll 云端玩具更新日志2.0.142023-07-04加入cli,devtoll优化orm2.0.132023-07-04修复已知 问题2.0.122023-07-04修复已知 问题2.0.112023-07-04修复已知 问题2.0.102023-07-04修复已知 问题2.0.92023-07-04修复已知 问题2.0.82023-07-04修复已知 问题2.0.72023-07-04修复logging 问题2.0.52023-07-04修复redis在 3.11+环境下的问题2.0.42023-07-04切换热更为adev2.0.22023-07-03优化一系列问题可以热加载2.0.02023-06-09优化一系列问题orm 执行更优雅0.1.62022-11-03orm 允许更新为空数据server 文件上传加入大小限制smtp 出错异常处理0.1.52022-09-19修复logging level 错误的问题修正默认依赖0.1.42022-09-12优化orm 超时的问题增加websocket 支持DocumentationDocsDocsStructureConfigMiddlewareRouterViewCookie and SessionUpload fileWebSocketMysqlDeployment环境准备操作系统：支持 macOS，Linux，Windows运行环境：最低要求 3.6.0。快速开始$mkdircloudoll-demo&&cdcloudoll-demo
$pip3installcloudoll
$viapp.pyapp.py内容如下:## /app.pyfromcloudoll.webimportappif__name__=="__main__":app.create().run()编写 Controller$mkdir-pcontrollers/home
$touchcontrollers/home/__init__.py
$vicontrollers/home/index.pycontrollers/home/index.py内容如下:# /controllers/home/index.pyfromcloudoll.webimportget@get('/')asyncdefhome():return{"name":"chuchur","msg":"ok"}运行:$python3app.py
$openhttp://localhost:9001在浏览器打开http://127.0.0.1:9001/就能看到:{"name":"chuchur","msg":"ok","timestamp":1681993906410}恭喜, 你已经成功的写好了一个Restful API接口.模板渲染绝大多数情况，我们都需要读取数据后渲染模板，然后呈现给用户。故我们需要引入对应的模板引擎。在本例中，我们使用Nunjucks来渲染$mkdirtemplates
$vitemplates/index.htmlindex.html内容如下:<!-- /templates/index.html --><!DOCTYPE html><htmllang="zh"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Home</title></head><body><p>My name is {{name} }</p></body></html>修改/controllers/home/index.py内容如下:# /controllers/home/index.pyfromcloudoll.webimportget,render_view@get('/')asyncdefhome():data={"name":"chuchur","msg":"ok"}returnrender_view("index.html",data)这时 页面正常渲染 ,可以看到“My name is chuchur”恭喜, 你已经成功的写好了一个视图页面.静态资源我们想在模版里面嵌入静态资源,如图片,js ,css , 这个时候就得用到静态资源. 我们把这些js,css,image都放到static目录线上环境建议部署到 CDN，或者使用nginx等相关服务器$mkdir-pstatic/img
$mkdir-pstatic/js
$mkdir-pstatic/css在img目录 放入在张图 名logo.png在js目录新建index.js,内容如下:点击页面 弹出 "hello world"// /static/js/index.jsdocument.addEventListener('DOMContentLoaded',function(){document.body.addEventListener('click',function(){alert('hello world.')})})在css目录新建index.css,内容如下:/* /static/css/index.css */html,body{width:100%;height:100%;color:red;}修改视图/templates/index.html,在head引入 静态资源, 内容如下:<!-- /templates/index.html --><!DOCTYPE html><htmllang="zh"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><linkrel="icon"type="image/png"href="/static/img/logo.png"/><linkrel="stylesheet"href="/static/css/index.css"><scriptsrc="/static/js/index.js"></script><title>Home</title></head><body><p>My name is {{name} }</p></body></html>我们新建一个配置文件, 在配置文件里面配置静态 资源.$mkdirconfig
$viconfig/conf.local.yaml/config/conf.local.yaml内容如下:server:static:prefix:/static刷新页面之后, 我们所改动即可呈现.编写 Middleware假设有个需求：我们的新闻站点，禁止百度爬虫访问。所以可以通过Middleware判断 User-Agent，如下：$mkdirmiddlewares
$vimiddlewares/robot.py修改middlewares/robot.py, 内容如下:# /middlewares/robot.pyfromcloudoll.webimportmiddleware,render_jsonimportre@middleware()defmid_robot():asyncdefrobot(request,handler):ua=request.headers.get('user-agent')ifre.match('Baiduspider',ua):returnrender_json(status=403,text="Go away , robot.")returnawaithandler(request)returnrobot重新启动之后, 现在可以使用curl http://localhost:7001/news -A "Baiduspider"看看效果。更多参见中间件文档。配置文件写业务的时候，不可避免的需要有配置文件，使用代码管理配置，在代码中添加多个环境的配置，在启动时传入当前环境的参数即可.cloudoll 支持根据环境来加载配置，定义多个环境的配置文件config|- conf.local.yaml|- conf.prod.yaml`- conf.test.yaml我们创建配置文件：$mkdir-pconfig/conf.local.yaml
$viconfig/conf.local.yaml如下是 mysql 和 server 的配置：server:host:192.168.0.1port:9001static:falseclient_max_size:1024000static:prefix:/staticshow_index:trueappend_version:truefollow_symlinks:truemysql:host:127.0.0.1port:3306user:rootpassword:abcddb:blogcharset:utf8mb4默认开发会使用默认的local作为配置。 启动时 通过env加载对应的配置。 如python3 app.py --env=prod会加载conf.prod.yaml开发模式adevrunserverapp.py