用django2.0搭建个人博客

博客网站的需求与规划

该个人博客为简单的入门示范网站,具有以下功能

  • 项目名称为mblog
  • 通过admin管理界面发帖、编辑以及删除贴文,且此界面支持markdown语句
  • 使用BootStrap框架
  • 在主页中显示每篇文章的标题、简短摘要以及发帖日期
  • 在主页中加入侧边栏,可以加入自定义的html以及js代码
  • 在输出文章时,可以解析markdown语句并正确显示排版后的样子

另外,所有的图形文件采用第三方网站存储的方式,需要以外部网站连接的方式通过markdown语法设置在文章中。

创建工程目录

安装django2.0之后,在工作目录打开命令行,依次输入以下命令

django-admin startproject mblog
cd mblog
python manage.py startapp mainsite

创建后目录层级如下

这样网站框架就大致完成了,接着输入以下命令,就可以看到这个页面了

python manage.py runserver

Django文件夹与文件解析

为了方便起见,我们先编辑settings.py的两个地方。首先,把我们创建的app模块mainsite加进去(在settings.py的INSTALL_APPS列表中)

再把时区设置修改一下

创建博客数据表

数据库与Django的关系

在默认情况下,Django的数据库是以Model的方式来操作的,也就是在程序中不直接面对数据库与数据表,而是以class类先创建号Model,然后通过对Model的操作打到操作数据库的目的。

简单来看,在Django操作数据库,有以下几个步骤:

  • 在models.py中定义需要使用的类(继承自models.Model)
  • 详细地设置每一个在类中的变量,即数据表中的每一个字段
  • 使用python manage.py makemigrations 创建数据库和Django间的中介文件
  • 使用python manage.py migrate 同步更新数据库的内容

我们需要一个用来存储文章的数据表,所以修改一下mainsite/models.py的内容
修改后的内容如下:

参数说明:title用来显示文章的标题,slug是文章的网址,body是文章的内容,pub_date是发表的时间。class Meta内的设置要指定文章显示的顺序,以日期倒序显示,__str__是返回你在数据库搜索时返回的内容。

然后输入以下命令执行数据库迁移

python manage.py makemigrations
python manage.py migrate

启动后台管理界面

django自带后台管理系统,我们先要创建一个管理员

python manage.py createsuperuser

创建完之后,要将models中的数据库类列入管理,修改mainsite/admin.py文件,修改后的内容如下,list_display是指定展示出来的字段

然后进入后台管理界面,就是127.0.0.1/admin

点击Posts

再点击右边增加POST,增加几篇文章留作调试

读取数据库中的内容

在数据库中有了文章后,我们要将它显示在首页。为了数据抽象化,django把数据的存取和显示区分为Model、Template以及View,分别对应到models.py、template文件夹和views.py这些文件。

我们先打开mainsite/views.py文件,将内容修改为如下:

from django.shortcuts import render
from django.http import HttpResponse
from .models import Post# Create your views here.def homepage(request):posts = Post.objects.all()post_lists = list()for count, post in enumerate(posts):post_lists.append("No.{}:".format(str(count)) + str(post) + "<hr>")post_lists.append("<small>" + str(post.body) + "</small><br><br>")return HttpResponse(post_lists)

然后进入主页面

使用模板引擎

创建网页输出模板

前面示范了通过HttpResponse输出数据到浏览器端,但我们通常不这么做,我们会把这些数据放到template中来展示。
基本步骤如下:

  • 在settings.py中设置模板文件夹的位置
  • 在urls.py中创建网址和views.py中函数的对应关系
  • 创建.html文件,做好排版
  • 运行程序,以objects.all()在views.html中取得数据或资料
  • 以render函数把数据送到指定的模板文件

在此项目的目录中创建templates文件夹。创建后目录结构如下


将文件夹名称添加到settings.py的TEMPLATE区块中

将数据放到模板中渲染,修改views.py文件。使用local()函数会将当前内存中所有局部变量使用字典类型打包起来

def homepage(request):posts = Post.objects.all()now = datetime.now()return render(request, 'index.html', locals())

在templates目录下,创建一个名为index.html的模板文件,如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>欢迎光临我的博客</title>
</head>
<body><h1>欢迎光临我的博客</h1><hr>{% for post in posts %}<p><a href="/post/{{ post.slug }}">{{ post.title }}</a></p>{% endfor %}<hr><h3>现在时刻:{{ now }}</h3>
</body>
</html>

打开网站可以看到

点击任意一个文章标题,都是要进去就可以看到我们的详情页面,新建一个post.html文件,内容如下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>欢迎光临我的博客</title>
</head>
<body><h1>{{ post.title }}</h1><hr><p>{{ post.body }}</p><hr><h3><a href="/">回首页</a></h3>
</body>
</html>

网址对应urls.py

显示单篇内容有以下几个步骤:

我们先要在urls.py文件中加上对应的网址

在views.py中创建showpost函数

def showpost(request, slug):try:post = Post.objects.get(slug=slug)if post != None:return render(request, 'post.html', locals())except:return redirect('/')

执行结果如图所示

但这里的index.html和post.html有许多部分是重复的,所以下面我们会去改善它

用django搭建个人博客(一)相关推荐

  1. Django搭建简易博客

    Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...

  2. 10分钟利用django搭建一个博客

    以前老是听说ROR开发有多快多块,网上还有朋友为了证明这,专门制作了10分钟利用rails框架搭建一个简易博客的教程,最近学习django框架,觉得django给开发者的便捷也很多,心血来潮来写个10 ...

  3. Django搭建个人博客:用django-notifications实现消息通知

    凭借你勤奋的写作,拜读你文章的用户越来越多,他们的评论也分散在众多的文章之中.作为博主,读者的留言肯定是要都看的:而读者给你留言,自然也希望得到回复. 怎么将未读的留言呈现给正确的用户呢?总不能用户自 ...

  4. django项目转pyc_Python自动化运维系列:Django搭建小博客

    如何使用Django和Python怎么搭建一个小博客呢? 这是一个简单而困难的问题.简单的原因是,只要做过一次,基本上就能做到举一反三: 困难的原因是有没有用心和耐心去完成这个实验. 如果你成功了,那 ...

  5. 新手学习——用django搭建个人博客_day2

    一.模型设计 任何一个产品,最开始应该就是设计数据模型,模型设计好一般就不会轻易去修改它了,但是在此处,我们暂时不考虑用户登录评论这些,只考虑博客展示需要的模型.对应的表应该为以下: 博客:标题 作者 ...

  6. Django搭建个人博客(二)

    更换数据表mysql 上文说到编写好了我们的 model 模块,映射生成数据表,之前我们用的是Django 默认的数据库 sqlite3 ,这里我们更改一下使用 mysql. 我们在 navicat ...

  7. Django搭建简易博客教程(四)-Models

    原文链接: http://www.jianshu.com/p/dbc4193b4f95 Django Model 每一个Django Model都继承自django.db.models.Model 在 ...

  8. Django搭建个人博客:上传头像图片

    到目前为止我们的博客处理的都是文字.现代互联网早就进入了"读图"时代,图片的维护.展示也就相当重要. 上一章中预留了avatar字段,用来保存用户上传的头像,现在我们来实现这个功能 ...

  9. html 两个idv上下居中,Django搭建个人博客:回到顶部浮动按钮、矢量图标、页脚沉底和粘性侧边栏...

    本章集中介绍四个重要的小功能:回到顶部浮动按钮.矢量图标.页脚沉底和粘性侧边栏. 这几个功能与Django基本没啥关系,更多的是前端知识,但是对博客网站都很重要,问的读者也比较多,因此也集中讲一下好了 ...

最新文章

  1. NBT:宏基因组二、三代混合组装软件OPERA-MS
  2. Android性能优化之App应用启动分析与优化
  3. 解决“SCRIPT257: 由于出现错误 80020101 而导致此项操作无法完成。 ”
  4. server sql 数据总行数_sql统计行数的语句
  5. 编程的《九句真言》(ZT)
  6. 分析一个BO上创建的extension field detail
  7. UE4学习-第三人称游戏的AI巡逻
  8. mysql 数据库授权(给某个用户授权某个数据库)
  9. mysql 命令 _Mysql常用命令行大全
  10. 【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用
  11. Javascript iframe交互并兼容各种浏览器的解决方案
  12. springboot2集成hbase2环境搭建
  13. python pip下载安装一半退出_【Python】pip安装numpy安装到一半失败解决办法
  14. 微信小程序弹框种类汇总
  15. ubuntu18.04开机后出现黑屏 最上显示/dev/nvme。。。
  16. 安卓后门工具:backdoor-apk 教程
  17. DiskPart介绍
  18. JSAAS的Activiti会签开发扩展处理
  19. java的动物打一生肖,吉祥的动物是什么生肖 指哪个生肖 打一生肖
  20. 迁移学习---迁移学习基础概念、分类

热门文章

  1. 五步详解小学数学之盈亏问题
  2. 弱人工智能时代我们将何去何从
  3. 具见--逍遥游 庄子南华(南怀瑾老师)
  4. 关于NeteaseCloudMusicApi接口文档
  5. python查看库函数
  6. Python数据处理Tips数据连续变量常用10种处理方法
  7. 程序员之“盲人摸太阳”
  8. 王道考研2019版计算机网络第二章--物理层
  9. C语言求任意范围内的素数
  10. 微信小程序云开发入门教程