前端Python应用指南(四)Django实战:创建一个简单的博客系统

《写给前端的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应用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/496364.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress源码解析-数据库表结构

WordPress是一个功能强大的内容管理系统&#xff0c;它使用MySQL数据库来存储和管理网站的内容、用户和配置信息。作为WordPress开发者&#xff0c;了解WordPress数据库的结构和各表的作用至关重要&#xff0c;因为这将帮助您更好地开发插件和主题&#xff0c;以及执行高级数据…

Java中使用四叶天动态代理IP构建ip代理池,实现httpClient和Jsoup代理ip爬虫

在本次爬虫项目中&#xff0c;关于应用IP代理池方面&#xff0c;具体完成以下功能&#xff1a; 从指定API地址提取IP到ip池中&#xff08;一次提取的IP数量可以自定义更改&#xff09; 每次开始爬虫前&#xff08;多条爬虫线程并发执行&#xff09;&#xff0c;从ip池中获取一…

Python机器学习笔记(十三、k均值聚类)

聚类&#xff08;clustering&#xff09;是将数据集划分成组的任务&#xff0c;这些组叫作簇&#xff08;cluster&#xff09;。其目标是划分数据&#xff0c;使得一个簇内的数据点非常相似且不同簇内的数据点非常不同。与分类算法类似&#xff0c;聚类算法为每个数据点分配&am…

KNN分类算法 HNUST【数据分析技术】(2025)

1.理论知识 KNN&#xff08;K-Nearest Neighbor&#xff09;算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类&#xff0c;也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。 KNN算法的思想&#xff1a; 对于任意n维输入向量&#xff0c;分别对应于特征…

宝塔-firefox(Docker应用)-构建自己的Web浏览器

安装基础软件 宝塔中安装firefox(Docker应用) 。宝塔中需要先安装docker及docker-composefirefox配置安装 点击firefox应用&#xff0c;选择【安装配置】点击右边绿色按钮&#xff0c;进行安装&#xff0c;这一步等待docker-compose根据你的配置初始化docker应用 等待安装 …

如何从 0 到 1 ,打造全新一代分布式数据架构

导读&#xff1a;本文从 DIKW&#xff08;数据、信息、知识、智慧&#xff09; 模型视角出发&#xff0c;探讨数字世界中数据的重要性问题。接着站在业务视角&#xff0c;讨论了在不断满足业务诉求&#xff08;特别是 AI 需求&#xff09;的过程中&#xff0c;数据系统是如何一…

Docker部署GitLab服务器

一、GitLab介绍 1.1 GitLab简介 GitLab 是一款基于 Git 的开源代码托管平台&#xff0c;集成了版本控制、代码审查、问题跟踪、持续集成与持续交付&#xff08;CI/CD&#xff09;等多种功能&#xff0c;旨在为团队提供一站式的项目管理解决方案。借助 GitLab&#xff0c;开发…

芯片Tapeout power signoff 之IR Drop Redhawk Ploc文件格式及其意义

数字IC后端工程师在芯片流程最后阶段都会使用redhawk或voltus进行设计的IR Drop功耗signoff分析。必须确保静态&#xff0c;动态ir drop都符合signoff标准。 在做redhawk ir drop分析前&#xff0c;我们需要提供一个redhawk ploc供电点坐标。 数字IC设计后端实现前期预防IR D…

HarmonyOS NEXT 实战之元服务:静态案例效果---查看国内航班服务

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; Index代码 import { authen…

python+requests接口自动化测试框架实例详解

前段时间由于公司测试方向的转型&#xff0c;由原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的…

前端:改变鼠标点击物体的颜色

需求&#xff1a; 需要改变图片中某一物体的颜色&#xff0c;该物体是纯色&#xff1b; 鼠标点击哪个物体&#xff0c;哪个物体的颜色变为指定的颜色&#xff0c;利用canvas实现。 演示案例 代码Demo <!DOCTYPE html> <html lang"en"><head>&l…

聊一聊 C#前台线程 如何阻塞程序退出

一&#xff1a;背景 1. 讲故事 这篇文章起源于我的 C#内功修炼训练营里的一位朋友提的问题&#xff1a;后台线程的内部是如何运转的 ? &#xff0c;犹记得C# Via CLR这本书中 Jeffery 就聊到了他曾经给别人解决一个程序无法退出的bug&#xff0c;最后发现是有一个 Backgrond…

Nmap基础入门及常用命令汇总

Nmap基础入门 免责声明&#xff1a;本文单纯分享技术&#xff0c;请大家使用过程中遵守法律法规~ 介绍及安装 nmap是网络扫描和主机检测的工具。作为一个渗透测试人员&#xff0c;必不可少的就是获取信息。那么nmap就是我们从互联网上获取信息的途径&#xff0c;我们可以扫描互…

Excel中一次查询返回多列

使用Excel或wps的时候&#xff0c;有时候需要一次查询返回多列内容&#xff0c;这种情况可以选择多次vlookup或者多次xlookup&#xff0c;但是这种做法费时费力不说&#xff0c;效率还有些低下&#xff0c;特别是要查询的列数过多时。我放了3种查询方法&#xff0c;效果图&…

NodeMCU驱动28BYJ-48型步进电机(Arduino)

NodeMCU NodeMCU开发板 此NodeMCU是在乐鑫公司&#xff08;Espressif Systems&#xff09;生产的ESP-12F模组的基础上封装好的具备WiFi功能的开源IoT开发板。本次选用安信可公司&#xff08;Ai-Thinker&#xff09;生产的CP2102版本的开发板。 28BYJ-48型步进电机 28BYJ-48型…

qt QZipReader详解

1、概述 QZipReader 是 Qt 中用于从 .zip 文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录&#xff0c;并允许你解压缩单个或多个文件。通过 QZipReader&#xff0c;你可以以编程方式读取 .zip 文件中的内容&#xff0c;并提取它们到目标目录中。…

html + css 淘宝网实战

之前有小伙伴说&#xff0c;淘宝那么牛逼你会写代码&#xff0c;能帮我做一个一样的淘宝网站吗&#xff0c;好呀&#xff0c;看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …

Ollama+OpenWebUI+llama3本地部署

引言 llama3在4月19日刚刚发布&#xff0c;官方的对比结果中在开源模型中堪称世界第一&#xff0c;整好周六日有时间&#xff0c;在魔搭社区上测试一下 2 安装Ollama 2.1 下载Ollama 登录Ollama官网下载Ollama安装包 GitHub&#xff1a;https://github.com/ollama/ollama?t…

【vue2父组件调用子组件方法之slot的使用】

父组件调用子组件方法之slot的使用 具体功能需求&#xff1a; 一个页面&#xff0c;点击按钮&#xff0c;打开一个弹窗。弹窗有自定义表单和公共表单&#xff0c;提交的时候要获取两个表单的数据以及复显表单数据 为什么使用插槽了&#xff0c;因为我需要在弹窗中复用公共表单…

【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下

【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下 一、问题背景 应用开发中&#xff0c;我们经常会遇到一些文件原先是放在资源文件夹 rawfile下&#xff0c;但是逻辑处理时&#xff0c;需要转移到本地沙箱才能操作。这种情况下&#xff0c;就需要将将…