前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于 Django 的个人网站(1)

基于 Django 的个人网站(1)

作者头像
不可言诉的深渊
发布2020-05-27 11:38:02
1.4K0
发布2020-05-27 11:38:02
举报
文章被收录于专栏:Python机器学习算法说书人

考虑到本人前段时间主要是因为毕业论文(设计)的答辩等各种各样的事情忙的没有时间写原创,所以前段时间我一直转载别人的文章,我没有想到公众号居然改版的这么快,居然都有专栏了~!因为我之前注册过一个域名,也已经备案了,准备搭建个人网站;但是因为没什么时间,一直没有搭建,今天我就教大家使用 Django 搭建一个个人网站。

Django 的安装

在开始之前,我们首先需要安装 Django。Python 安装第三方库的方法很简单,运行命令:pip install (库的名字),在这里也不例外,命令如下所示:

pip install Django

安装完成之后如图所示。

创建项目

通过看图,应该可以看出我安装的是 Django3.0.6 的版本,接下来就是新建一个 Django 项目,我直接使用 PyCharm 专业版的可视化操作而不是命令来创建项目,打开 PyCharm 专业版之后,如图所示。

点击 Create New Project,跳转界面如图所示。

因为我们需要创建 Django 项目,所以点击 Django,如图所示。

把项目的路径,项目所使用的 Python 解释器选好之后,点击更多设置(当然我这里已经点过了),可以自行设置模板语言和模板文件的文件夹。设置完成之后拉到最底部,如图所示。

其中 Enable Django admin 前面一定要打勾,之后点击 CREATE,就进入了项目代码的编写界面,如图所示。

设计与实现

接下来我们就需要考虑网站搭建所需要的功能,我在这里尽可能弄的简单一点,这里的参与者只有两个:作者和读者,其中作者具有对文章的类别和文章本身进行增删改查的操作,读者具有阅读文章和搜索文章两个操作。因此,这里的数据库主要管理两个对象——文章和类别。因为一个类别下面有多篇文章,一个文章也有可能对应着多个类别,所以文章和类别属于多对多关系(当然也可以定义成一个类别有多篇文章,一个文章只对应一个类别的一对多的关系)。关系找到了,接着就是考虑实体的属性,这里只有两个实体——文章和类别,文章实体中必须具有以下属性——id(主键自增)、标题(唯一)、摘要、内容(作者什么的我为了简单外加上节省空间,就不写了),类别,当然文章中还需要一个属性——状态,其中的取值只有两个值,0 和 1,0 表示未发布状态,1 表示已发布状态。接着我们考虑类别的属性,这个太简单了,类别具有以下属性——id(主键自增)、名称(唯一),对上述的分析总结如下:

  1. 文章实体的属性:id(主键自增)、标题(唯一)、摘要、内容、状态(只有 0 和 1 两个取值,0 表示未发布状态,1 表示已发布状态)。
  2. 类别实体的属性:id(主键自增)、名称(唯一)。
  3. 文章和类别是多对多关系。

其对应的 ER 图如图所示。

因为这个网站比较简单,我们只要创建一个 app 就够了,打开 PyCharm,点击 Terminal,如图所示。

在终端下输入命令:python manage.py startapp personal_website,按回车。此时项目目录发生了变化,结构如图所示。

接着打开 personal_website\models.py 去编写 Model 层的代码,在编写代码之前我们需要考虑其中的多对多关系该怎么设置,因为考虑到是根据文章选择类别,所以我们把文章这个类下面定义一个类别属性。代码如下:

代码语言:javascript
复制
from django.db import models


# Create your models here.
class Category(models.Model):
    name = models.CharField(max_length=255, unique=True)


class Article(models.Model):
    title = models.CharField(max_length=255, unique=True)
    abstract = models.CharField(max_length=255)
    content = models.TextField(max_length=65535)
    state = models.PositiveSmallIntegerField(choices=((0, '未发布'), (1, '已发布')), default=0)
    categories = models.ManyToManyField(Category)

然后就需要去激活这些模型,打开 PersonalWebsite\settings.py,找到 INSTALLED_APPS,在这个列表中添加一项,代码如下:

代码语言:javascript
复制
INSTALLED_APPS = [
    'personal_website.apps.PersonalWebsiteConfig',

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

接着就是对这个 app 进行数据迁移,打开终端,依次输入下面两个命令(顺序不可以颠倒):

python manage.py makemigrations personal_website

python manage.py migrate

迁移完成之后我们就需要创建一个超级管理员用户,输入命令:

python manage.py createsuperuser

执行命令之后按照提示填写必要的信息就行,接着我们启动项目,然后去浏览器地址栏输入:http://127.0.0.1:8000/admin 就进入管理员登录页面,如图所示。

然后按照提示输入用户名和密码并登录,登录之后的页面如图所示。

这个时候我们可以发现管理页面没有我们想要的数据,这个问题解决起来很简单,打开 personal_website\admin.py,编辑成下面这样:

代码语言:javascript
复制
from django.contrib import admin
from.models import Article, Category

# Register your models here.
admin.site.register(Article)
admin.site.register(Category)

重新运行项目登陆之后的页面如图所示。

因为我们在上面向管理页面注册过了文章和类别两个类,所以能够看到,接着我们尝试添加一些数据,先添加类别。添加几个之后我们进入类别列表页面,如图所示。

我们发现这个显示的让人不知道是什么。既然是类别,我们只需要显示对应的名称就行了,这个问题解决起来很简单,去重写模型类的__str__魔法方法,personal_website\models.py 的代码如下:

代码语言:javascript
复制
from django.db import models


# Create your models here.
class Category(models.Model):
    name = models.CharField(max_length=255, unique=True)

    def __str__(self):
        return self.name


class Article(models.Model):
    title = models.CharField(max_length=255, unique=True)
    abstract = models.CharField(max_length=255)
    content = models.TextField(max_length=65535)
    state = models.PositiveSmallIntegerField(choices=((0, '未发布'), (1, '已发布')), default=0)
    categories = models.ManyToManyField(Category)

    def __str__(self):
        return self.title

这次我们再次回到类别列表页面,如图所示。

可以发现类别列表显示已经正常了,接着我们尝试添加一些文章,文章添加完成之后我们就进文章列表页面看看,如图所示。

我们可以发现它只显示标题,连状态都不显示,这就有点不太好了,因为毕竟我要看文章是否被发布。解决这个问题就很简单了,打开 personal_website\admin.py,然后去里面自定义一个文章管理类,代码如下:

代码语言:javascript
复制
from django.contrib import admin
from.models import Article, Category


class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'state')


# Register your models here.
admin.site.register(Article, ArticleAdmin)
admin.site.register(Category)

然后我们再次进入文章列表页面,如图所示。

虽然说后台已经基本上算是完成了,但是在文章内容方面还是有些缺陷的,比如内容中只能是字符,图片什么的都无法写入,解决这个问题有两个方法——markdown 和富文本编辑器,我选择富文本编辑器,Django 富文本编辑器插件有很多,我在这里使用的是 django-ckeditor,想知道我为什么使用这个插件以及如何使用这个插件,我们下回再说。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python机器学习算法说书人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
ICP备案
在中华人民共和国境内从事互联网信息服务的网站或APP主办者,应当依法履行备案手续。腾讯云为您提供高效便捷的 ICP 备案服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档