分类目录归档:猿来如此

DjangoBlog部署教程


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

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

准备工作

升级系统

首先需要升级系统到最新版,终端下执行:

sudo apt update
sudo apt upgrade -y

待完成更新之后,建议重新

Read more

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


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

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

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,生产者,创建消息,然后发布到rabb

Read more

深入理解Python中的asyncio


asyncio介绍

熟悉c#的同学可能知道,在c#中可以很方便的使用asyncawait来实现异步编程,那么在python中应该怎么做呢,其实python也支持异步编程,一般使用asyncio这个库,下面介绍下什么是asyncio:

asyncio 是用来编写 并发 代码的库,使用async/await语法。 asyncio 被用作多个提供高性能Python异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。 asyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择。

asyncio中的基本概念

可以看见,使用asyncio库我们也可以在python代

Read more

使用Django模版生成树状结构


我们经常会有这样的需求,比如评论功能,每个评论都有可能会有自己的子评论,如果在界面只展示成一列的话非常不美观,也不能体现出他们的层级关系。那么我们今天就来看看如何使用Django的模版来生成树状结构,以本站为例,效果如下图所示:

那么我们要怎么实现呢?首先先看看评论实体的定义,如下所示:

class Comment(models.Model):
    body = models.TextField('正文', max_length=300)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_na

Read more