【置顶】DjangoBlog部署教程


本篇文章将会手把手教你如何部署DjangoBlog项目,首先介绍下我这里的基本环境,请大家仔细阅读此部分,下面的教程都会使用这些约定来介绍:

  • 系统是ubuntu 18.04 LTS
  • 假设你的域名是www.djangoblog.com
  • python虚拟环境目录在 ~/python/env
  • djangoblog源码位置在 ~/python/djangoblog
  • 登入用户server
  • 编辑器使用vim,你可以使用你喜欢的编辑器。

另外请注意,尽量不要使用root用户来部署,如果要使用root用户的话,需要使collectedstatic目录所有用户都有读权限。

准备工作

升级系统

...

Read more

DjangoBlog插件开发指南(一):深入理解插件核心机制


在设计 DjangoBlog 之初,可扩展性是我重点考虑的特性之一。我希望能有一个优雅的机制,让开发者可以在不修改项目核心代码的情况下,自由地为其增添功能。最终,我借鉴了 WordPress 成熟的钩子(Hooks)系统,构建了 DjangoBlog 的插件体系。

这套体系的核心思想是“事件驱动”和“关注点分离”。系统在执行流程的关键节点触发“钩子(事件)”,而插件则可以“监听”这些钩子,并将自己的逻辑挂载上去。

本系列文章将带你全面了解 DjangoBlog 的插件开发。今天,我们先从分析一个内置的简单插件——文章浏览次数统计(ViewCountPlugin)——开始,来理解插件系统的...

Read more

使用github action来自动构建你的项目


github action是一套自动构建的工具,类似于Travis CI,但是由于是官方支持,所以可玩性非常高,也支持很多定制,下面就基于本博客项目的自动构建docker镜像来给大家介绍下。

基本介绍

概念介绍

github action有一些基本的概念,大家看看下面的介绍就可以理解了:
- workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
- job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
- step(步骤):每个 job 由多个 step 构成,一步步完成。
- action ...

Read more

RabbitMQ学习笔记之(三) 发送方确认机制


上篇文章中,我们介绍了消费端的确认,那么在生产者有没有确认机制呢?答案是有的。 参考我们发送消息的代码段:

channel.basic_publish(exchange='testexchange', routing_key='hello', body='Hello World!{}'.format(i),
                          mandatory=True,
                          properties=pika.BasicProperties(
                              delivery_...

Read more

RabbitMQ学习笔记之(二) 消费端的确认与拒绝


首先,我们先看下这样的业务场景,在消息发出后,Consumer接收到了生产者所发出的消息,但在Consumer突然出错崩溃,或者异常退出了,但是生产者消息已经发出来了,那么这个消息可能就会丢失,为了解决这样的问题,RabbitMQ引入了ack机制。 消费者在订阅队列时,可以指定autoAck参数,当autoAck等于false时,RabbitMQ会等待消费者显式地回复确认信号后才从内存(或者磁盘)中移去消息(实质上是先打上删除标记,之后再删除)。当autoAck等于true时,RabbitMQ会⾃自动把发送出去的消息置为确认, 然后从内存(或者磁盘)中删除,而不管消费者是否真正地消费到...

Read more

RabbitMQ学习笔记之(一) 基本概念介绍


基本介绍

RabbitMQ, 是一个使用erlang编写的AMQP(高级消息队列协议)的服务实现. 简单来说, 就是一个功能强大的消息队列服务.流程上来说,是发消息者(producer)把消息放到队列(queue)中去,然后收消息者(consumer)从队列中取出消息. RabbitMQ在这个基本概念之上, 多做了一层抽象, 在发消息者队列之间, 加入了交换器 (Exchange). 这样发消息者队列就没有直接联系, 转而变成发消息者把消息给交换器, 交换器根据调度策略再把消息再给队列
rabbitmq中几个比价重要的概念如下: - Producer,生产者,创建消息,然后发...

Read more