步骤 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