django搭建博客网站(二)--建立博客应用,搭建数据库模型并迁移

一、建立博客应用

1.现在就来创建我们的 Django 博客应用,我把它命名为 blog。激活虚拟环境,进入到 manage.py 文件所在的目录下,运行 python manage.py startapp blog 命令即可建立一个 blog 应用:

2. 应用的目录结构

3. 打开 blogproject\ 目录下的 settings.py 文件,看名字就知道 settings.py 是一个设置文件(setting 意为设置),找到 INSTALLED_APPS 设置项,将 blog 应用添加进去。

 二、数据库模型

1.我们需要 3 个表格:文章(Post)、分类(Category)以及标签(Tag),下面就来分别编写它们对应的 Python 类。模型的代码通常写在相关应用的 models.py 文件里。

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Category(models.Model):
    """
        分类id
        Django 要求模型必须继承 models.Model 类。
        Category 只需要一个简单的分类名 name 就可以了。
        CharField 指定了分类名 name 的数据类型,CharField 是字符型,
        CharField 的 max_length 参数指定其最大长度,超过这个长度的分类名就不能被存入数据库。
        当然 Django 还为我们提供了多种其它的数据类型,如日期时间类型 DateTimeField、整数类型 IntegerField 等等。
        Django 内置的全部类型可查看文档:
        https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types
        """
    name = models.CharField(max_length=100)

class Tag(models.Model):
    """
        标签 Tag 也比较简单,和 Category 一样。
        再次强调一定要继承 models.Model 类!
    """
    name = models.CharField(max_length=100)
    
class Post(models.Model):
    """
        文章的数据库
    """
    #文章标题
    title = models.CharField(max_length=70)
    
    #文章正文,我们使用TextField.
    #存储比较短的字符串可以使用 CharField,但对于文章的正文来说可能会是一大段文本,因此使用 TextField 来存储大段文本.
    body = models.TextField()
    
    #文章的创建时间和最后一次修改时间,存储时间的字段用DateTimeField类型
    created_time = models.DateTimeField()
    modified_time = models.DateTimeField()

    # 文章摘要,可以没有文章摘要,但默认情况下 CharField 要求我们必须存入数据,否则就会报错。
    # 指定 CharField 的 blank=True 参数值后就可以允许空值了
    excerpt = models.CharField(max_length=200,blank=True)
    
    """
        这是分类与标签,分类与标签的模型我们已经定义在上面。
        我们在这里把文章对应的数据库表和分类、标签对应的数据库表关联了起来,但是关联形式稍微有点不同。
        我们规定一篇文章只能对应一个分类,但是一个分类下可以有多篇文章,所以我们使用的是 ForeignKey,即一对多的关联关系。
        而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用 ManyToManyField,表明这是多对多的关联关系。
        同时我们规定文章可以没有标签,因此为标签 tags 指定了 blank=True。
    """
    category = models.ForeignKey(Category)
    tags = models.ManyToManyField(Tag,blank=True)
    
    """
        文章作者,这里 User 是从 django.contrib.auth.models 导入的。
        django.contrib.auth 是 Django 内置的应用,专门用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。
        这里我们通过 ForeignKey 把文章和 User 关联了起来。
        因为我们规定一篇文章只能有一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。
    """
    author = models.ForeignKey(User)

2.理解多对一和多对多两种关联关系

ForeignKey 表明一种一对多的关联关系。比如这里我们的文章和分类的关系,一篇文章只能对应一个分类,而一个分类下可以有多篇文章。反应到数据库表格中,它们的实际存储情况是这样的:

文章 ID标题正文分类 ID
1title 1body 11
2title 2body 21
3title 3body 31
4title 4body 42
分类 ID分类名 
1Django 
2Python 

可以看到文章和分类实际上是通过文章数据库表中 分类 ID 这一列关联的。当要查询文章属于哪一个分类时,只需要查看其对应的分类 ID 是多少,然后根据这个分类 ID 就可以从分类数据库表中找到该分类的数据。例如这里文章 1、2、3 对应的分类 ID 均为 1,而分类 ID 为 1 的分类名为 Django,所以文章 1、2、3 属于分类 Django。同理文章 4 属于分类 Python。

ManyToManyField

ManyToManyField 表明一种多对多的关联关系,比如这里的文章和标签,一篇文章可以有多个标签,而一个标签下也可以有多篇文章。反应到数据库表格中,它们的实际存储情况是这样的:

文章 ID标题正文
1title 1body 1
2title 2body 2
3title 3body 3
4title 4body 4
标签 ID标签名
1Django 学习
2Python 学习
文章 ID标签 ID
11
12
21
32

多对多的关系无法再像一对多的关系中的例子一样在文章数据库表加一列 分类 ID 来关联了,因此需要额外建一张表来记录文章和标签之间的关联。例如文章 ID 为 1 的文章,既对应着 标签 ID 为 1 的标签,也对应着 标签 ID为 2 的标签,即文章 1 既属于标签 1:Django 学习,也属于标签 2:Python 学习。

2.数据库连接设置

 3.迁移数据库

 4.测试

MySQL数据库显示:

创建用户

 

使用Django快速搭建一个博客系统是非常容易的,下面是一个简单的步骤: 1. 创建一个Django项目 使用以下命令创建一个新的Django项目: ``` $ django-admin startproject myblog ``` 其中`myblog`是你的项目名称。 2. 创建一个应用 使用以下命令创建一个新的应用: ``` $ python manage.py startapp blog ``` 其中`blog`是你的应用名称。 3. 配置数据库 在`settings.py`文件中配置数据库,例如使用SQLite数据库: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } ``` 4. 创建模型 在`models.py`文件中定义博客文章的模型: ```python from django.db import models class Post(models.Model): title = models.CharField(max_length=200) content = models.TextField() created_at = models.DateTimeField(auto_now_add=True) ``` 5. 迁移数据库 使用以下命令创建数据库表: ``` $ python manage.py makemigrations $ python manage.py migrate ``` 6. 创建视图 在`views.py`文件中定义博客文章的视图: ```python from django.shortcuts import render from .models import Post def post_list(request): posts = Post.objects.all() return render(request, 'blog/post_list.html', {'posts': posts}) ``` 7. 创建模板 在`templates/blog`目录中创建一个`post_list.html`文件: ```html {% for post in posts %} <h2>{{ post.title }}</h2> <p>{{ post.content }}</p> {% endfor %} ``` 8. 配置URL 在`urls.py`文件中配置博客文章的URL: ```python from django.urls import path from . import views urlpatterns = [ path('', views.post_list, name='post_list'), ] ``` 9. 运行服务器 使用以下命令运行开发服务器: ``` $ python manage.py runserver ``` 现在你的博客系统已经可以运行了,访问`http://localhost:8000/`即可查看博客文章列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值