Estrutura do projeto
Tradução automática
Esta página foi traduzida automaticamente do inglês e ainda não foi revisada por um falante nativo; correções são bem-vindas no GitHub. Se algo não bater, vale o original em inglês. O código é o mesmo do original.
Uma aplicação web Quantum é uma pasta. O quantum start, rodado dentro dela, a serve.
my-app/
├── quantum.config.yaml datasources and server settings
├── components/ one .q file per page (and reusable components)
│ ├── index.q /
│ ├── about.q /about
│ └── shop/
│ ├── index.q /shop
│ └── [id].q /shop/41 (id = 41)
├── static/ served as-is under /static/
├── migrations/ V001_create_users.sql, applied by `quantum migrate up`
└── data/ your SQLite files, CSV/JSON for q:dataSó components/ é obrigatória. As regras são ROUTE-1, DB-6 e CFG-1; a página abaixo é servida no CI (tests/docs/test_guide_project_structure.py).
Páginas e URLs
Cada arquivo .q em components/ é servido no seu caminho:
| Arquivo | URL |
|---|---|
components/index.q | / |
components/about.q | /about |
components/shop/index.q | /shop |
components/shop/[id].q | /shop/<qualquer coisa> |
Um segmento [name] aceita qualquer valor e o entrega à página como o parâmetro name. Salve como components/shop/[id].q:
<q:component name="product" xmlns:q="https://quantum.lang/ns">
<q:param name="id" type="integer" />
<q:query name="product" datasource="db">
SELECT name, price FROM products WHERE id = :id
<q:param name="id" value="{id}" type="integer" />
</q:query>
<h1>{product.name}</h1>
</q:component>Com os produtos do banco de exemplo, /shop/2 mostra Mouse. Uma URL sem arquivo correspondente responde 404.
quantum.config.yaml
server:
port: 8080
host: 127.0.0.1
datasources:
db:
driver: sqlite
database: ./data/app.dbOs valores podem vir de variáveis de ambiente: password: ${DB_PASSWORD}. Veja Instalação e Consultas ao banco.
Migrações
quantum migrate create create_users # writes migrations/V001_create_users.sql and .down.sql
quantum migrate up # applies pending migrations
quantum migrate status
quantum migrate down # rolls back the last oneAs migrações são aplicadas à fonte de dados declarada no quantum.config.yaml — o mesmo banco que as páginas consultam. Com mais de uma fonte de dados, escolha: quantum migrate --datasource db up.
Ou: escreva o esquema e deixe o Quantum escrever a migração
Mantenha um schema.sql com as tabelas como devem ser, e deixe o quantum migrate plan descobrir a migração:
quantum migrate plan # what changes; what loses data is marked !!
quantum migrate plan --write add_tags # saves migrations/V00N_add_tags.sql (+ .down.sql), after asking
quantum migrate upPlan: schema.sql vs. the migrations in migrations/
+ add table tags
~ rebuild posts (+ slug; status: CHECK)
+ add index posts_slug- Ele compara o
schema.sqlcom o esquema que as migrações produzem (construído em memória), não com o seu banco local — a mesma resposta em qualquer máquina. - Uma coluna nova que aceita nulo (ou que tem um padrão) é
ADD COLUMN; qualquer outra mudança reconstrói a tabela e copia as linhas (o SQLite não consegue alterar uma coluna). - Apagar uma tabela ou uma coluna, ou mudar o tipo de uma coluna, perde dados: o plano diz isso e o
--writeo recusa sem--allow-data-loss. Uma coluna novaNOT NULLsem padrão é sinalizada: as linhas que já existem não têm valor. - O rollback é escrito ao lado. Antes de escrever, o plano é conferido: aplicado ao esquema das migrações, ele precisa dar exatamente o do
schema.sql. - Por enquanto, só SQLite. O
projects/tarefasmantém umschema.sql.
Componentes reutilizáveis
Um componente usado dentro de páginas também é um arquivo .q: uma página o importa com q:import e o usa como uma tag. Um arquivo ou pasta cujo nome começa com _ (components/_parts/Card.q) nunca é servido como página (ROUTE-3). O exemplo em Componentes roda no CI.
Próximos passos
- Início rápido — uma página com um banco de dados e um formulário
- Ações e formulários