【django初学者项目】

news2025/3/10 23:34:58

下面为你详细介绍如何创建一个简单有趣的 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 models



class 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 makemigrations

python manage.py migrate

步骤 6:创建视图

打开 `blogapp/views.py` 文件,编写视图函数:

python

from django.shortcuts import render, redirect, get_object_or_404

from .models import BlogPost

from .forms import BlogPostForm



def 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 forms

from .models import BlogPost



class BlogPostForm(forms.ModelForm):

    class Meta:

        model = BlogPost

        fields = ['title', 'content']

步骤 8:配置 URL

打开 `blogapp/urls.py` 文件(如果不存在则创建):

Python

from django.urls import path

from .views import post_list, post_detail, post_create, post_edit, post_delete



urlpatterns = [

    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 admin

from django.urls import path, include



urlpatterns = [

    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/` 查看博客系统。你可以创建、查看、编辑和删除博客文章。

 

有不会的问题尽可来私信询问噢~

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验一:在Windows 10/11下配置和管理TCP/IP

目录 1.【实训目标】 2.【实训环境】 3.【实训内容】 4.【实训步骤】 1.【实训目标】 1.了解网络基本配置中包含的协议、服务、客户端。 2.了解Windows支持的网络协议及参数设置方法。 3.掌握TCP/IP协议的配置。 2.【实训环境】 硬件环境&#xff1a;每人一台计算机&a…

【愚公系列】《Python网络爬虫从入门到精通》045-Charles的SSL证书的安装

标题详情作者简介愚公搬代码头衔华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xff0c;腾讯云优秀博主&…

同为科技智能PDU在数据中心场景的应用与解决方案

数据中心当前处于一个快速发展和技术变革的特殊时期&#xff0c;全新的人工智能应用正在重塑整个世界&#xff0c;为社会带来便捷的同时&#xff0c;也为数据中心的发展带来了新的机遇和挑战。智能算例的爆发式增长&#xff0c;对数据中心提出了大算力、高性能的新需求&#xf…

《V8 引擎狂飙,Node.js 续写 JavaScript 传奇》

”你没想过也许是这个镇子对你来说太小了吗&#xff1f; 对我而言&#xff0c;这个小镇容不下我的雄心壮志。 “ 什么是 Node.js&#xff1f; Node.js是一个跨平台JS运行环境&#xff0c;使开发者可以搭建服务器端的JS应用程序 作用&#xff1a;使用 Node.js 编写服务器端程序…

【Java代码审计 | 第八篇】文件操作漏洞成因及防范

未经许可&#xff0c;不得转载。 文章目录 文件操作漏洞文件读取漏洞基于 InputStream 的读取基于 FileReader 的读取 文件下载漏洞文件删除漏洞防范 文件操作漏洞 分为文件读取漏洞、文件下载漏洞与文件删除漏洞。 文件读取漏洞 在Java中&#xff0c;文件读取通常有两种常见…

在Linux开发板中使用.NET实现音频开发

本文将以Linux开发板为基础&#xff0c;使用ALSA音频框架和C#语言&#xff0c;演示如何实现基础的音频录制与播放功能。 1. 背景 音频处理是嵌入式开发中常见的需求&#xff0c;无论是语音交互、环境监测还是多媒体应用都离不开音频模块的支持。在Linux系统中&#xff0c;ALSA…

基于RNN+微信小程序+Flask的古诗词生成应用

项目介绍 平台采用B/S结构&#xff0c;后端采用主流的Flask框架进行开发&#xff0c;古诗词生成采用RNN模型进行生成&#xff0c;客户端基于微信小程序开发。是集成了Web后台开发、微信小程序开发、人工智能&#xff08;RNN&#xff09;等多个领域的综合性应用&#xff0c;是课…

基于单片机的智慧农业大棚系统(论文+源码)

1系统整体设计 经过上述的方案分析&#xff0c;采用STM32单片机为核心&#xff0c;结合串口通信模块&#xff0c;温湿度传感器&#xff0c;光照传感器&#xff0c;土壤湿度传感器&#xff0c;LED灯等硬件设备来构成整个控制系统。系统可以实现环境的温湿度检测&#xff0c;土壤…

2025-03-08 学习记录--C/C++-PTA 习题8-9 分类统计各类字符个数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h> #define MAXS 15void StringCount( …

OTP单片机调试工具

大部分的OTP单片机开发流程是先用仿真器进行仿真&#xff0c;f仿真完成之后再烧录OTP单片机芯片进行验证&#xff0c;但是很多少时候会发现有一个问题&#xff0c;仿真器仿真都是OK的&#xff0c;但是一旦焊接在板上了&#xff0c;就往往发现有问题&#xff0c;因为硬件条件变化…

二次SQL注入

原理 用户向数据库存入恶意数据&#xff0c;当数据被送进数据库的时候&#xff0c;会对存入的信息进行转义然后再储存&#xff0c;但是存进去的数据会再次被转义回来&#xff08;也就是原样不变的存进数据库里&#xff0c;只是害怕攻击者在存入数据的时候捣蛋而已&#xff09;…

【贪心算法】将数组和减半的最小操作数

1.题目解析 2208. 将数组和减半的最少操作次数 - 力扣&#xff08;LeetCode&#xff09; 2.讲解算法原理 使用当前数组中最大的数将它减半&#xff0c;&#xff0c;直到数组和减小到一半为止&#xff0c;从而快速达到目的 重点是找到最大数&#xff0c;可以采用大根堆快速达到…

Dify部署踩坑指南(Windows+Mac)

组件说明 Dify踩坑及解决方案 ⚠️ 除了修改镜像版本&#xff0c;nginx端口不要直接修改docker-compose.yaml &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 1、更换镜像版本 这个文件是由.env自动生成的&#xff0c;在.env配置 …

你为什么要写博客?

契机&#xff1a;最近CSDN系统给我发了一条私信&#xff0c;说我成为博主已经四年了&#xff0c;写一篇博客纪念可以得一枚纪念勋章&#xff0c;遂有此文。 机缘 最开始的这篇博客&#xff0c;是为了公司内部的一次分享会准备的&#xff0c;完全是YY出来的&#xff0c;现在看…

【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] 外卖店优先级 题目 解析优先队列如何判断是否使用优先队列&#xff1f;省略规则优先队列常用操作大顶堆 vs 小顶堆定义队列h队列数组 代码 题目 解析 每个外卖店会在不同的时间点收到订单&#xff0c;我们可以看见测试用例的时间顺序是不同的&#x…

VsCode + EIDE + OpenOCD + STM32(野火DAP) 开发环境配置

VsCode EIDE OpenOCD STM32(野火DAP) 开发环境配置 接受了新时代编辑器的我&#xff0c;实在受不了Keil的上古编辑页面&#xff0c;周树人说过&#xff1a;由奢入俭难&#xff0c;下面我们一起折腾一下开源软件Vscode&#xff0c; 用以开发51和STM32&#xff0c;有错误之处&…

JVM类加载器面试题及原理

JVM只会运行二进制文件&#xff0c;类加载器的作用就是将字节码文件加载到JVM中&#xff0c;从而让Java程序能够启动起来。 1. 类加载器的种类 启动类加载器&#xff08;BootStrap ClassLoader&#xff09;&#xff1a;加载JAVA_HOME/jre/lib目录下的库扩展类加载器&#xff…

tomcat的安装与配置(包含在idea中配置tomcat)

Tomcat 是由 Apache 软件基金会开发的开源 Java Web 应用服务器&#xff0c;主要用于运行 Servlet 和 JSP&#xff08;JavaServer Pages&#xff09;程序。它属于轻量级应用服务器&#xff0c;适用于中小型系统及开发调试场景&#xff0c;尤其在处理动态内容&#xff08;如 Jav…

读书报告」网络安全防御实战--蓝军武器库

一眨眼&#xff0c;20天过去了&#xff0c;刷完了这本书「网络安全防御实战--蓝军武器库」&#xff0c;回味无穷&#xff0c;整理概览如下&#xff0c;可共同交流读书心得。在阅读本书的过程中&#xff0c;我深刻感受到网络安全防御是一个综合性、复杂性极高的领域。蓝军需要掌…