DokumentasiIkhtisar
Berasal dari kerangka lain
Nexy adalah FastAPI plus perutean berbasis file, halaman yang dirender oleh server, dan pulau opsional React, Vue, Svelte, Solid atau Preact. Halaman ini memetakan apa yang sudah Anda ketahui.
Setiap kerangka kerja di bawah ini juga memiliki halamannya sendiri, tugas demi tugas, dengan kode yang Anda ketahui dan kemudian kode Nexy:
| Python | Bagian belakang | tumpukan penuh JavaScript |
|---|---|---|
| FastAPI | Ekspresikan, Percepat | Next.js, Remix |
| Flask | Elysia, Hono | Selanjutnya |
| Django | NestJS, Sepatu Bot Musim Semi | SvelteKit |
| Laravel, Ruby di Rel | Astro |
Dari FastAPI
| FastAPI | Nexy |
|---|---|
@app.get("/users") dalam modul yang Anda impor |
GET berfungsi di src/routes/users.py |
app.include_router(router) |
jalur file adalah URL; tidak ada yang perlu didaftarkan |
Parameter jalur /users/{id} |
src/routes/users/[id].py |
Depends(...) |
still Depends(...): penangan adalah FastAPI penangan |
Jinja2 TemplateResponse |
halaman .nexy di sebelah titik akhir |
Jalankan dengan uvicorn main:app |
nx dev, lalu nx build && nx start |
Segala sesuatu di bawah src/routes/*.py adalah FastAPI biasa: dependensi, model Pydantic, middleware, dan /docs tetap berfungsi.
Titik akhir yang sama, sebelum dan sesudah:
from fastapi import FastAPI app = FastAPI() @app.get("/users/{id}")async def get_user(id: int): return {"id": id}async def GET(id: int): return {"id": id}| FastAPI | Nexy |
|---|---|
@app.get("/users") dalam modul yang Anda impor |
async def get(self) di kelas @Controller("/users") |
app.include_router(router) |
pengontrol yang terdaftar di controllers dari @Module |
Parameter jalur /users/{id} |
@Controller("/users/{id}"), dengan async def get(self, id: int) |
Depends(...) |
still Depends(...): metode pengontrol adalah titik akhir FastAPI |
Jinja2 TemplateResponse |
useViews("src/apps/....nexy"), dikembalikan dengan metode |
Jalankan dengan uvicorn main:app |
nx dev, lalu nx build && nx start |
Dependensi, model Pydantic, middleware, dan /docs tetap berfungsi.
Titik akhir yang sama, sebelum dan sesudah:
from fastapi import FastAPI app = FastAPI() @app.get("/users/{id}")async def get_user(id: int): return {"id": id}from nexy.decorators import Controller @Controller("/users/{id}")class UserController: async def get(self, id: int): return {"id": id}Dari Next.js
| Next.js | Nexy |
|---|---|
app/page.tsx |
src/routes/index.tsx atau index.nexy |
app/blog/[slug]/page.tsx |
src/routes/blog/[slug].tsx |
app/layout.tsx (memiliki <html>) |
src/routes/layout.tsx dengan useCSR = True (React), atau src/routes/layout.nexy dalam mode server |
bersarang layout.tsx |
bersarang layout.tsx / layout.vue / layout.svelte dalam mode klien, bersarang layout.nexy dalam mode server |
use client komponen di halaman server |
pulau dalam mode server |
Pengendali rute route.ts |
src/routes/api/x.py, ditulis dalam Python |
(group) folder |
sama: (group)/ |
| Tindakan Server | @Action fungsi dipanggil dari formulir atau seperti fungsi klien yang diketik |
next dev / next build / next start |
nx dev / nx build / nx start |
Backendnya adalah Python, jadi API Anda berbagi kode dengan data dan pekerjaan ML Anda. Komponen klien terhidrasi sebagai pulau, bukan pohon React satu halaman penuh.
Halaman Next.js berpindah hampir seperti apa adanya, dan komponen "use client" menjadi sebuah pulau di halaman server:
import { useParams } from "@nexy/client"; export default function Post() { const { slug } = useParams<{ slug: string }>(); return <h1>{slug}</h1>;}from "@/components/Comments.tsx" import Comments slug: prop[str]<h1>{{ slug }}</h1><Comments post="{{ slug }}" directive="client:visible" />| Next.js | Nexy |
|---|---|
app/page.tsx |
pengontrol yang mengembalikan useViews("src/apps/home_view.nexy") |
app/blog/[slug]/page.tsx |
@Controller("/blog/{slug}"), dengan async def get(self, slug: str) |
app/layout.tsx (memiliki <html>) |
tampilan tata letak yang dibungkus pengontrol di sekeliling tampilannya, melalui children |
use client komponen di halaman server |
pulau dalam tampilan |
Pengendali rute route.ts |
pengontrol yang mengembalikan dict, ditulis dalam Python |
| Tindakan Server | @Action fungsi dipanggil dari formulir atau seperti fungsi klien yang diketik |
next dev / next build / next start |
nx dev / nx build / nx start |
Backendnya adalah Python, sehingga API Anda berbagi kode dengan data dan pekerjaan ML Anda. Komponen klien terhidrasi sebagai pulau, bukan pohon React satu halaman penuh.
Halaman Next.js menjadi pengontrol dan tampilannya, dan komponen "use client" menjadi pulau tampilan:
from nexy.decorators import Controllerfrom nexy.hooks import useViews @Controller("/blog/{slug}")class PostController: async def get(self, slug: str): return useViews("src/apps/blog/post_view.nexy", context={"slug": slug})from "@/components/Comments.tsx" import Comments slug: prop[str]<h1>{{ slug }}</h1><Comments post="{{ slug }}" directive="client:visible" />Dari backend Express atau Node
| Ekspres | Nexy |
|---|---|
app.get("/users/:id", handler) |
src/routes/users/[id].py dengan async def GET(id) |
app.use(middleware) |
FastAPI middleware, didaftarkan dari nexyconfig.py |
res.json(obj) |
mengembalikan dict atau model Pydantic |
| Tampilan EJS / Pug | .nexy (Jinja2) halaman |
npm run dev |
nx dev |
app.use(...) menjadi bidang nexyconfig.py, dan res.json(...) menjadi nilai kembalian:
from nexy.core.models import NexyConfigModel class NexyConfig(NexyConfigModel): useCORS = {"allow_origins": ["https://example.com"]} useGZip = {"minimum_size": 1000}async def GET(id: int): return {"id": id, "name": "Ada"} # res.json({ id, name })| Ekspres | Nexy |
|---|---|
app.get("/users/:id", handler) |
@Controller("/users/{id}"), dengan async def get(self, id: int) |
app.use(middleware) |
FastAPI middleware, didaftarkan dari nexyconfig.py |
res.json(obj) |
mengembalikan dict atau model Pydantic |
| Tampilan EJS / Pug | .nexy (Jinja2) penayangan, dikembalikan oleh useViews |
npm run dev |
nx dev |
app.use(...) menjadi bidang nexyconfig.py, dan res.json(...) menjadi nilai kembalian:
from nexy.core.models import NexyConfigModel class NexyConfig(NexyConfigModel): useCORS = {"allow_origins": ["https://example.com"]} useGZip = {"minimum_size": 1000}from nexy.decorators import Controller @Controller("/users/{id}")class UserController: async def get(self, id: int): return {"id": id, "name": "Ada"} # res.json({ id, name })Memilih router
| Gunakan | Kapan |
|---|---|
| Router berbasis file | halaman dan titik akhir dipetakan dari file; bawaannya |
| Perute modular | pengontrol, modul, dan injeksi ketergantungan, bergaya NestJS |
Router modular dalam dua file: pengontrol, dan modul nexyconfig.py menunjuk dengan useRouter = AppModule:
from nexy.decorators import Controller @Controller()class AppController: async def get(self): return {"message": "Hello"}from nexy.decorators import Modulefrom .app_controller import AppController @Module()class AppModule: controllers = [AppController]Keduanya di-scaffold oleh nx new dan dicakup oleh pengujian end-to-end yang sama. Lihat Perutean dan Perutean modular.
Dimana selanjutnya
- Mulai cepat: membuat proyek dan menjalankannya
- Struktur proyek: tempat setiap file berada
- Perutean: pilih router