点击上方"小陈学Python"关注我们



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



Django 的安装



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

pip install Django

安装完成之后如图所示。

基于 Django 的个人网站(1)_python


创建项目



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

基于 Django 的个人网站(1)_自增_02

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

基于 Django 的个人网站(1)_django_03

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

基于 Django 的个人网站(1)_python_04

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

基于 Django 的个人网站(1)_python_05

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

基于 Django 的个人网站(1)_django_06


设计与实现



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

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

其对应的 ER 图如图所示。

基于 Django 的个人网站(1)_python_07

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

基于 Django 的个人网站(1)_django_08

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

基于 Django 的个人网站(1)_自增_09

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

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,在这个列表中添加一项,代码如下:

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 就进入管理员登录页面,如图所示。

基于 Django 的个人网站(1)_django_10

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

基于 Django 的个人网站(1)_python_11

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

from django.contrib import admin
from.models import Article, Category


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

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

基于 Django 的个人网站(1)_django_12

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

基于 Django 的个人网站(1)_自增_13

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

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

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

基于 Django 的个人网站(1)_自增_14

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

基于 Django 的个人网站(1)_django_15

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

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)

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

基于 Django 的个人网站(1)_自增_16

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

今天的文章有不懂的可以后台回复“加群”,备注:小陈学Python,不备注可是会被拒绝的哦~!



基于 Django 的个人网站(1)_python_17

扫描二维码更精彩



文章都看完了

基于 Django 的个人网站(1)_django_18

不点个

基于 Django 的个人网站(1)_自增_19