Teo 0.2.18 发布,修复代码生成 bug,巨好用的网络开发框架
一个后端框架,支持AI编写,不写编程代码就能启动服务器进行增删改查,还能为前端生成请求包,写一个登录功能只需5行代码。支持Node.js,支持Python,支持Rust。使用编程代码的话,它的ORM API可能是世界上最好用,最类型安全的。
使用方法
它的使用方法非常简单,一般我们在编写后端开发的时候,肯定离不开数据建模,编写各个类和表,我们就编写这个,就能得到默认的增删改查和分组聚合。
connector { provider: .sqlite, url: "sqlite::memory:" } server { bind: ("0.0.0.0", 5050) } model User { @id @autoIncrement @readonly id: Int @unique @onSet($if($presents, $isEmail)) email: String name: String? @relation(fields: .id, references: .authorId) posts: Post[] } model Post { @id @autoIncrement @readonly id: Int title: String content: String? @default(false) published: Bool @foreignKey authorId: Int @relation(fields: .authorId, references: .id) author: User }
这就是最精简的博客网站的后台,用户和文章相关联。我们可以对用户和文章进行非常丰富的创建、编辑和查询等操作。
如果要创建一个用户的同时创建其相关联的文章,使用这个请求,发送到/User/create。
{ "create": { "email": "ada@teocloud.io", "name": "Ada", "posts": { "create": [ { "title": "Introducing Teo", "content": "This post introduces Teo." }, { "title": "The next generation framework", "content": "Use the next generation technology." } ] } }, "include": { "posts": true } }
这样的返回值会包括用户,也包括文章。
{ "data": { "id": 1, "email": "ada@teocloud.io", "name": "Ada", "posts": [ { "id": 1, "title": "Introducing Teo", "content": "This post introduces Teo.", "published": false, "authorId": 1 }, { "id": 2, "title": "The next generation framework", "content": "Use the next generation technology.", "published": false, "authorId": 1 } ] } }
5行代码编写登录
一个集成的登录只需要5行代码。请看演示:
@identity.tokenIssuer($identity.jwt(expired: 3600 * 24 * 365)) @identity.jwtSecret(ENV["JWT_SECRET"]!) model User { @id @autoIncrement @readonly id: Int @unique @onSet($if($presents, $isEmail)) @identity.id email: String @writeonly @onSet($presents.bcrypt.salt) @identity.checker($get(.value).presents.bcrypt.verify($self.get(.password).presents)) password: String include handler identity.signIn include handler identity.identity } middlewares [identity.identityFromJwt(secret: ENV["JWT_SECRET"]!)]
这里的代码多于5行,是因为用户表的字段也在这段代码里。把这个请求发送到/User/signIn:
{
"credentials": {
"email": "01@gmail.com",
"password": "Aa123456"
}
}
我们得到了用户信息和他的token。
{
"data": {
"id": 1,
"email": "01@gmail.com"
},
"meta": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6eyJpZCI6MX0sIm1vZGVsIjpbIlVzZXIiXSwiZXhwIjoxNzQyMTI0NDk2fQ.x2DSIpdnUeJtsUOGQsHlGksr29aF-CWog6X5LILxsOc"
}
}
完整框架功能一个不少
文件上传,文件返回,静态目录映射,返回HTML页面,或是返回其他内容,一应俱全。Teo的插件是先进的先进后出插件,即第一个插件进入,第二个插件进入,执行路由定义,第二个插件退出,第一个插件退出。
要编写自定义路由,请看这里,这三段代码分别用Node.js,Python和Rust编写,选择你想选择的语言开发后台即可:
import { App, Response, RequestCtx } from '@teocloud/teo' import { EchoPathArguments } from './entities' const app = new App() app.mainNamespace().defineHandler("hello", () => { return Response.html(` <html> <head> <title>Hello, Teo handlers</title> </head> <body> <h1>Hello, Teo handlers!</h1> </body> </html> `) }) app.mainNamespace().defineHandler("empty", () => { return Response.empty() }) app.mainNamespace().defineHandler("echo", (ctx: RequestCtx) => { const pathArguments: EchoPathArguments = ctx.pathArguments() return Response.string(pathArguments.data, "text/plain") }) app.run()
from asyncio import run from teo import App, Response, RequestCtx from entities import EchoPathArguments async def main(): app = App() def hello_handler(_ctx): return Response.html(""" <html> <head> <title>Hello, Teo handlers</title> </head> <body> <h1>Hello, Teo handlers!</h1> </body> </html> """) app.main_namespace().define_handler("hello", hello_handler) def empty_handler(_ctx): return Response.empty() app.main_namespace().define_handler("empty", empty_handler) def echo_handler(ctx: RequestCtx): path_arguments: EchoPathArguments = ctx.path_arguments() return Response.string(path_arguments["data"], "text/plain") app.main_namespace().define_handler("echo", echo_handler) await app.run() run(main())
mod entities; use tokio::main; use teo::prelude::{App, Response, Result, path}; use crate::entities::EchoPathArguments; #[main] async fn main() -> Result<()> { let app = App::new()?; app.main_namespace_mut().define_handler("hello", || async { let response = Response::html(r#" <html> <head> <title>Hello, Teo handlers</title> </head> <body> <h1>Hello, Teo handlers!</h1> </body> </html> "#)?; Ok::<Response, Error>(response) }); app.main_namespace_mut().define_handler("empty", || async { Ok::<Response, Error>(Response::empty()) }); app.main_namespace_mut().define_handler("echo", |path_args: EchoPathArguments| async move { Ok::<Response, Error>(Response::string(path_args.data(), "text/plain")) }); app.run().await }
在这个例子中,我们定义了三个路由,返回HTML,返回空,和返回文本。
开始使用
Teo的安装过程非常简单,Node.js用npm、pnpm、yarn都可以安装,Python的用pip安装,Rust的用cargo安装,都是语言标配的包管理工具。
npm install @teocloud/teo # node.js pip install teo # python cargo install teo # rust
添加我们的微信群管微信caofz007,关注公众号,在Gitee上面给我们的辛苦劳动一点鼓励,点一颗星,即可加入我们微信群。群里你可以任意问答,我们有专人回复,我们的作者会聆听你的需求,为你改变框架的未来,开发你正需要的功能。
项目地址
官网:https://teocloud.io
Gitee: https://gitee.com/teocloud/teo
学习资料
我们的作者花了数月的时间编写文档,我们的官网有详细的文档和教程,现在的浏览器翻译工具非常厉害,只要安装一个翻译插件,网站秒变中文,阅读轻松畅快。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于前端技术实现的全面预算编制系统
前言 在现代商业环境中,预测销售数据和实际成本是每个公司CEO和领导都极为重视的关键指标。然而,由于市场的不断变化,准确地预测和管理这些数据变得愈发具有挑战性。为了应对这一挑战,建立一个高效的系统来管理和审查销售数据的重要性不言而喻。今天小编就将为大家介绍一下如何使用前端技术实现一个预算编制系统。 环境准备 Node.js VSCode代码编辑器 完整代码Github地址(可在阅读本文时配合参考使用) 使用代码实现的在线Demo地址(可在阅读本文时配合参考使用) 实现步骤 1)自定义菜单栏 上图中红色方框划出来的菜单栏叫做在线表格编辑器(Designer),Designer的菜单提供了各种定制化的能力,如新增菜单,修改菜单执行的逻辑,修改图标,修改文字以及删除菜单等功能。 观察上图中,首先新建了一个“预算操作(定制按钮)”tab ,此tab内容包括了三部分,分别是“预算类型”、“预算编制”、“数据”。对应的代码如下: let config = JSON.parse(JSON.stringify(GC.Spread.Sheets.Designer.DefaultConfig)); con...
- 下一篇
wlnmp 一键安装包更新 240318
wlnmp一键安装包240318更新内容如下: (更新)php8.2.17、php8.3.4、mariadb10.4.33、mariadb10.5.24、mariadb10.6.17、mariadb10.11.7、tssh0.1.19 关于wlnmp 从2019年初开始维护wlnmp一键安装包这个项目,起初只是为了在日常运维过程中,可以快速的部署lnmp服务。wlnmp已支持国产华为欧拉OpenEuler、国产龙蜥AnolisOS、OpenCloudOS系统等。 wlnmp一键安装包基于上游开源软件二次开发,可以在Linux系统上通过wlnmp提供的镜像源,快速部署Nginx/Mysql/PHP等常用软件,支持php、MySQL多个版本在同一系统中并存。 系统支持: ✦Alibaba CloudLinux 2.1903 ✦Alibaba CloudLinux 3 ✦AlmaLinux8.x ✦AnolisOS8.x ✦CentOS7.x ✦CentOS8.x ✦OpenCloudOS8.x ✦ OpenEuler20.03 ✦OpenEuler22.03 ✦RockyLinux8.x...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8安装Docker,最新的服务器搭配容器使用