djangocelery异步发邮件(代码片段)

ivy-blogs ivy-blogs     2022-12-17     267

关键词:

django、celery异步发邮件


 

  • django自带的send_mail发邮件功能执行发邮件功能会因为网络的原因造成花费的时间过长,为了解决这个问题,可以用celery + redis代替
  • 安装包:
    • pip install celery
    • pip install redis
  • 在django的根目录下新建celery_tasks文件夹,在该文件夹下新建tasks.py:
    •  1 from celery import Celery
       2 from django.conf import settings
       3 from django.core.mail import send_mail
       4 
       5 app = Celery(celery_tasks.tasks, broker=redis://127.0.0.1:6379/8)
       6 
       7 
       8 @app.task
       9 def send_register_active_email(email, username, token):
      10     subject = 测试
      11     message = ""
      12     from_email = settings.EMAIL_FROM
      13     recipient_list = [email]
      14     html_message = <h1>欢迎来到测试</h1>请点击下面链接激活<br><a href="http://http://127.0.0.1:8000/user/active?token=">点击此处激活</a>.format(
      15         username, token)
      16     send_mail(subject, message, from_email, recipient_list, html_message=html_message)

    • 调用该方法:
    •  1 class Register(View):
       2     def get(self, request):
       3         return render(request, user/register.html)
       4 
       5     def post(self, request):
       6         username = request.POST.get(username, ‘‘)
       7         password = request.POST.get(password, ‘‘)
       8         email = request.POST.get(email, ‘‘)
       9 
      10         # 校验用户名是否重复
      11         try:
      12             user = User.objects.get(username=username)
      13         except User.DoesNotExist:
      14             user = None
      15 
      16         if user:
      17             data = errmsg: 用户名已存在
      18             return JsonResponse(data)
      19         # try:
      20         #     user = User.objects.ger(email=email)
      21         # except User.DoesNotExist:
      22         #     user = None
      23         # if user:
      24         #     data = ‘errmsg‘: ‘邮箱已被注册‘
      25         #     return JsonResponse(data)
      26         user = User.objects.create_user(username=username, password=password, email=email)
      27         user.is_active = 0
      28         user.save()
      29 
      30         info = user_id: user.id
      31         serializer = Serializer(settings.SECRET_KEY, 3600 * 2)
      32         token = serializer.dumps(info).decode()
      33 
      34         # 发邮件
      35         send_register_active_email.delay(email, username, token)
      36         return redirect(reverse(user:login))

       

    • worker端配置:
      • 将django项目文件复制到另一个文件夹
      • 修改tasks.py文件,设置初始化
      •  1 from celery import Celery
         2 from django.conf import settings
         3 from django.core.mail import send_mail
         4 import os
         5 import django
         6 
         7 os.environ.setdefault(DJANGO_SETTINGS_MODULE, dream.settings)
         8 django.setup()
         9 
        10 app = Celery(celery_tasks.tasks, broker=redis://127.0.0.1:6379/8)
        11 
        12 
        13 @app.task
        14 def send_register_active_email(email, username, token):
        15     subject = 测试
        16     message = ""
        17     from_email = settings.EMAIL_FROM
        18     recipient_list = [email]
        19     html_message = <h1>欢迎来到测试</h1>请点击下面链接激活<br><a href="http://127.0.0.1:8000/user/active?token=">点击此处激活</a>.format(
        20         username, token)
        21     send_mail(subject, message, from_email, recipient_list, html_message=html_message)
      • worker端监听
      • 进入 worker端的代码的celery_tasks目录下:
        • celery -A tasks worker -l info
        • win10下可能报错:
          • pip install eventlet
          • celery -A tasks worker -l info -P eventlet
      • 当django启动调用send_mail的时候就会将发邮件的任务交给celery执行

djangocelery(代码片段)

1.安装:pipinstallcelerycelery-with-redisdjango-celery2.用途 为了提升用户体验,使用celery可以异步执行耗时或者定时的操作,views可以先返回view执行结果3.操作原理:任务task:就是一个Python函数队列queue:将需要执行的任务加入到队列... 查看详情

celery异步发送邮件(代码片段)

...是单纯的那样发邮件是有非常大的问题的,这就需要celery异步发送来解决 首先我们来看一下邮件发送的过程:Django网站先发送到smtp服务器smtp服务器再把邮件发送到目的邮箱这里有两个不确定时间:Django网站----->smtp服务器... 查看详情

接口中的简单异步async(代码片段)

...件提醒前提接口流程必须走完有正确返回项目中没有其他异步框架的时候可以使用下边方式做个简单的异步1.写好异步装饰器,2.将需要延迟的操作写到函数中将装饰器放到函数头顶3.正常走接口流程代码不会堵塞4.不说原理了(感... 查看详情

php发邮件(代码片段)

查看详情

powershell发邮件(代码片段)

查看详情

php发邮件(代码片段)

查看详情

php发邮件(代码片段)

查看详情

markdown发邮件(代码片段)

查看详情

csharp发邮件(代码片段)

查看详情

php发邮件(代码片段)

查看详情

csharp发邮件(代码片段)

查看详情

php发邮件(代码片段)

查看详情

csharp发邮件发送电子邮件(代码片段)

查看详情

java发电子邮件(代码片段)

查看详情

golang发邮件给我(代码片段)

查看详情

golang发邮件给我(代码片段)

查看详情

java发电子邮件(代码片段)

查看详情

python发电子邮件(代码片段)

查看详情