Split by domain into three Django apps—nucleo, receitas, and usuarios—each with a one-sentence responsibility
django-blog-culinario — Django Admin dashboard Template
By ryanvmorais
A Django-based multi-page culinary blog teaching project covering domain modeling, views, template inheritance, native authentication, admin, and security practices, using SQLite and a pure CSS design system.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Preview provided in the project README.
One original preview is available. Open the full image to inspect the design.
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Shows both function-based and class-based views side by side in the same project for comparison
Uses django.contrib.auth native authentication and rate-limits login attempts by IP
The comment form includes a honeypot and a time trap, uploaded images are validated, and secrets are read from the environment via django-environ
Settings are split into base/dev/prod packages, with environment differences only overridden to avoid misusing DEBUG configuration
Template inheritance plus a pure CSS variable design system, with no frontend framework or build step
Template Details
This is a multi-page culinary blog written in Django, positioned as a teaching reference project. Its goal is not to be a recipe site itself, but to demonstrate how the parts of a complete Django application fit together: domain modeling, views, template inheritance, forms, a customized admin, image uploads, and security measures.
The project is split by domain into three apps: nucleo (site base pages), receitas (the recipe core domain, containing models such as Receita, Categoria, Tag, and Comentario with explicit on_delete policies), and usuarios (authentication). Views are provided in both function-based (nucleo) and class-based (receitas) styles for comparison. Templates use base.html with block inheritance, and styling is pure CSS variables in static/css/tokens.css, with no frontend framework or build step.
On security and configuration: it uses django.contrib.auth native authentication without relying on external auth libraries, and rate-limits login attempts by IP; the comment form includes a honeypot and a time trap; uploaded images are validated; SECRET_KEY and DEBUG are read from the environment via django-environ. Settings are split into a package, with base.py holding common configuration and dev.py and prod.py only overriding environment differences. SQLite is chosen so the repository can be cloned and run without extra configuration.
For quality, it includes a pytest test suite and a check pipeline composed of ruff, black, and mypy, run in GitHub Actions on push/PR. The README also lists several exercise directions (filtering by preparation time, random recipes, comment pagination, switching to PostgreSQL) as further learning goals.
Limitations: the project is educational, and the README does not claim production readiness; the combination of SQLite and WhiteNoise targets learning and demonstration scenarios; the licensing of third-party assets such as demo images must be checked separately.
Is it right for your project?
Use Cases
- Learning Django domain modeling by referencing the relationships and on_delete policies among Receita, Categoria, Tag, and Comentario
- Comparing function-based and class-based view styles to understand the two organizational approaches
- Studying the implementation of Django native authentication and form-layer security measures such as login attempt limits, honeypots, and time traps
- Referencing settings package splitting and django-environ usage to move secrets and debug switches out of code
- Extending functionality along the exercise directions listed in the README, such as filtering by preparation time, random recipes, comment pagination, or switching to PostgreSQL
Suitable For
- Python developers currently learning Django who want to read a structurally complete example
- Instructors or self-learners who need a reference for domain modeling, template inheritance, and native authentication patterns
- Developers who want to see how basic form security measures (honeypot, time trap, attempt limits) are implemented in Django
- Readers looking for MIT-licensed Django teaching code that can be freely modified and distributed
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After cloning the repository, install dependencies with uv sync; uv will automatically create and manage the virtual environment
- 2
Run uv run python manage.py migrate and uv run python manage.py runserver in sequence, then visit http://127.0.0.1:8000/
- 3
No environment variables are required for local running; refer to .env.example if you need customization
- 4
To access /admin/, first run uv run python manage.py createsuperuser to create a user
- 5
Before submitting, you can run the check pipeline composed of ruff check, black --check, mypy, and pytest; CI runs the same set of checks
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in the public repository; the free scope is the code of that version and does not mean external services or third-party assets are free.
Must comply with when using
- You may use, modify, commercialize, and distribute the code of this version for free.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Demo images, fonts, icons, and other third-party assets must be checked under their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur separate charges.
View Original Text Basis
https://github.com/ryanvmorais/django-blog-culinario/blob/main/LICENSEhttps://github.com/ryanvmorais/django-blog-culinario/blob/main/README.mdPermission is hereby granted, free of charge
Original License Text
Compiled by DeepSeek based on repository license and README ·2026-10-01. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- Partly documented · 73 / 100
- Technologies
- Django
- Website type
- Admin dashboard · Blog · Corporate Website
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-09-29
- Screenshot last checked
- 2026-10-01
No demo link is recorded. Use the repository instructions to evaluate the project locally; the screenshot alone cannot establish interactive behavior.
The catalog identifies Django as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Automatically checked against source and license rules; no manual editorial review.
Inspect the recorded source material
SHA-256: d5d66a72bc50a7f12398bd03bb164ab8a9ce4161d57d308dd48fd86a47d05130
2026-10-01T02:37:44.461Z
Source file / repository
# 🍲 Blog Culinário | Blog Multipáginas Educacional em Django




[](https://github.com/ryanvmorais/django-blog-culinario/actions/workflows/ci.yml)




Este repositório contém um **blog culinário multipáginas** desenvolvido com o framework Django. Não é (só) um site de receitas — é uma referência para quem está aprendendo a construir uma aplicação web completa em Python, com **modelagem de domínio**, **autenticação nativa** e **segurança aplicada**, indo além do CRUD básico de tutorial.
### 🎯 Objetivo do Projeto:
Demonstrar como as peças de uma aplicação Django real se encaixam — modelagem, views, templates com herança, formulários, admin customizado, upload de imagem e segurança — em código que você pode ler de cima a baixo e entender o porquê de cada decisão, não só o "como".
---
### 📚 O que você vai encontrar neste projeto?
Este projeto foi estruturado para consolidar pilares fundamentais de engenharia de software:
* **Modelagem de Domínio:** relacionamentos reais entre `Receita`, `Categoria`, `Tag` e `Comentario`, com políticas explícitas de `on_delete` para cada um.
* **Dois Estilos de View:** baseadas em função (`nucleo`) e em classe (`receitas`), lado a lado, para comparar as duas abordagens.
* **Design System Próprio:** herança de templates (`base.html` + blocks) e CSS puro em `static/css/tokens.css`, sem framework de frontend nem build step.
* **Autenticação Nativa:** `django.contrib.auth` sem lib externa, com limite de tentativas de login por IP.
* **Segurança Aplicada:** honeypot e time-trap no formulário de comentário, validação de upload de imagem, segredos fora do código.
* **Qualidade Automatizada:** suíte de testes com `pytest` e um pipeline de CI que roda o mesmo portão de qualidade usado localmente.
---
### 🧠 Guia de Implementação (A Lógica por trás do Código):
Para quem está começando, o maior desafio não é decorar comandos do Django, mas entender a **montagem do raciocínio** de uma aplicação real. Confira os pilares da construção deste projeto:
1. **Apps por Domínio, não por Camada:** `nucleo` (institucional), `receitas` (o domínio principal) e `usuarios` (autenticação) — cada app cabe numa frase, o que facilita entender onde mexer.
2. **Configuração por Ambiente:** `settings/` é um pacote, não um arquivo só. `base.py` tem o que nunca muda; `dev.py` e `prod.py` só sobrescrevem o que é específico do ambiente — o padrão que evita o clássico "esqueci de trocar DEBUG antes do deploy".
3. **Banco de Dados de Propósito:** SQLite não por preguiça, mas por decisão — zero configuração para quem clona o repo, já que o objetivo é aprender Django, não administrar um banco.
4. **Identidade Visual do Zero:** um design system pequeno em `static/css/tokens.css` (cores, tipografia, espaçamento como variáveis CSS) mantém o projeto 100% focado em Python, sem esconder como um front-end é montado.
5. **Segurança em Camadas:** limite de tentativas por IP (login e comentário) e honeypot + time-trap no formulário de comentário — implementados a partir de achados de uma auditoria de segurança real, não especulação.
6. **Desenvolvimento Guiado por Spec:** cada funcionalidade nova nasce em `specs/` antes do código — requisitos, design e tarefas, com aprovação antes de avançar de fase.
---
### 🛠️ Tecnologias e Ferramentas:
Para garantir a melhor experiência de aprendizado e a execução correta de todos os recursos, o projeto utiliza as seguintes tecnologias:
| Ferramenta | Descrição | Badge |
| :--- | :--- | :--- |
| **Python 3.14** | Linguagem base do projeto. |  |
| **Django 6.1** | Framework web "com baterias incluídas" para toda a lógica, ORM e admin. |  |
| **SQLite** | Banco de dados relacional — um arquivo, zero configuração. |  |
| **uv** | Gerenciador de dependências e ambientes virtuais, com lockfile reprodutível. |  |
| **Pillow** | Processa e valida as imagens de capa das receitas. |  |
| **django-environ** | Lê `SECRET_KEY`/`DEBUG` do ambiente em vez de deixá-los no código. |  |
| **WhiteNoise** | Serve os arquivos estáticos em produção sem precisar de Nginx/CDN. |  |
| **Ruff / Black / Mypy** | Lint, formatação e checagem de tipos — o portão de qualidade antes de cada commit. |  |
| **Pytest** | Framework de testes para garantir a integridade de cada funcionalidade. |  |
Para o porquê de cada escolha (e as alternativas descartadas), veja [docs/stack.md](docs/stack.md).
---
### ⚙️ Como rodar o projeto localmente:
1. **Clone o repositório:**
```bash
git clone https://github.com/ryanvmorais/django-blog-culinario.git
cd django-blog-culinario
```
2. **Instale as dependências** (o projeto usa [uv](https://docs.astral.sh/uv/), que cria e gerencia o ambiente virtual automaticamente):
```bash
uv sync
```
3. **Execute as migrações e o servidor:**
```bash
uv run python manage.py migrate
uv run python manage.py runserver
```
Acesse `http://127.0.0.1:8000/`. Não é preciso configurar nenhuma variável de ambiente para rodar localmente — veja `.env.example` se quiser customizar algo.
> ⚠️ **Nota sobre o Admin:** quer um usuário para acessar `/admin/`? Rode
> `uv run python manage.py createsuperuser` e siga as instruções no terminal.
---
### Qualidade e testes
O projeto roda uma suíte de testes automatizados (`pytest`) e um portão de
qualidade antes de qualquer commit:
```bash
uv run ruff check . # lint + ordem de imports
uv run black --check . # formatação
uv run mypy . # checagem de tipos
uv run pytest # testes
```
O mesmo portão roda automaticamente em CI (`.github/workflows/ci.yml`) a cada
push/PR. Para o mapa de cada tecnologia da stack (o que é, por que foi
escolhida, o que estudar), veja [docs/stack.md](docs/stack.md); para as
especificações de cada funcionalidade, veja [specs/](specs/); para o
detalhamento de arquitetura e convenções, veja [CLAUDE.md](CLAUDE.md).
---
### 📋 Atividades para praticar (Desafios de Evolução):
Para exercitar o que você aprendeu e dominar o Django, tente implementar estas novas funcionalidades:
1. **🔍 Filtro por Tempo de Preparo:** adicione um campo `tempo_de_preparo` filtrável na listagem de receitas.
* **O Aprendizado:** `QuerySet.filter()` combinado com um formulário de busca.
2. **🎲 Receita Aleatória:** crie uma rota que leve a uma receita publicada escolhida ao acaso.
* **O Aprendizado:** `order_by("?")` do Django e os limites de performance dessa abordagem num banco maior.
3. **💬 Paginação de Comentários:** pagine os comentários de uma receita com muitos comentários.
* **O Aprendizado:** o `Paginator` aplicado a um queryset relacionado (não à página inteira), e como ajustar o template para paginar só uma seção.
4. **🐘 Troca de Banco de Dados:** troque o SQLite por PostgreSQL num ambiente separado.
* **O Aprendizado:** como `DATABASES` isola o projeto do banco físico — o resto do código não muda uma linha.
---
### 💡 Ficou com alguma dúvida ou tem sugestões?
Encontrou algo que poderia estar mais didático, teve dificuldade com alguma configuração, ou pensou numa melhoria que tornaria este projeto ainda mais útil como referência? Estou aqui para ajudar!
* **Abra uma [Issue](https://github.com/ryanvmorais/django-blog-culinario/issues):** essa é a melhor forma de construirmos um material de referência sólido para a comunidade e ajudarmos outros desenvolvedores que possam ter a mesma dúvida.
Veja [CONTRIBUTING.md](CONTRIBUTING.md) para o passo a passo de como contribuir.
---
### ⚖️ Licença
Este projeto está sob a **Licença MIT**. Isso significa que você pode usar, copiar e modificar o código à vontade, inclusive para os seus próprios projetos. Para mais detalhes, consulte o arquivo [LICENSE](LICENSE).
Explore similar templates
Compare previews and descriptions within the same stack and category.

typescript-backend-toolkit
An Express.js and TypeScript backend toolkit with auto-generated OpenAPI documentation, a Django-style admin panel, an Artisan-style tbk CLI, and a plugin architecture. It integrates Zod validation, JWT and Google login, BullMQ queues with BullBoard, Socket.IO, and multi-provider storage/cache/email.
Django · Admin dashboard

Django_Management_System_template
A Django and MySQL-based non-separated frontend-backend information management system template. It includes CRUD pages and forms for users, departments, numbers, and tasks, cookie-based login authentication with middleware redirection, pagination navigation, MD5 encryption, and Bootstrap form utilities.
Django · Admin dashboard

sneat-bootstrap-html-django-admin-template-free
Sneat Free is a Django and Bootstrap 5 admin template under the MIT license, offering an Analytics dashboard, multiple layouts, authentication pages, forms, tables, and extended UI.
Django · Admin dashboard

materio-bootstrap-html-django-admin-template-free
Materio Free is a Django admin template with a Bootstrap frontend, released under the MIT license.
Django · Admin dashboard

django-on-aws
A Django blog/portfolio sample that demonstrates deploying to AWS with nested CloudFormation templates, CodeDeploy rolling releases, CircleCI pipelines, and CloudWatch dashboards. It includes a dev path with Terraform and Ansible, Postgres and Redis configuration, and locust load testing.
Django · Portfolio

django-otto-admin
An MIT-licensed Django admin customization app that embeds a Google Analytics data panel into the django-suit admin index page. It shows real-time active users, last-15-day traffic, top pages, browsers, referrals, visitor countries, and social interactions via the Google Analytics Embed API.
Django · Admin dashboard
