《写给前端的python应用指南》系列:
- (一)快速构建 Web 服务器 - Flask vs Node.js 对比
- (二)深入Flask:理解Flask的应用结构与模块化设计
- (三)Django vs Flask:哪种框架适合构建你的下一个Web应用?
在前几篇博文中,我们讨论了Flask和Django这两大Python Web框架,并通过对比分析了它们的优缺点和适用场景。在本篇博文中,我将通过实际操作,使用Django框架创建一个简单的博客系统。这个系统将包含基本的功能,如文章展示、文章发布、编辑和删除。通过这篇博文,你将更深入地理解Django框架的核心功能,并能够上手开发自己的Web应用。
一、项目简介
目标是创建一个简单的博客系统,具备以下功能:
- 文章展示:展示所有博客文章。
- 文章创建:允许用户创建新的文章。
- 文章编辑:用户可以编辑已有的文章。
- 文章删除:用户可以删除文章。
在此过程中,将使用Django的MVC(Model-View-Controller)架构来组织代码,利用Django的内置功能快速搭建系统。
二、创建项目和应用
2.1 安装Django
首先,你需要确保已安装了Django。如果尚未安装,可以通过以下命令安装:
pip install django
2.2 创建Django项目
在终端中执行以下命令,创建一个新的Django项目:
django-admin startproject blog_project
cd blog_project
这将会创建一个名为blog_project
的文件夹,并在其中生成Django项目的基本结构。
2.3 创建Django应用
在Django中,应用(App)是一个可以独立工作的模块,可以包含模型、视图、URL配置等。接下来我们创建一个名为blog
的应用来处理博客的相关逻辑:
python manage.py startapp blog
执行后,Django将在项目目录下生成一个blog
目录,其中包含了应用的基本文件结构。
2.4 注册应用
在项目的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', # 添加这行
]
三、定义数据模型
在Django中,模型(Model)是数据库的映射,它定义了数据库表的结构以及与数据交互的方式。接下来,我们将定义一个简单的Post
模型,用来表示博客文章。
3.1 编辑模型
在blog/models.py
文件中,添加以下代码来定义Post
模型:
from django.db import modelsclass Post(models.Model):title = models.CharField(max_length=200) # 文章标题content = models.TextField() # 文章内容created_at = models.DateTimeField(auto_now_add=True) # 文章创建时间updated_at = models.DateTimeField(auto_now=True) # 文章更新时间def __str__(self):return self.title
title
: 存储文章标题,使用CharField
,并设置最大长度。content
: 存储文章内容,使用TextField
,适合存储较长的文本。created_at
: 存储文章的创建时间,使用DateTimeField
并设置auto_now_add=True
,这样在创建文章时会自动记录时间。updated_at
: 存储文章的更新时间,使用DateTimeField
并设置auto_now=True
,每次更新文章时会自动更新该字段。
3.2 迁移数据库
模型定义完成后,Django需要将这些模型映射到数据库表中。首先,运行以下命令来生成迁移文件:
python manage.py makemigrations
然后,执行迁移操作将模型应用到数据库中:
python manage.py migrate
四、创建视图和URL路由
Django的视图(View)用于处理用户请求并返回响应。接下来,将创建视图函数来处理展示、创建、编辑和删除博客文章的功能。
4.1 创建视图
在blog/views.py
中,添加如下视图函数:
from django.shortcuts import render, redirect, get_object_or_404
from .models import Post
from .forms import PostForm# 文章列表视图
def post_list(request):posts = Post.objects.all() # 获取所有文章return render(request, 'blog/post_list.html', {'posts': posts})# 文章详细视图
def post_detail(request, pk):post = get_object_or_404(Post, pk=pk) # 获取指定id的文章return render(request, 'blog/post_detail.html', {'post': post})# 创建文章视图
def post_create(request):if request.method == 'POST':form = PostForm(request.POST)if form.is_valid():form.save()return redirect('post_list') # 创建成功后跳转到文章列表else:form = PostForm()return render(request, 'blog/post_form.html', {'form': form})# 编辑文章视图
def post_edit(request, pk):post = get_object_or_404(Post, pk=pk)if request.method == 'POST':form = PostForm(request.POST, instance=post)if form.is_valid():form.save()return redirect('post_detail', pk=post.pk) # 编辑成功后跳转到文章详情else:form = PostForm(instance=post)return render(request, 'blog/post_form.html', {'form': form})# 删除文章视图
def post_delete(request, pk):post = get_object_or_404(Post, pk=pk)post.delete()return redirect('post_list') # 删除成功后跳转到文章列表
4.2 配置URL路由
在blog/urls.py
文件中,添加以下代码来配置路由:
from django.urls import path
from . import viewsurlpatterns = [path('', views.post_list, name='post_list'), # 文章列表页面path('post/<int:pk>/', views.post_detail, name='post_detail'), # 文章详情页面path('post/new/', views.post_create, name='post_create'), # 创建文章页面path('post/<int:pk>/edit/', views.post_edit, name='post_edit'), # 编辑文章页面path('post/<int:pk>/delete/', views.post_delete, name='post_delete'), # 删除文章
]
4.3 在项目的URL配置中包含blog
应用的URL
在blog_project/urls.py
文件中,导入并包含blog
应用的URL配置:
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('blog.urls')), # 包含blog应用的URL配置
]
五、创建表单
在Django中,我们使用表单(Form)来处理用户输入的数据。接下来,我们创建一个表单来实现文章的创建和编辑。
5.1 创建表单
在blog/forms.py
文件中,创建一个PostForm
类:
from django import forms
from .models import Postclass PostForm(forms.ModelForm):class Meta:model = Postfields = ['title', 'content'] # 只显示标题和内容字段
这个表单类基于Post
模型,Django会自动为我们生成表单字段,并进行数据验证。
六、创建模板
Django使用模板引擎来渲染HTML页面。我们需要为博客系统创建几个模板来展示文章列表、文章详情、文章表单等。
6.1 文章列表页面(post_list.html
)
在blog/templates/blog/
目录下创建post_list.html
文件,内容如下:
<!DOCTYPE html>
<html>
<head><title>博客列表</title>
</head>
<body><h1>博文列表</h1><a href="{% url 'post_create' %}">创建博文</a><ul>{% for post in posts %}<li><a href="{% url 'post_detail' post.pk %}">{{ post.title }}</a><a href="{% url 'post_edit' post.pk %}">Edit</a><a href="{% url 'post_delete' post.pk %}">Delete</a></li>{% endfor %}</ul>
</body>
</html>
6.2 文章详情页面(post_detail.html
)
在blog/templates/blog/
目录下创建post_detail.html
文件,内容如下:
<!DOCTYPE html>
<html>
<head><title>{{ post.title }}</title>
</head>
<body><h1>{{ post.title }}</h1><p>{{ post.content }}</p><a href="{% url 'post_edit' post.pk %}">编辑</a><a href="{% url 'post_delete' post.pk %}">删除</a><a href="{% url 'post_list' %}">返回列表</a>
</body>
</html>
6.3 文章表单页面(post_form.html
)
在blog/templates/blog/
目录下创建post_form.html
文件,内容如下:
<!DOCTYPE html>
<html>
<head><title>编辑博文</title>
</head>
<body><h1>编辑博文</h1><form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">保存</button></form>
</body>
</html>
七、运行项目
至此,博客系统的基本功能已经完成。现在,我们可以启动Django开发服务器,查看应用效果。
python manage.py runserver
在浏览器中访问 http://127.0.0.1:8000/,你应该能够看到博客文章的列表,并且可以创建、编辑、删除文章。
八、总结
通过本篇博文,使用Django创建了一个简单的博客系统,学习了如何:
- 创建Django项目和应用
- 定义数据模型并进行数据库迁移
- 创建视图和URL路由
- 使用Django表单处理用户输入
- 编写模板渲染数据
通过这些基本的操作,你可以在Django框架的基础上扩展更多的功能,如用户认证、评论系统、标签分类等。希望这篇教程能帮助你快速上手Django框架,创建自己的Web应用!