【django初学者项目】
下面为你详细介绍如何创建一个简单有趣的 Django 项目——博客系统。这个项目允许用户创建、查看、编辑和删除博客文章。
步骤 1:环境准备
首先,确保你已经安装了 Python 和 pip。然后,创建一个虚拟环境并激活它,接着安装 Django。
bash
# 创建虚拟环境
python -m venv myblogenv
# 激活虚拟环境
# 在 Windows 上
myblogenv\Scripts\activate
# 在 macOS/Linux 上
source myblogenv/bin/activate
# 安装 Django
pip install django
步骤 2:创建 Django 项目和应用
bash
# 创建 Django 项目
django-admin startproject myblogproject
# 进入项目目录
cd myblogproject
# 创建应用
python manage.py startapp blogapp
步骤 3:配置项目
打开 `myblogproject/settings.py` 文件,将 `blogapp` 添加到 `INSTALLED_APPS` 列表中:
python
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','blogapp', # 添加这一行]
步骤 4:定义模型
打开 `blogapp/models.py` 文件,定义博客文章的模型:
python
from django.db import modelsclass BlogPost(models.Model):title = models.CharField(max_length=200)content = models.TextField()pub_date = models.DateTimeField(auto_now_add=True)def __str__(self):return self.title
步骤 5:创建数据库迁移文件并应用迁移
bash
python manage.py makemigrationspython manage.py migrate
步骤 6:创建视图
打开 `blogapp/views.py` 文件,编写视图函数:
python
from django.shortcuts import render, redirect, get_object_or_404from .models import BlogPostfrom .forms import BlogPostFormdef post_list(request):posts = BlogPost.objects.all().order_by('-pub_date')return render(request, 'blogapp/post_list.html', {'posts': posts})def post_detail(request, pk):post = get_object_or_404(BlogPost, pk=pk)return render(request, 'blogapp/post_detail.html', {'post': post})def post_create(request):if request.method == 'POST':form = BlogPostForm(request.POST)if form.is_valid():form.save()return redirect('post_list')else:form = BlogPostForm()return render(request, 'blogapp/post_form.html', {'form': form})def post_edit(request, pk):post = get_object_or_404(BlogPost, pk=pk)if request.method == 'POST':form = BlogPostForm(request.POST, instance=post)if form.is_valid():form.save()return redirect('post_detail', pk=post.pk)else:form = BlogPostForm(instance=post)return render(request, 'blogapp/post_form.html', {'form': form})def post_delete(request, pk):post = get_object_or_404(BlogPost, pk=pk)post.delete()return redirect('post_list')
步骤 7:创建表单
在 `blogapp` 目录下创建 `forms.py` 文件:
python
from django import formsfrom .models import BlogPostclass BlogPostForm(forms.ModelForm):class Meta:model = BlogPostfields = ['title', 'content']
步骤 8:配置 URL
打开 `blogapp/urls.py` 文件(如果不存在则创建):
Python
from django.urls import pathfrom .views import post_list, post_detail, post_create, post_edit, post_deleteurlpatterns = [path('', post_list, name='post_list'),path('<int:pk>/', post_detail, name='post_detail'),path('new/', post_create, name='post_create'),path('<int:pk>/edit/', post_edit, name='post_edit'),path('<int:pk>/delete/', post_delete, name='post_delete'),]
然后在 `myblogproject/urls.py` 中包含 `blogapp` 的 URL 配置:
python
from django.contrib import adminfrom django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('', include('blogapp.urls')),]
步骤 9:创建模板
在 `blogapp` 目录下创建 `templates` 目录,再在 `templates` 目录下创建 `blogpost.pk。在 `blogapp/templates/blogapp` 目录下创建以下模板文件:
#### `post_list.html`
html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Blog Posts</title></head><body><h1>Blog Posts</h1><!-- 假设视图名为 post_create,正确创建新文章链接 --><a href="{% url 'post_create' %}">New Post</a><!-- 假设 posts 是包含博客文章的列表 -->{% for post in posts %}<h2><a href="{% url 'post_detail' post.pk %}">{{ post.title }}</a></h2><p>{{ post.content|post.pkpost.pkewords:20 }}</p><p>Published on {{ post.pub_date }}</p><a href="{% url 'post_edit' post.pk %}">Edit</a><a href="{% url 'post_delete' post.pk %}">Delete</a>{% endfor %}</body></html>
#### `post_detail.html`
html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>{{ post.title }}</title></head><body><h1>{{ post.title }}</h1><p>{{ post.content }}</p><p>Published on {{ post.pub_date }}</p><a href="{% url 'post_edit' post.pk %}">Edit</a><a href="{% url 'post_delete' post.pk %}">Delete</a><a href="{% url 'post_list' %}">Back to List</a></body></html>
#### `post_form.html`
html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>{% if form.instance.pk %}Edit Post{% else %}New Post{% endif %}</title></head><body><h1>{% if form.instance.pk %}Edit Post{% else %}New Post{% endif %}</h1><form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">Save</button></form><a href="{% url 'post_list' %}">Cancel</a></body></html>
步骤 10:运行项目
bash
python manage.py runserver
现在,你可以在浏览器中访问 `http://127.0.0.1:8000/` 查看博客系统。你可以创建、查看、编辑和删除博客文章。
有不会的问题尽可来私信询问噢~
相关文章:
【django初学者项目】
下面为你详细介绍如何创建一个简单有趣的 Django 项目——博客系统。这个项目允许用户创建、查看、编辑和删除博客文章。 步骤 1:环境准备 首先,确保你已经安装了 Python 和 pip。然后,创建一个虚拟环境并激活它,接着安装 Django…...
实验一:在Windows 10/11下配置和管理TCP/IP
目录 1.【实训目标】 2.【实训环境】 3.【实训内容】 4.【实训步骤】 1.【实训目标】 1.了解网络基本配置中包含的协议、服务、客户端。 2.了解Windows支持的网络协议及参数设置方法。 3.掌握TCP/IP协议的配置。 2.【实训环境】 硬件环境:每人一台计算机&a…...
使用格式工厂提取视频中的音频
选择输出格式:在格式工厂的左侧功能栏中,点击 “音频” 选项,会展开多种音频格式,根据自己的需求选择如 “MP3”“WAV”“WMA” 等作为输出格式。添加视频文件:点击 “添加文件” 按钮,在弹出的文件浏览器中…...
【愚公系列】《Python网络爬虫从入门到精通》045-Charles的SSL证书的安装
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主&…...
同为科技智能PDU在数据中心场景的应用与解决方案
数据中心当前处于一个快速发展和技术变革的特殊时期,全新的人工智能应用正在重塑整个世界,为社会带来便捷的同时,也为数据中心的发展带来了新的机遇和挑战。智能算例的爆发式增长,对数据中心提出了大算力、高性能的新需求…...
uniapp开通开屏广告后动态开启或关闭开屏广告
近期使用uniapp开发的APP有uniad的广告对接,并且要求会员用户不显示包含开屏广告在内的广告,除开屏广告外的广告都可以通过uniapp广告组件控制是否显示 因uniad的开屏广告无需代码开发,经过uniad客服指点可在App.vue中的onLaunch生命周期中执…...
go map的声明和使用
1.简介 map是key-value数据结构,右丞为字段或者关联数据。类似其他语言的集合,map在go中是引用类型,必须初始化才能使用。 2.语法 map[keytype]valuetype keytype:表示间的类型。可以是基本数据类型,还可以是指针、channl等。…...
《V8 引擎狂飙,Node.js 续写 JavaScript 传奇》
”你没想过也许是这个镇子对你来说太小了吗? 对我而言,这个小镇容不下我的雄心壮志。 “ 什么是 Node.js? Node.js是一个跨平台JS运行环境,使开发者可以搭建服务器端的JS应用程序 作用:使用 Node.js 编写服务器端程序…...
【Java代码审计 | 第八篇】文件操作漏洞成因及防范
未经许可,不得转载。 文章目录 文件操作漏洞文件读取漏洞基于 InputStream 的读取基于 FileReader 的读取 文件下载漏洞文件删除漏洞防范 文件操作漏洞 分为文件读取漏洞、文件下载漏洞与文件删除漏洞。 文件读取漏洞 在Java中,文件读取通常有两种常见…...
在Linux开发板中使用.NET实现音频开发
本文将以Linux开发板为基础,使用ALSA音频框架和C#语言,演示如何实现基础的音频录制与播放功能。 1. 背景 音频处理是嵌入式开发中常见的需求,无论是语音交互、环境监测还是多媒体应用都离不开音频模块的支持。在Linux系统中,ALSA…...
SQL Server核心知识总结
SQL Server核心知识总结 🎯 本文总结了SQL Server核心知识点,每个主题都提供实际可运行的示例代码。 一、SQL Server基础精要 1. 数据库核心操作 -- 1. 创建数据库(核心配置) CREATE DATABASE 学生管理系统 ON PRIMARY (NAME 学生管理系统…...
基于RNN+微信小程序+Flask的古诗词生成应用
项目介绍 平台采用B/S结构,后端采用主流的Flask框架进行开发,古诗词生成采用RNN模型进行生成,客户端基于微信小程序开发。是集成了Web后台开发、微信小程序开发、人工智能(RNN)等多个领域的综合性应用,是课…...
基于单片机的智慧农业大棚系统(论文+源码)
1系统整体设计 经过上述的方案分析,采用STM32单片机为核心,结合串口通信模块,温湿度传感器,光照传感器,土壤湿度传感器,LED灯等硬件设备来构成整个控制系统。系统可以实现环境的温湿度检测,土壤…...
【AGI】智谱开源2025:一场AI技术民主化的革命正在到来
智谱开源2025:一场AI技术民主化的革命正在到来 引言:开源,一场技术平权的革命一、CogView4:中文AI生成的里程碑1. 破解汉字生成的“AI魔咒”2. 开源协议与生态赋能 二、AutoGLM:人机交互的范式跃迁1. 自然语言驱动的跨…...
2025-03-08 学习记录--C/C++-PTA 习题8-9 分类统计各类字符个数
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 二、代码(C语言)⭐️ #include <stdio.h> #define MAXS 15void StringCount( …...
yolov8改进|MobileNetV4替换Backbone,轻量化!!
yolov8改进|MobileNetV4替换Backbone,轻量化!! 一级目录二级目录三级目录MobileNetV4简介论文地址核心代码将核心代码放入`ultralytics/nn/modules`中,新建MobileNetV4.py修改`tasks.py``ultralytics/utils/torch_utils.py`中yaml文件一级目录 二级目录 三级目录 各位哥哥…...
OTP单片机调试工具
大部分的OTP单片机开发流程是先用仿真器进行仿真,f仿真完成之后再烧录OTP单片机芯片进行验证,但是很多少时候会发现有一个问题,仿真器仿真都是OK的,但是一旦焊接在板上了,就往往发现有问题,因为硬件条件变化…...
二次SQL注入
原理 用户向数据库存入恶意数据,当数据被送进数据库的时候,会对存入的信息进行转义然后再储存,但是存进去的数据会再次被转义回来(也就是原样不变的存进数据库里,只是害怕攻击者在存入数据的时候捣蛋而已)…...
机器学习:愚者未完成的诗篇(零)
当算法在数据海洋中打捞支离破碎的韵律时,机器学习系统展现出的智慧如同断臂的维纳斯雕像——完美与残缺构成令人战栗的美学悖论。愚者,在词语的混沌中编织逻辑经纬,却总在即将触及诗性本质的瞬间,暴露出认知维度的致命裂隙。 一…...
论文阅读-秦汉时期北方边疆组织的空间互动模式与直道的定位(中国)
论文英文题目:A spatial interaction model of Qin-Han Dynasty organisation on the northern frontier and the location of the Zhidao highway (China) 发表于:journal of archaeological science,影响因子:3.030 论文主要是…...
【贪心算法】将数组和减半的最小操作数
1.题目解析 2208. 将数组和减半的最少操作次数 - 力扣(LeetCode) 2.讲解算法原理 使用当前数组中最大的数将它减半,,直到数组和减小到一半为止,从而快速达到目的 重点是找到最大数,可以采用大根堆快速达到…...
Dify部署踩坑指南(Windows+Mac)
组件说明 Dify踩坑及解决方案 ⚠️ 除了修改镜像版本,nginx端口不要直接修改docker-compose.yaml !!!!!!! 1、更换镜像版本 这个文件是由.env自动生成的,在.env配置 …...
无人机端部署 AI 模型,实现实时数据处理和决策
在无人机端部署 AI 模型,实现实时数据处理和决策,是提升无人机智能化水平的关键技术之一。通过将 AI 模型部署到无人机上,可以实现实时目标检测、路径规划、避障等功能。以下是实现这一目标的详细方案和代码示例。 一、实现方案 1. 硬件选择…...
你为什么要写博客?
契机:最近CSDN系统给我发了一条私信,说我成为博主已经四年了,写一篇博客纪念可以得一枚纪念勋章,遂有此文。 机缘 最开始的这篇博客,是为了公司内部的一次分享会准备的,完全是YY出来的,现在看…...
【VUE2】第三期——样式冲突、组件通信、异步更新、自定义指令、插槽
目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …...
P8685 [蓝桥杯 2019 省 A] 外卖店优先级--优先队列“数组”!!!!!
P8685 [蓝桥杯 2019 省 A] 外卖店优先级 题目 解析优先队列如何判断是否使用优先队列?省略规则优先队列常用操作大顶堆 vs 小顶堆定义队列h队列数组 代码 题目 解析 每个外卖店会在不同的时间点收到订单,我们可以看见测试用例的时间顺序是不同的&#x…...
VsCode + EIDE + OpenOCD + STM32(野火DAP) 开发环境配置
VsCode EIDE OpenOCD STM32(野火DAP) 开发环境配置 接受了新时代编辑器的我,实在受不了Keil的上古编辑页面,周树人说过:由奢入俭难,下面我们一起折腾一下开源软件Vscode, 用以开发51和STM32,有错误之处&…...
JVM类加载器面试题及原理
JVM只会运行二进制文件,类加载器的作用就是将字节码文件加载到JVM中,从而让Java程序能够启动起来。 1. 类加载器的种类 启动类加载器(BootStrap ClassLoader):加载JAVA_HOME/jre/lib目录下的库扩展类加载器ÿ…...
在 Maven 中使用 <scope> 元素:全面指南
目录 前言 在 Maven 中, 元素用于定义依赖项的作用范围,即依赖项在项目生命周期中的使用方式。正确使用 可以帮助我们优化项目的构建过程,减少不必要的依赖冲突,并提高构建效率。本文将详细介绍 的使用步骤、常见作用范围、代码…...
tomcat的安装与配置(包含在idea中配置tomcat)
Tomcat 是由 Apache 软件基金会开发的开源 Java Web 应用服务器,主要用于运行 Servlet 和 JSP(JavaServer Pages)程序。它属于轻量级应用服务器,适用于中小型系统及开发调试场景,尤其在处理动态内容(如 Jav…...
