前言¶
在Web開發中,用Python快速搭建一個博客系統是很多初學者的目標。Django作爲“電池內置”的Python Web框架,提供了ORM(對象關係映射)和模板引擎等核心組件,能幫我們大幅簡化開發流程。本文將用最簡單的步驟,帶你從零開始用Django實現一個能顯示文章列表的博客系統,重點理解Django的核心思想——ORM操作數據,模板渲染頁面。
第一步:環境準備與項目初始化¶
要開始開發,首先需要安裝Django並創建項目結構。
1. 安裝Django¶
打開終端(命令提示符),運行以下命令安裝最新版Django:
pip install django
驗證安裝是否成功:
django-admin --version # 輸出版本號,如3.2.20
2. 創建Django項目和應用¶
Django項目是一個完整的Web應用容器,應用(App)是項目的功能模塊。
- 創建項目:
django-admin startproject myblog # 項目名爲myblog
cd myblog # 進入項目目錄
- 創建應用:
python manage.py startapp blog # 創建名爲blog的應用
此時項目結構如下(關鍵文件):
myblog/
├── myblog/ # 項目配置目錄
│ ├── __init__.py
│ ├── settings.py # 項目全局設置(如數據庫、應用列表)
│ ├── urls.py # 項目路由配置
│ └── wsgi.py
├── blog/ # 博客應用目錄
│ ├── __init__.py
│ ├── models.py # 數據模型定義(ORM核心)
│ ├── views.py # 視圖函數(處理請求)
│ └── urls.py # 應用路由配置
└── manage.py # Django命令行工具(創建遷移、啓動服務等)
第二步:用ORM定義博客數據模型¶
ORM是Django的核心特性之一,它允許我們用Python類直接定義數據庫表結構,無需手寫SQL語句。這裏我們需要爲博客定義“文章”模型。
1. 定義數據模型¶
在blog/models.py中,編寫一個Post類表示文章表:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200) # 文章標題(字符串,限制長度200)
content = models.TextField() # 文章內容(長文本)
pub_date = models.DateTimeField(auto_now_add=True) # 發佈時間(自動添加當前時間)
def __str__(self):
return self.title # 後臺顯示文章標題
- 解釋:
models.Model:Django模型的基類,自動關聯數據庫表。CharField/TextField:對應數據庫的字符串/長文本字段。DateTimeField(auto_now_add=True):自動記錄創建時間,無需手動設置。
2. 激活模型並創建數據庫表¶
Django默認使用SQLite數據庫(無需額外配置),只需將應用加入項目配置:
- 打開myblog/settings.py,在INSTALLED_APPS列表中添加'blog':
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # 添加我們的博客應用
]
- 創建數據庫表(遷移數據):
python manage.py makemigrations # 生成遷移文件(將模型轉爲SQL)
python manage.py migrate # 執行遷移,創建表結構
此時,數據庫中會生成一個blog_post表,存儲文章數據。
第三步:編寫視圖和模板,展示博客內容¶
視圖(View)處理用戶請求並返回數據,模板(Template)負責將數據渲染爲HTML頁面。
1. 編寫視圖函數¶
在blog/views.py中,定義一個視圖函數,從數據庫中獲取所有文章並傳遞給模板:
from django.shortcuts import render
from .models import Post # 導入剛纔定義的Post模型
def index(request):
# 獲取所有文章,按發佈時間降序排列
posts = Post.objects.all().order_by('-pub_date')
# 渲染模板,傳遞posts數據
return render(request, 'blog/index.html', {'posts': posts})
2. 配置路由¶
Django通過路由(URL)將請求分發到視圖。
- 先在blog/urls.py中定義應用內路由:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'), # 根路徑對應index視圖
]
- 再在項目路由
myblog/urls.py中包含應用路由:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')), # 根路徑路由到blog應用
]
3. 創建模板文件¶
模板負責將數據渲染爲HTML頁面。在blog應用下創建templates/blog目錄,再新建index.html:
<!DOCTYPE html>
<html>
<head>
<title>我的博客</title>
<style>
body { font-family: Arial; max-width: 800px; margin: 0 auto; padding: 20px; }
.post { border: 1px solid #ddd; padding: 10px; margin: 10px 0; border-radius: 5px; }
h2 { color: #333; }
</style>
</head>
<body>
<h1>我的第一篇博客</h1>
{% if posts %} <!-- 模板語法:判斷posts是否存在 -->
{% for post in posts %} <!-- 循環渲染每篇文章 -->
<div class="post">
<h2>{{ post.title }}</h2> <!-- 顯示標題 -->
<p>發佈時間:{{ post.pub_date|date:"Y-m-d H:i" }}</p> <!-- 格式化日期 -->
<p>{{ post.content }}</p> <!-- 顯示內容 -->
</div>
{% endfor %}
{% else %}
<p>暫無文章,快去發佈第一篇吧!</p>
{% endif %}
</body>
</html>
- 模板語法:
{{ post.title }}:輸出變量(文章標題)。{% for post in posts %}:循環遍歷文章列表。{{ post.pub_date|date:"Y-m-d H:i" }}:用過濾器格式化日期。
運行博客系統,查看效果¶
在終端執行:
python manage.py runserver
打開瀏覽器訪問http://127.0.0.1:8000/,就能看到你的博客頁面了!如果需要添加文章,可通過Django後臺管理(後續可自行探索)。
總結¶
通過這3步,我們用Django實現了一個簡單的博客系統,核心理解了:
1. ORM:用Python類定義數據庫表,無需寫SQL。
2. 模板引擎:通過HTML+模板語法動態渲染數據。
3. MVT架構:模型(Model)存數據,視圖(View)處理邏輯,模板(Template)展示頁面。
接下來可以嘗試擴展功能,比如添加單篇文章詳情頁、用戶登錄、評論功能等,逐步提升Django技能!