RabbitMQ实现异步任务---发邮件

本文介绍了如何在Django项目中利用RabbitMQ实现异步任务,特别是通过QQ邮箱发送邮件的过程。内容包括生产者发送邮件的代码、视图函数、模型、模板、settings.py配置及消费者代码的编写,强调了在Celery/RabbitMQ消费端不能直接调用Django ORM等环境,需特别处理。
摘要由CSDN通过智能技术生成
一.通过QQ邮箱发邮件

本案例是基于django框架的结合rabbitmq实现异步发邮件,新建一个django项目并进行对应的配置,然后编写对应mvc代码,直接上代码

1.1 生产者发送邮件
import pika


class RabbitMQSendMail:

    def __init__(self, email):
        self.host = '192.168.xx.xxx'
        self.port = 5672
        self.user = 'xxx'
        self.password = 'xxx'
        self.rmq_obj = None
        self.param_config = None
        self.channel = None
        self.email = email

    def connection(self):
        self.param_config = pika.ConnectionParameters(
            virtual_host='mymTest',
            host=self.host,
            port=self.port,
            credentials=pika.PlainCredentials(self.user, self.password)
        )
        self.rmq_obj = pika.BlockingConnection(self.param_config)

    def send(self):
        self.connection()
        self.channel = self.rmq_obj.channel()
        # self.channel.exchange_declare(exchange='mym', exchange_type='direct', durable=True)
        self.channel.basic_publish(
            exchange='businessExchange',  # exchange为空表示简单模式
            routing_key='needKey',
            body=self.email,
            properties=pika.BasicProperties(delivery_mode=2, )
        )
        print('发送用户邮箱{}到MQ queue成功'.format(self.email))
        self.rmq_obj.close()
1.2 视图函数,模型,模板部分代码

model.py部分代码

from django.db import models
from django.forms import ModelForm
import datetime
# Create your models here.


class UserInfo(models.Model):
    username = models.CharField(max_length=10, verbose_name='姓名')
    password = models.CharField(max_length=20, verbose_name='邮箱')
    create_time = models.DateField(verbose_name="时间", default=datetime.datetime.now)


class UserModelForm(ModelForm):

    class Meta:
        model = UserInfo
        fields = "__all__"

view.py视图函数部分代码

from django.shortcuts import render
from .models import UserModelForm
from django.http import JsonResponse
from Controller.mq_send_email import RabbitMQSendMail
# Create your views here.


def register_email(request):
    if request.method == "GET":
        # 要写个form类
        form = UserModelForm()
        return render(request, 'index.html', {
   'form': form})

    if request.method == "POST":
        email = request.POST.get('password')
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值