Python采用Django开发自己的博客系统


Posted in Python onSeptember 29, 2020

好久之前就想做一下自己的博客系统了,但是在网上查了查好像是需要会一些Node.js的相关知识,而且还要安装辣么多的库什么的,就不想碰了。但是我遇到了Django这么一款神器,没想到我的博客系统就这么建立起来了。虽然是最基础的类型。但是也算是成功了,这篇博客比较适合对Django有了一定了解的童鞋,如果是新手的话,建议先看一下django的基础知识点再来做实验,这样效率更高!
好了,话不多说,开始吧。

搭建框架

•创建项目及应用

搭建框架的意思,就是安装Django以及做好相关的配置。因为我是在PyCharm下进行创建的,所以工具代替我做了很多事情。但是底层也无非是下面几行代码:

创建一个Django项目,名为MyDjango

django-admin startproject MyDjango

创建一个Django应用,名为MyBlog。这里应该注意的是应用隶属于项目的子集。通俗的来说应用文件夹是作为项目文件夹的子集而存在的。

django-admin startapp MyBlog

•创建数据库及底层模型

我这里简单的以默认的sqlite3数据库作为了我的博客系统的数据库了,当然你也可以自己制定需要的数据库,一般来说sqlite3都能满足需求。在setting.py里面可以这样进行设置。

# Database


# https://docs.djangoproject.com/en/1.9/ref/settings/#databases


DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.sqlite3',
 'NAME': 'MyBlog.db',
 'USER':'',
 'PASSWORD':'',
 'HOST':'',
 'PORT':'',
 }
}

建好了数据库,接下来就是模型的创建了。因为我创建的是博客系统,所以必不可少的要发布关于博客的内容,于是需要有标题,内容,发布时间这些属性,详情如models.py文件

from __future__ import unicode_literals
from django.contrib import admin
from django.db import models


# create the blog model

class BlogPost(models.Model):
 title = models.CharField(max_length=150)
 body = models.TextField()
 timestamp = models.DateTimeField()

 def __unicode__(self):
 return self.title

由于需要管理员对发布的博客进行管理,所以我们要对发布的博客设置一个管理模型

# set the admin page for BlogPost

class BlogPostAdmin(admin.ModelAdmin):
 list_display = ('title','timestamp')


# register the model (especially important

admin.site.register(BlogPost)

所以整个models.py文件里面就应该是这样的了。

from __future__ import unicode_literals
from django.contrib import admin
from django.db import models


# create the blog model

class BlogPost(models.Model):
 title = models.CharField(max_length=150)
 body = models.TextField()
 timestamp = models.DateTimeField()

 def __unicode__(self):
 return self.title



# set the admin page for BlogPost

class BlogPostAdmin(admin.ModelAdmin):
 list_display = ('title','timestamp')


# register the model (especially important

admin.site.register(BlogPost)

接下来,就是同步一下数据库和模型之间的联系了。如果不做同步操作的话,就很有可能报出
django.db.utils.OperationalError: unable to open database file
而且这里也是很重要的一个环节。那就是关于Django版本的问题,我之前就在这上面栽过一次。

 django < 1.7 时:
    python manage.py syncdb

django > 1.7 时:
    python manage.py makemigrations
    python manage.py migrate

完善MVC模式

其实前面的步骤而言,我们已经是完成了model这个模块的功能了,接下来就是做好视图的映射就可以了。
 •V(views.py)视图层

我们需要在这个文件里面定义好底层的逻辑处理。这决定着要返回给用户一个什么样的response。至于采用哪种渲染方式,大家就不要在这上面浪费不必要的时间了。render_to_response就足够了。

# create the view for blog show

def myBlogs(request):
 blog_list = BlogPost.objects.all()
 return render_to_response('BlogTemplate.html',{'blog_list':blog_list})

这里面用到了模板文件,还传给了模板一个列表类型的参数,这些我们待会再叙。

 •C(controller)urls.py

可以说这个文件将Django各部分松耦合的功能衔接到了一起,完成了整个项目的运转的非核心的核心了,是关于如何映射的逻辑的处理。接下来我们就将我们的博客系统设置一下吧。

from django.conf.urls import url
from django.contrib import admin
from MyBlog.views import *

urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^myBlogs/$',myBlogs),
]

关于如何映射,我的上一篇文章里面有详细的介绍,PyCharm开发Django基础配置。有兴趣的可以参考一下。好了,这次我们在完成了admin管理员用户的设置之后,就可以运行我们的程序了。

python manage.py runserver 

出现了:

Performing system checks...

System check identified no issues (0 silenced).
June 05, 2016 - 11:39:27
Django version 1.9.6, using settings 'MyDjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

这时就可以在浏览器中输入
http://127.0.0.1:8000/admin,登陆成功后可以点击下面的Blog Posts编辑博文了。然后点击SAVE 按钮,就可以发布我们的博客。接下来在浏览器中输入
http://127.0.0.1:8000/myBlogs/ 访问我们的博客系统了。

这样就实现了我们的博客系统的建立了。但是由于没有添加样式,所以看起来不是很好看,所以我们要添加以下模板的样式。

模板配置

接着刚才的继续,关于模板,这里面可谓是有着很深的设计哲学。了解过的大家肯定都会有感触,我就不多说了。
接下来就为我们的博客系统设置一下模板吧。
 •父模板base.html
按照django对模板的继承设置,我们可以制作一个父模板。如下:

<!DOCTYPE html>
<html lang="zh">
<head>
 <meta charset="UTF-8">
 <title>标题</title>
</head>
<style type="text/css">
 body{
 color: #efd;
 background: #BBBBBB;
 padding: 12px 5em;
 margin:7px;
 }
 h1{
 padding: 2em;
 background: #675;
 }
 h2{
 color: #85F2F2;
 border-top: 1px dotted #fff;
 margin-top:2em;
 }
 p{
 margin:1em 0;
 }
</style>
<body>
<h1>XX博文</h1>
<h3>小生不才,但求简约!</h3>
{% block content %}
{% endblock %}
</body>
</html>

•然后就是子模板BlogTemplate.html

{% extends "base.html" %}
 {% block content %}
 {% for post in blog_list %}
 <h2>{{ post.title }}</h2>
 <p>{{ post.timestamp }}</p>
 <p>{{ post.body }}</p>
 {% endfor %}
 {% endblock %}

需要注意的就是模板中的模板标签以及模板变量都应该与views.py文件对应的函数中的字典变量相一致,否则django虽然不会报错,但也是不会显示数据的。 

接下来刷新一下,输入http://127.0.0.1:8000/admin/

点击add按钮,开始添加你的博文吧。

Python采用Django开发自己的博客系统

Python采用Django开发自己的博客系统

然后在浏览器中输入
http://127.0.0.1:8000/myBlogs/.你就可以看到你的博客列表了,如图

Python采用Django开发自己的博客系统

大家可能已经看到了,问题就出在点击标题没有进入到相关的详情页面,那是因为还没有添加这个功能呢。(^__^) 嘻嘻……

总结

今天一起做了一个简单的博客系统,虽然外观看起来并不是很好看,但是内容什么的差不多就是这样了。还有很多的地方需要完善。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现目录树生成示例
Mar 28 Python
python实现下载文件的三种方法
Feb 09 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
python针对excel的操作技巧
Mar 13 Python
使用Python写一个小游戏
Apr 02 Python
python写入已存在的excel数据实例
May 03 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
Jun 11 Python
python制作图片缩略图
Apr 30 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
Sep 20 Python
Python实现语音识别和语音合成功能
Sep 20 Python
python分布式计算dispy的使用详解
Dec 22 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
浅析Python中元祖、列表和字典的区别
Aug 17 #Python
Python+django实现简单的文件上传
Aug 17 #Python
Python Django使用forms来实现评论功能
Aug 17 #Python
小小聊天室Python代码实现
Aug 17 #Python
python如何在终端里面显示一张图片
Aug 17 #Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 #Python
Python入门教程之运算符与控制流
Aug 17 #Python
You might like
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
js简易版购物车功能
2017/06/17 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
2015年小学语文教师工作总结
2015/10/23 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
Java使用jmeter进行压力测试
2021/07/09 Java/Android