0x00 什么是Mezzanine

它是一个基于django的内容管理平台(content management platform),组成简单,可扩展性和定制性强,特别适合小型的个人博客系统。它也提供了类似于wordpress的管理页面、博客发布、图片展示等功能,配置简单,数据库灵活改变。相对于wordpress那样笨重繁多的功能来说,mezzanine显得非常轻巧,但麻雀虽小,五脏俱全,博客系统该有的东西,它都有提供。
官方网站:Mezzanine - The Best Django CMS

0x01 安装依赖环境

接下来我以基于debian发行版的linux系统为例,介绍如何搭建。
首先,确保你安装了python2.7(最好是这个版本),并且已经安装了pip,同时setuptools已经完成了更新。
输入下面的命令完成setuptools的更新:

pip install -U setuptools

接下来,我们安装一些python相关的依赖:

apt-get install python-imaging python-dev
apt-get install libjpeg8 libjpeg8-dev build-dep

如果你用的是centos:

centos:  yum install python-imaging python-dev 

0x02 安装Mezzanine

方式一,直接通过pip安装:

pip install mezzanine

我失败了,所以选择了下面这种方式,去官方的 github clone文件,手动安装:

mkdir mezzanine-src
cd mezzanine-src
git clone https://github.com/stephenmcd/mezzanine.git

接下来,我们进入到目录中,执行安装命令:

python setup.py install

我在安装的时候特别慢,有些库下载直接超时,如果你也出现这种情况,建议可以考虑手动pip安装那些库。

接下来,创建我们的第一个工程:

mezzanine-project yourproject_name
cd yourproject_name
python manage.py createdb --noinput  # 这里用的是默认的SQLite数据库,后面我再说怎么修改

本地把项目跑起来:

python manage.py runserver

这时,你打开浏览器,本地访问 http://127.0.0.1:8000/ 就能看到网站了。注意,别用 localhost,它目前并不在mezzanine允许的HOST列表中,所以会报错。

0x03 修改默认数据库

大家刚刚应该注意到了,我说这个项目默认的数据库是SQLite,这个轻量级数据库对一个博客系统来说完全足够了,但有特殊需求怎么办?我如何换成mysql?

Mezzanine 默认支持4种数据库,postgresql_psycopg2 , mysql , sqlite3 和 oracle 。

我们进入工程目录,我的目录大概是这样的:

接着进入 yourproject_name (我的是myproject),编辑 local_settings.py

这个注释写的很清楚了,我就不做更多的说明了。

修改完以后,重新执行:

python manage.py createdb --noinput

即可重新创建数据库。

0x04 修改默认的主页

这个主页是不是挺low的?我们的博客系统肯定不能用这么low的主页,比如我想要主页打开就是文章的列表,应该怎么办?

依旧进入到刚刚修改数据库时的那个目录,找到并编辑 urls.py 文件,

看到我划线的地方了吧,去掉划直线那句代码的注释,并把最上面的 HOMEPAGE AS STATIC TEMPLATE 对应的url语句注释起来。还没完,它提示你了,别忘了引入视图函数
在该文件(urls.py)的开头,加上 import mezzanine.blog.views ,重启项目,你就会发现你的首页变成了 Blog 。

0x05 修改配置信息

大家肯定注意到了,左上角是 Mezzanine ,我想让它显示 MyBlog ,怎么办?
还有,我想要开启一些功能,但是admin管理页面无法做到,怎么办?

肯定不会让你改源代码的,访问:http://mezzanine.jupo.org/docs/configuration.html#default-settings

比如第一个问题,就可以通过配置这个选项来解决:

local_settings.py 文件里随便找个地方,加上:

重启服务,你就能看到变化了。
其它的配置也是类似。

0x06 部署

官方其实提供了部署方式,大家只用四级英语的水平看看文档也就明白了。
我这里提供自己的简易部署方式,基于uwsgi + nginx 完成的。因为我上一篇博客也完成了类似的部署,大家可以对照看一下:centos+flask+uwsgi+nginx+supervisor部署小结

首先你要正确安装 uwsgi 和 nginx ,这里我就不细说了,网上有很多。重点是安装完 uwsgi 以后,启动一下看有没有报错(错误会用三个 !!!括起来)。

然后,我们开始配置:

第一步,在第二层工程目录下,也就是和local_settings.py 一个目录下,有个 wsgi.py ,把它拷出来,放到上一层目录,即和manage.py 一个目录下。

第二步,在 manage.py 所在目录下,新建一个 config.ini 文件,内容如下:

[uwsgi]socket = 127.0.0.1:8001
chdir = /usr/apps/python/myblog/    //改成你的项目根目录
processes = 2
threads = 4
module = wsgi      //这里和 wsgi.py 对应

第三步,nginx 配置如下,配置文件里其余的地方不用改

server {listen   80;server_name www.you.com;access_log /var/log/myblog_access.log;error_log /var/log/myblog_error.log;location / {include        uwsgi_params;uwsgi_pass     127.0.0.1:8001;}location /static/ {alias  /usr/apps/python/myblog/static/;}
}

大家观察nginx的配置文件应该注意到了,静态资源文件夹 static 下的文件是不全的,访问时会报404,怎么办?
一种解决方案是把 Mezzanine 框架中的static文件直接拷过来,不过我发现了更好的解决办法,直接执行:

python manage.py collectstatic

第四步,开启服务:

uwsgi config.ini
nginx -s start

观察输出信息,都没报错的话,应该就搞定了。

0x07 小结

忙活了大半天,期间出了一个令我怀疑人生的BUG,无论如何配置nginx,静态资源都是404,后来才发现,不知道什么时候我设置了缓存时间30天,而且还是我在错误配置的时候,所以后面就悲剧了。

当时我就在想,之前写过一篇博客,关于浏览器的缓存头部,还说什么如果黑客给你设置一个极长的缓存时间,那你将活在梦中。

没想到自己竟然亲身体验了一把,缓存真是个好东西。

基于django的轻量级CMS Mezzanine搭建笔记相关推荐

  1. [2018-03-06] 基于Django的轻量级CMS Mezzanine搭建笔记

    [2018-03-06] 基于Django的轻量级CMS Mezzanine搭建笔记 一丶什么是Mezzanine? 它是基于django的内容管理平台(),组成简单,可扩展性和定制性强,特别是个小型 ...

  2. 基于django的微信小程序搭建

    因为疫情封校被迫关起来,终于有时间整理之前的课程设计. 基于django的微信小程序搭建(不定期记录踩坑日常) 开发工具 (一)pycharm (二)mysql (三)微信开发者工具 (四)IP穿透 ...

  3. 国产开源基于 Java 的轻量级 CMS 解决方案 天梯

    天梯(tianti) Java 轻量级的 CMS 解决方案-天梯.天梯是一个用 Java 相关技术搭建的后台 CMS 解决方案,用户可以结合自身业务进行相应扩展,同时提供了针对 dao.service ...

  4. 基于Django框架的sysinfo项目搭建---系统信息监控(主机名,内核版本等)

    目录 主机信息监控 项目搭建 基础框架构建 首页系统信息展示完善 主机信息监控 项目搭建 详情见前篇博客 创建子应用host并且设置本地化 数据库表的创建和超级用户的创建 git管理项目(requir ...

  5. 基于Django channels 与 YOLO v8 搭建 <实时跟踪与统计系统>

    文章大纲 0. 简介 系统Demo 前序文章 1. 系统架构:基于分层结构.组件解耦的<实时跟踪与统计系统> 2. YOLOv8 3. 目标跟踪与计数:SORT ( Simple Onli ...

  6. dapi 基于Django的轻量级接口测试平台一

    QQ群:529063263 GitHub:https://github.com/yjlch1016/dapi 一.设计思想: 模拟性能测试工具JMeter的思路, 实现接口测试的Web化, 计划有产品 ...

  7. 基于Django的商城开发项目笔记(一)

    基于Django的商城开发项目笔记(一) 一.环境搭建 1.安装Python:去Python官网下载最新版本Python进行安装,安装时记得勾选将Python加入系统环境变量 2.在命令行输入pip ...

  8. 使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割)学习笔记

    使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割)学习笔记 https://www.bilibili.com/video/BV1rq4y1w7xM?spm_id_from=33 ...

  9. django和mezzanine搭建博客小站1

    django和mezzanine搭建博客小站1 用Django+mezzanine搭建个人博客非常简单,基本上安装和简单的配置就可以完成. 搭建环境 安装Python编译器 sudo apt-get ...

最新文章

  1. int long java_java long int的区别
  2. 谷歌NIPS论文Transformer模型解读:只要Attention就够了
  3. 掌握这6大知识点 做光伏会容易很多
  4. vuex-along解决vuex中存储的数据在页面刷新之后失去的问题
  5. 数据结构与算法(2)——栈和队列
  6. Ubuntu 16.04安装unrar解压RAR文件
  7. python join函数用法-Python join()函数
  8. mysql md5版本校验_通过MD5校验和验证MySQL软件包的完整性
  9. C语言试题五十七之假定输入的字符串中只包含字母和*号。请编写函数function,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。
  10. 进程之间通信 共享内存
  11. vue使用Echart跟随窗口大小改变而重新绘制时出现读取窗口大小不及时的问题
  12. wepy公共样式_小程序开发wepy框架类vue的开发方式
  13. mac上配置java jdk环境
  14. 《算法导论》第三版第6章 堆排序 练习思考题 个人答案
  15. Wireshark安装提示缺少KB3118401和KB2999226文件
  16. 计算机键盘灯光怎么关闭,如何关闭机械键盘的灯[图形介绍]
  17. ios Reading from private effective user settings
  18. 蚂蚁篇无聊吗?看看猎人骨灰粉丝绝妙分析(3)
  19. Oracle的软解析(soft prase)和硬解析(hard prase)及绑定变量
  20. 计算机哪里找产品密钥,计算机windows的密钥在哪里可以找到?

热门文章

  1. ORACLE-工作常用配置及命令记录-导入sql、unl文件、查看数据库状态、修改字符集等...
  2. 2021免费大容量OneDrive + office 365桌面版 (a1 a1p)
  3. JavaScript中的alert
  4. 设计模式(工厂模式)
  5. n*m的格子中正方形个数和长方形个数
  6. 《痞子衡嵌入式半月刊》 第 56 期
  7. ie浏览器的html在哪里,windows10的ie在哪里?ie浏览器找不到怎么办
  8. 利用八爪鱼爬取关键词搜索的微博数据
  9. python需要cpu还是显卡问题_买新电脑是cpu重要还是显卡重要?该怎么选择?
  10. 服务器远程注销,命令行注销windows远程登录账户