一、安装Django
1.1 使用pip安装Django:pip install django
1.2 验证Django安装:django-admin --version
二、创建项目
2.1 使用django-admin创建项目:django-admin startproject myproject(将myproject替换为你的项目名称)
2.2 进入项目目录:cd myproject
三、创建应用
3.1 使用python manage.py创建应用:python manage.py startapp myapp(将myapp替换为你的应用名称)
四、配置应用
4.1 在项目的settings.py文件中,向INSTALLED_APPS列表添加新创建的应用(如:‘myapp’)
五、创建模型(数据库表结构)
创建模型(Model)是在使用 Django 开发网站时的一个重要步骤。模型是 Python 类,它们用于定义和描述你的数据结构,它们将映射到数据库中的表结构。在 Django 中,模型是用于处理数据的主要组件,可以帮助你更方便地查询、更新和管理数据。创建模型的主要原因是:
结构化数据:模型可以帮助你以一种清晰、易于理解的方式组织数据。
代码可维护性:模型使得数据的逻辑和表现层分离,使代码更具可维护性。
抽象层:Django 的模型系统提供了一层抽象,让你可以在不了解数据库具体实现细节的情况下进行数据操作。
自动化:Django 可以根据你定义的模型自动生成数据库表结构,简化了开发过程。
(一)简单模型
具体操作如下:
在 models.py 文件中,首先导入所需模块:
from django.db import models
定义你的模型类,它需要继承自 models.Model 类。例如,创建一个名为 Blog 的模型:
class Blog(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
上述代码定义了一个简单的博客模型,包含标题(title)、内容(content)和发布日期(pub_date)三个字段。
运行以下命令生成数据库迁移文件:
python manage.py makemigrations <app_name>
应用迁移,以创建数据库表结构:
python manage.py migrate
至此,你已经成功创建了一个基本的模型并将其映射到数据库表结构。接下来,你可以根据需求继续开发网站的其他部分。
(二)博客模型
一个基本的博客网站通常包含文章(Posts)和评论(Comments)。以下是一些建议的模型设计:
1、创建 Post 模型
在 portfolio 应用的 models.py 文件中创建一个名为 Post 的模型,其中包含文章标题、内容、创建时间和修改时间等字段。
from django.db import models
from django.utils import timezone
# 创建一个名为Post的模型类
class Post(models.Model):
# 定义CharField,最大长度为200,表示文章的标题
title = models.CharField(max_length=200)
# 定义TextField,表示文章的正文内容
content = models.TextField()
# 定义DateTimeField,设置默认值为当前时间
pub_date = models.DateTimeField(default=timezone.now)
# 定义DateTimeField,自动设置为最后一次保存对象的时间
updated_date = models.DateTimeField(auto_now=True)
# 定义一个特殊方法,返回对象的字符串表示形式,本例中返回文章的标题
def __str__(self):
return self.title
2、创建 Comment 模型
在同一文件中创建一个名为 Comment 的模型,其中包含评论的作者、内容、评论时间和关联的文章等字段。
from django.db import models
from django.utils import timezone
class Comment(models.Model):
# 定义外键,关联到Post模型,on_delete参数表示当关联的Post对象被删除时,也同时删除该评论对象。related_name='comments'表示为Post模型和Comment模型之间的关系设置了一个反向关系的名称,该名称为comments。这样,在查询Post对象时可以通过comments属性访问它的所有评论。例如,如果要获取一个名为post的Post对象的所有评论,可以使用post.comments.all()。
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
# 定义CharField,表示评论的作者,最大长度为100
author = models.CharField(max_length=100)
# 定义TextField,表示评论的内容
content = models.TextField()
# 定义DateTimeField,表示评论的发布时间,默认为当前时间
pub_date = models.DateTimeField(default=timezone.now)
# 定义一个特殊方法,返回对象的字符串表示形式,本例中返回评论作者和评论内容的前50个字符
def __str__(self):
return f"{
self.author} - {
self.content[:50]}"
这里我们使用了 get_object_or_404 函数来获取指定 ID 的文章,如果找不到文章,则返回 404 错误。同时,我们获取了文章的所有评论并按发布时间升序排列。
这里我们使用了 ForeignKey 来表示一篇文章与多个评论之间的关系。related_name 参数可以方便地通过文章获取其所有关联的评论。
迁移数据库:由于我们修改了模型,需要生成迁移文件并应用迁移,以在数据库中创建相应的表结构。运行以下命令:
python manage.py makemigrations portfolio
python manage.py migrate
现在我们已经创建了基本的模型结构,接下来我们将继续完善视图、模板和 URL,以便在网站上显示文章和评论。
3、评论表单
在 portfolio/forms.py 文件中(如果不存在,请创建该文件),创建一个名为 CommentForm 的表单类,用于处理评论数据:
from django import forms
from .models import Comment
class CommentForm(forms.ModelForm)