基于Flask开发的前后端分离租房项目(六)

十一、Celery的使用详解

11.1celery介绍:

celery是一个功能完备即插即用的任务队列。它使得我们不需要考虑复杂的问题,使用非常简单。

celery适用异步处理问题,当发送邮件、或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,

这样用户不需要等待很久,提高用户体验。 

celery的特点是:

* 简单,易于使用和维护,有丰富的文档。

* 高效,单个celery进程每分钟可以处理数百万个任务。

* 灵活,celery中几乎每个部分都可以自定义扩展。

11.2celery的结构如下图所示:

11.3在项目中使用celery:

11.3.1需要注意的是celery可以在任意一个独立的目录建立worker,所以celery可以实现三端甚至四端开发:

          客户端(client),任务队列端(broker),任务处理端(worker),存放结果端(backend)

11.3.2首先在项目目录下新建一个tasks包来存放celery任务代码,如下所示:

11.3.3config.py是celery的配置项,在我们的项目中主要配置broker和backend的地址(使用redis)

     BROKER_URL = "redis://127.0.0.1:6379/1"

     CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'

11.3.3main.py的作用是创建celery对象:

    from celery import Celery

    from ihome.tasks import config

    # 定义celery对象

    celery_app = Celery("ihome")

    # 引入配置信息

    celery_app.config_from_object(config)

    # 自动搜寻异步任务

    celery_app.autodiscover_tasks(["ihome.tasks.sms"])

11.3.4 sms包是具体的任务代码,包名一般以任务命名,在我们的项目中的任务主要是发送短信验证码:

           from ihome.tasks.main import celery_app

    from ihome.libs.yuntongxun.sms import CCP

    @celery_app.task

    def send_sms(to, datas, temp_id):

    """发送短信的异步任务"""

       ccp = CCP()

       try:

         result = ccp.send_template_sms(to, datas, temp_id)

       except Exception as e:

         result = -2

       return result

11.3.5如何在项目中去使用celery呢?

    from ihome.tasks.sms.tasks import send_sms

    result_obj = send_sms.delay(mobile, [sms_code, int(constants.SMS_CODE_REDIS_EXPIRES/60)], 1)

11.3.6如何启动celery呢?

          如果是在一台电脑上启动celery,则需要开两个命令行,一个正常启动项目:python manage.py runserver

          另一个要进入celery的tasks包所在目录,输入命令:celery -A ihome.tasks.main worker -l info 

          

十二、房屋管理

12.1首先在houses.py中编写获取用户发布的房源信息的后端:

12.2接着编写主页幻灯片展示的房源信息,使用缓存提高效率:

   

12.3接着编写获取房源详情的后端:

  

12.4接着完善上述功能的前端逻辑:

12.4.1首先获取房东发布的房源信息条目页面是myhouse.html:

          这里使用art-template模板:

          

12.4.2然后在myhouse.js中完善js逻辑:

12.4.3然后是首页轮播图片的前端逻辑,在index.html和index.js中完成:

          首先需要在index.html中导入轮播组件:

                    

            

          然后编写js模板:

                    

         然后在index.js中完成js逻辑:

            

12.4.4然后在detail.html和detail.js中编写房屋详情页面的前端逻辑:

          首先在detail.html中定义前端模板显示数据,逻辑跟上面的一样,

          由于要显示的数据太多,这里不再赘述

          在detail.js中完成js逻辑:                

猜你喜欢

转载自blog.csdn.net/qq_40652101/article/details/90294293
今日推荐