zoukankan      html  css  js  c++  java
  • win10+celery4.x以上+redis的天坑

    1.用redis作为中间的话,有密码必须加上

    app = Celery('celery_tasks.tasks', broker='redis://:123456@127.0.0.1:6379/5')

    2.win配celery4.X以上必须pip一个eventlet

    3.启动异步任务的时候需要

    celery -A celery_tasks.tasks worker -l info -P eventlet

    4.在Django中的celery_tasks下的tasks必须加入初始化

    import os
    import django
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyfresh1.settings")
    django.setup()
    不然会出现迭代次数超限制的bug

    5.电脑的TCP/IP出问题的情况下最好是使用手机热点,不然STMP服务器方会认为你的名字过于简单,不让过

    6.django的版本最好是1.11.1 ,不然报错不断

    tasks.py代码如下

    # 使用celery
    from django.core.mail import send_mail
    from django.conf import settings
    from celery import Celery
    import time

    import os
    import django
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyfresh1.settings")
    django.setup()

    # 创建一个Celery类的实例对象
    app = Celery('celery_tasks.tasks', broker='redis://:123456@127.0.0.1:6379/5')
    # 启动的代码celery -A celery_tasks.tasks worker -l info -P eventlet



    # 定义任务函数
    @app.task
    def send_register_active_email(to_email, username, token):
    '''发送激活邮件'''
    # 组织邮件信息
    subject = '天天生鲜欢迎信息'
    message = ''
    sender = settings.EMAIL_FROM
    receiver = [to_email]
    html_message = '<h1>%s, 欢迎您成为天天生鲜注册会员</h1>请点击下面链接激活您的账户<br/><a href="http://127.0.0.1:8000/user/active/%s">http://127.0.0.1:8000/user/active/%s</a>' % (username, token, token)

    send_mail(subject, message, sender, receiver, html_message=html_message)
    time.sleep(5)

    user.views中的类模型如下:

    class RegisterView(View):
    '''注册'''
    def get(self, request):
    '''显示注册页面'''
    return render(request, 'register.html')

    def post(self, request):
    '''进行注册处理'''
    # 接收数据
    username = request.POST.get('user_name')
    password = request.POST.get('pwd')
    email = request.POST.get('email')
    allow = request.POST.get('allow')

    # 进行数据校验
    if not all([username, password, email]):
    # 数据不完整
    return render(request, 'register.html', {'errmsg': '数据不完整'})

    # 校验邮箱
    if not re.match(r'^[a-z0-9][w.-]*@[a-z0-9-]+(.[a-z]{2,5}){1,2}$', email):
    return render(request, 'register.html', {'errmsg': '邮箱格式不正确'})

    if allow != 'on':
    return render(request, 'register.html', {'errmsg': '请同意协议'})

    # 校验用户名是否重复
    try:
    user = User.objects.get(username=username)
    except User.DoesNotExist:
    # 用户名不存在
    user = None

    if user:
    # 用户名已存在
    return render(request, 'register.html', {'errmsg': '用户名已存在'})

    # 进行业务处理: 进行用户注册
    user = User.objects.create_user(username, email, password)
    user.is_active = 0
    user.save()

    # 发送激活邮件,包含激活链接: http://127.0.0.1:8000/user/active/3
    # 激活链接中需要包含用户的身份信息, 并且要把身份信息进行加密

    # 加密用户的身份信息,生成激活token
    serializer = Serializer(settings.SECRET_KEY, 3600)
    info = {'confirm':user.id}
    token = serializer.dumps(info) # bytes
    token = token.decode()

    # 发邮件
    send_register_active_email.delay(email, username, token)

    # 返回应答, 跳转到首页
    return redirect(reverse('goods:index'))

  • 相关阅读:
    http协议之状态码
    HTTP协议入门基础
    CI框架使用(一)
    memcache常见现象(一)雪崩现象
    memcached分布式一致性哈希算法
    编译php扩展
    memcached--delete--replace--set--get--incr--decr--stats
    memcached--add使用
    php5.3之命名空间
    MySQL优化(一)
  • 原文地址:https://www.cnblogs.com/SmartCat994/p/12306972.html
Copyright © 2011-2022 走看看