【Python】 简单的Django项目示例,创建一个博客应用

步骤 1: 安装 Django
首先,我们需要安装Django。打开命令行终端,运行以下命令:

python -m pip install Django

这会使用pip来安装最新版本的Django。

步骤 2: 检查 Django 版本
为了确保Django已成功安装,您可以运行以下命令来检查安装的Django版本:

python -m django --version

这将显示您当前安装的Django版本。

步骤 3: 创建一个 Django 项目
现在,让我们创建一个Django项目。运行以下命令:

django-admin startproject blog_project

这将创建一个名为 “blog_project” 的Django项目文件夹,并在其中包含项目的基本结构。

步骤 4: 进入项目文件夹
切换到项目文件夹 “blog_project”,您可以使用以下命令:

cd blog_project

步骤 5: 创建一个 Django 应用程序
最后,我们将创建一个Django应用程序,命名为 “blog”。运行以下命令:

python manage.py startapp blog

这将在项目中创建一个名为 “blog” 的应用程序,其中包含了与博客相关的文件和目录结构。

步骤 6: 定义模型

blog应用中,定义模型类来表示博客文章和评论。

# blog/models.py

from django.db import models
from django.utils import timezone


class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField('date published', default=timezone.now)


class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    text = models.TextField()
    pub_date = models.DateTimeField('date published', default=timezone.now)

步骤 7: 创建视图

blog应用中创建视图函数,以便在浏览器中查看文章和添加评论。

# blog/views.py

from django.shortcuts import render, get_object_or_404
from .models import Post, Comment


def post_list(request):
    posts = Post.objects.all()
    return render(request, 'blog/post_list.html', {
    
    'posts': posts})


def add_comment(request, post_id):
    post = Post.objects.get(pk=post_id)
    if request.method == 'POST':
        text = request.POST['comment_text']
        Comment.objects.create(post=post, text=text)
    return render(request, 'blog/post_detail.html', {
    
    'post': post})


def post_detail(request, post_id):
    post = get_object_or_404(Post, pk=post_id)
    return render(request, 'blog/post_detail.html', {
    
    'post': post})

步骤 8: 创建URL映射

blog应用创建urls.py中定义URL路由,将URL请求映射到相应的视图。

# blog/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('add_comment/<int:post_id>/', views.add_comment, name='add_comment'),
]

步骤 9: 创建模板

创建HTML模板文件来渲染文章列表和文章详情页面。

  • templates/blog/post_list.html
{
    
    % load static %}
<!DOCTYPE html>
<html>
<head>
    <title>Blog Post List</title>
    <!-- 引入Bootstrap -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
    <!-- 引入自定义CSS文件(根据您的项目路径) -->
    <link rel="stylesheet" href="{% static 'css/custom.css' %}">
</head>
<body>
<div class="container">
    <h1 class="display-4 text-primary">Blog Post List</h1>

    {
    
    % for post in posts %}
        <div class="card mb-4 bg-info">
            <div class="card-body">
                <h2 class="card-title"><a href="{% url 'post_detail' post.id %}">{
    
    {
    
     post.title }}</a></h2>
                <p class="card-text">{
    
    {
    
     post.pub_date|date:"F d, Y" }}</p>
                <p class="card-text">{
    
    {
    
     post.content }}</p>
                <h3 class="card-title">Comments:</h3>
                <ul class="list-group list-group-flush">
                    {
    
    % for comment in post.comment_set.all %}
                        <li class="list-group-item custom-bg-color">
                            <div class="comment-content">{
    
    {
    
     comment.text }}</div>
                            <div class="comment-date text-muted">{
    
    {
    
     comment.pub_date|date:"F d, Y H:i" }}</div>
                        </li>
                    {
    
    % empty %}
                        <li class="list-group-item">No comments yet.</li>
                    {
    
    % endfor %}
                </ul>
            </div>
        </div>
    {
    
    % empty %}
        <p>No blog posts available.</p>
    {
    
    % endfor %}
</div>
</body>
</html>

  • templates/blog/post_detail.html
{
    
    % load static %}
<!DOCTYPE html>
<html>
<head>
    <title>{
    
    {
    
     post.title }}</title>
    <!-- 引入Bootstrap -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
    <!-- 引入自定义CSS文件 -->
    <link rel="stylesheet" href="{% static 'css/custom.css' %}">
</head>
<body>
<div class="container">
    <h1 class="display-4 text-primary">{
    
    {
    
     post.title }}</h1>
    <p class="text-muted">{
    
    {
    
     post.pub_date|date:"F d, Y" }}</p>
    <p>{
    
    {
    
     post.content }}</p>

    <h2 class="text-primary">Comments</h2>
    <ul class="list-group">
        {
    
    % for comment in post.comment_set.all %}
            <li class="list-group-item custom-bg-color">
                <div class="comment-content">{
    
    {
    
     comment.text }}</div>
                <div class="comment-date text-muted">{
    
    {
    
     comment.pub_date|date:"F d, Y H:i" }}</div>
            </li>
        {
    
    % empty %}
            <li class="list-group-item">No comments yet.</li>
        {
    
    % endfor %}
    </ul>


    <h3 class="text-primary">Add a Comment</h3>
    <form method="post" action="{% url 'add_comment' post.id %}">
        {
    
    % csrf_token %}
        <textarea name="comment_text" rows="4" cols="50" class="form-control" required></textarea>
        <br>
        <input type="submit" value="Add Comment" class="btn btn-primary">
    </form>
    <!-- 添加回到首页链接 -->
    <a href="{% url 'post_list' %}" class="btn btn-primary mt-4">Back to Home</a>
</div>
</body>
</html>

步骤 10: 创建静态文件

  • static/css/custom.css
.custom-text-color {
    
    
    color: #FF5733; /* 您的自定义文本颜色 */
}

.custom-bg-color {
    
    
    display: block;
    background-color: #337AFF; /* 您的自定义背景颜色 */
}
/* 在custom.css中定义样式 */
.comment-content {
    
    
    float: left; /* 左对齐 */
}

.comment-date {
    
    
    float: right; /* 右对齐 */
}

步骤 11: 修改settings文件

# 添加依赖
import os

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog', # 添加应用
]

TEMPLATES = [
    {
    
    
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 指定模板文件的目录
        'APP_DIRS': True,
        'OPTIONS': {
    
    
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

STATIC_URL = 'static/'
# 配置静态文件存储位置,这是应用级别的static目录
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

步骤 12: 创建数据库表

运行以下命令以创建数据库表:

python manage.py makemigrations --empty blog
python manage.py makemigrations
python manage.py migrate

步骤 13: 创建样例数据

python manage.py shell
from blog.models import Post, Comment
from django.utils import timezone

# 创建一篇博客文章
post1 = Post(title="我的第一篇博客", content="这是我的第一篇博客内容。", pub_date=timezone.now())
post1.save()

# 创建另一篇博客文章
post2 = Post(title="Django 教程", content="学习 Django 是一种乐趣!", pub_date=timezone.now())
post2.save()

# 为第一篇博客文章创建一些评论
comment1 = Comment(post=post1, text="这是第一篇博客的评论。", pub_date=timezone.now())
comment1.save()

comment2 = Comment(post=post1, text="另一个评论示例。", pub_date=timezone.now())
comment2.save()

# 为第二篇博客文章创建一个评论
comment3 = Comment(post=post2, text="感谢分享这个教程!", pub_date=timezone.now())
comment3.save()

# 退出
exit()

步骤 14: 运行项目

python manage.py runserver

运行效果

访问:http://127.0.0.1:8000/blog/

在这里插入图片描述

在这里插入图片描述

代码地址:https://github.com/linjiushengstudy/blog_project

猜你喜欢

转载自blog.csdn.net/linjiuxiansheng/article/details/133848054