Django后台博客企业官网

django-blog-culinario — Django 后台模板

作者 ryanvmorais

基于 Django 的多页面美食博客教学项目,覆盖领域建模、视图、模板继承、原生认证、后台与安全实践,采用 SQLite 与纯 CSS 设计系统。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

1 个预览视图
作者提供的预览
作者提供的预览首屏预览

来自项目 README 的原始预览。

目前有 1 张原始预览,可打开完整图片查看设计细节。

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-01查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

按领域拆分为 nucleo、receitas、usuarios 三个 Django 应用,每个应用职责可用一句话说明

02

同一项目中并列展示函数式视图与类式视图两种写法,便于对比

03

使用 django.contrib.auth 原生认证,并按 IP 限制登录尝试次数

04

评论表单加入蜜罐与时间陷阱,图片上传做校验,密钥通过 django-environ 从环境读取

05

settings 拆为 base/dev/prod 包,环境差异只做覆盖,避免误用 DEBUG 配置

06

模板继承加纯 CSS 变量设计系统,不引入前端框架或构建步骤

模板详细介绍

这是一个用 Django 编写的多页面美食博客,定位为教学参考项目,目标不是做菜谱站点本身,而是演示一个完整 Django 应用的各个部件如何组合:领域建模、视图、模板继承、表单、定制 admin、图片上传与安全措施。

项目按领域拆分为三个应用:nucleo(站点基础页面)、receitas(菜谱主域,包含 Receita、Categoria、Tag、Comentario 等模型及显式 on_delete 策略)、usuarios(认证)。视图同时提供函数式(nucleo)与类式(receitas)两种写法,便于对照。模板使用 base.html 加 block 的继承方式,样式为 static/css/tokens.css 中的纯 CSS 变量,不引入前端框架或构建步骤。

安全与配置方面:使用 django.contrib.auth 原生认证,不依赖外部认证库,并按 IP 限制登录尝试次数;评论表单加入蜜罐与时间陷阱;上传图片做校验;SECRET_KEY 与 DEBUG 通过 django-environ 从环境读取。settings 拆为包,base.py 放通用配置,dev.py 与 prod.py 只覆盖环境差异。数据库选用 SQLite,目的是让克隆仓库后无需额外配置即可运行。

质量方面包含 pytest 测试套件,以及 ruff、black、mypy 组成的检查流程,并在 GitHub Actions 中随 push/PR 运行。README 还列出若干练习方向(按准备时间筛选、随机菜谱、评论分页、切换 PostgreSQL)作为进一步学习目标。

限制:项目为教育性质,README 未声明生产就绪;SQLite 与 WhiteNoise 的组合面向学习与演示场景;演示图片等第三方素材的许可需单独核对。

Django后台博客企业官网

适合你的项目吗?

适用场景

  • 学习 Django 领域建模,参考 Receita、Categoria、Tag、Comentario 之间的关系与 on_delete 策略
  • 对照函数式视图与类式视图的写法差异,理解两种组织方式
  • 研究 Django 原生认证与登录尝试限制、蜜罐、时间陷阱等表单层安全措施的实现
  • 参考 settings 分包与 django-environ 的用法,把密钥和调试开关移出代码
  • 按 README 列出的练习方向扩展功能,如按准备时间筛选、随机菜谱、评论分页或改用 PostgreSQL

适合人群

  • 正在学习 Django、希望阅读一个结构完整示例的 Python 开发者
  • 需要参考领域建模、模板继承与原生认证写法的教学者或自学者
  • 想了解在 Django 中如何实现基础表单安全措施(蜜罐、时间陷阱、尝试限制)的开发者
  • 寻找可自由修改与分发的 MIT 许可 Django 教学代码的读者

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    克隆仓库后使用 uv sync 安装依赖,uv 会自动创建并管理虚拟环境

  2. 2

    依次执行 uv run python manage.py migrate 与 uv run python manage.py runserver,然后访问 http://127.0.0.1:8000/

  3. 3

    本地运行无需配置环境变量;如需自定义可参考 .env.example

  4. 4

    需要访问 /admin/ 时,先运行 uv run python manage.py createsuperuser 创建用户

  5. 5

    提交前可运行 ruff check、black --check、mypy、pytest 组成的检查流程,CI 中运行同一套检查

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。

使用时需要遵守

  • 允许免费使用、修改、商用和分发该版本代码。
  • 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
  • 代码按现状提供;担保与责任限制以原许可证及适用法律为准。

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据

DeepSeek 根据仓库许可证和 README 整理 ·2026-10-01。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。

项目核对记录与介绍依据

模板资料

来源平台
GitHub
资料与维护参考分
资料一般 · 73 / 100
技术栈
Django
网站类型
后台 · 博客 · 企业官网
这个分数如何计算

本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。

这个项目需要核对什么

记录的仓库更新时间
2026-09-29
截图检查日期
2026-10-01

目前没有记录演示链接。请依据仓库说明在本地评估;仅凭截图无法确认交互行为。

目录记录的主要技术栈是 Django。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。

查看具体选型方法 →

介绍的制作与核对状态

介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。

已完成服务器许可规则与 AI 来源核对;未经过人工编辑审核。

查看当时使用的来源资料

SHA-256: d5d66a72bc50a7f12398bd03bb164ab8a9ce4161d57d308dd48fd86a47d05130

2026-10-01T02:37:44.461Z

来源文件 / 仓库
![Blog Culinário — página inicial do projeto](assets/home-preview.png)

# 🍲 Blog Culinário | Blog Multipáginas Educacional em Django

![Python](https://img.shields.io/badge/Python-3.14-3776AB?logo=python&logoColor=white)
![Django](https://img.shields.io/badge/Django-6.1-092E20?logo=django&logoColor=white)
![SQLite](https://img.shields.io/badge/SQLite-banco-003B57?logo=sqlite&logoColor=white)
![uv](https://img.shields.io/badge/deps-uv-DE5FE9)
[![CI](https://github.com/ryanvmorais/django-blog-culinario/actions/workflows/ci.yml/badge.svg)](https://github.com/ryanvmorais/django-blog-culinario/actions/workflows/ci.yml)
![Lint](https://img.shields.io/badge/lint-ruff-261230)
![Format](https://img.shields.io/badge/style-black-000000)
![Types](https://img.shields.io/badge/types-mypy-2A6DB2)
![Licença](https://img.shields.io/badge/licença-MIT-blue)

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. | ![Python](https://img.shields.io/badge/Python-3776AB?style=flat&logo=python&logoColor=white) |
| **Django 6.1** | Framework web "com baterias incluídas" para toda a lógica, ORM e admin. | ![Django](https://img.shields.io/badge/Django-092E20?style=flat&logo=django&logoColor=white) |
| **SQLite** | Banco de dados relacional — um arquivo, zero configuração. | ![SQLite](https://img.shields.io/badge/SQLite-003B57?style=flat&logo=sqlite&logoColor=white) |
| **uv** | Gerenciador de dependências e ambientes virtuais, com lockfile reprodutível. | ![uv](https://img.shields.io/badge/uv-DE5FE9?style=flat&logo=uv&logoColor=white) |
| **Pillow** | Processa e valida as imagens de capa das receitas. | ![Pillow](https://img.shields.io/badge/Pillow-3776AB?style=flat&logoColor=white) |
| **django-environ** | Lê `SECRET_KEY`/`DEBUG` do ambiente em vez de deixá-los no código. | ![django-environ](https://img.shields.io/badge/django--environ-092E20?style=flat&logoColor=white) |
| **WhiteNoise** | Serve os arquivos estáticos em produção sem precisar de Nginx/CDN. | ![WhiteNoise](https://img.shields.io/badge/WhiteNoise-444444?style=flat&logoColor=white) |
| **Ruff / Black / Mypy** | Lint, formatação e checagem de tipos — o portão de qualidade antes de cada commit. | ![Ruff](https://img.shields.io/badge/Ruff-261230?style=flat&logo=ruff&logoColor=D7FF64) |
| **Pytest** | Framework de testes para garantir a integridade de cada funcionalidade. | ![Pytest](https://img.shields.io/badge/Pytest-0A9EDC?style=flat&logo=pytest&logoColor=white) |

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).
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。