installation
pip install celery == 4.2.0 # celery4.x support django1.11 later tried several versions to 4.2.0 can be sent successfully
1. Create a new project directory celery package celery_tasks
tasks.py in
from django.conf Import Settings from the django.core.mail Import the send_mail from celery Import Celery # Import celery packet # Create a class instance object Celery # Celery (name (generally written package name), intermediaries Broke) App = Celery ( ' celery_tasks .tasks ' , Broker = ' Redis: //192.168.199.130: 6379/2 ' ) # 2 uses the second database # define task function @ app.task # decorative essential DEF send_register_active_email (to_email, username, token): # '' 'send activation email' '' # Organize mail message # Send Mail Subject = ' daily fresh welcome message ' # Message Subject # Message Body # Note: Here is the html tag will not be parsed as a string output # the Message = '<h1> S% , you are welcome to become registered members every day, fresh </ h1> click on the following link to activate your account: <br/> <a href="http://192.168.199.130:8000/user/active/%s"> http : //192.168.199.130: 8000 / User / Active / S </a>% '% (username, token, token) Message = ' ' sENDER = settings.EMAIL_FROM # sender Receiver = [to_email] # recipient list html_message = '<h1>% s, welcome you to become registered members every day, fresh </ h1> click on the following link to activate your account <br/> <a href = "http://192.168.199.130:8000/user/active/% S "> http://192.168.199.130:8000/user/active/%s </a> ' % ( username, token, token) Print (html_message) # the send_mail (message subject, message body, sender, close wHO iS list, html_message = HTML formatted content) # send_mail (Subject, the Message, SENDER, Receiver) send_mail (Subject, the Message, SENDER, Receiver, html_message = html_message)
2. Import function tasks package in view on the line
from celery_tasks.tasks Import send_register_active_email # method of introducing the celery email # Send Mail # Delay (recipient, user name, token) send_register_active_email.delay (In Email, username, token) # the task into the queue
3. Start redis
Celery command execution
celery -A celery_tasks.tasks worker -l info
An error
python@ubuntu:~/bj19/ttsx/dailyfresh$ celery -A celery_tasks.tasks worker -l info Traceback (most recent call last): File "/usr/local/bin/celery", line 11, in <module> sys.exit(main()) File "/usr/local/lib/python3.5/dist-packages/celery/__main__.py", line 16, in main _main() File "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py", line 322, in main cmd.execute_from_commandline(argv) File "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py", line 496, in execute_from_commandline super(CeleryCommand, self).execute_from_commandline(argv))) File "/usr/local/lib/python3.5/dist-packages/celery/bin/base.py", line 298, in execute_from_commandline return self.handle_argv(self.prog_name, argv[1:]) File "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py", line 488, in handle_argv return self.execute(command, argv) File "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py", line 420, in execute ).run_from_argv(self.prog_name, argv[1:], command=argv[0]) File "/usr/local/lib/python3.5/dist-packages/celery/bin/worker.py", line 223, in run_from_argv return self(*args, **options) File "/usr/local/lib/python3.5/dist-packages/celery/bin/base.py", line 252, in __call__ ret = self.run(*args, **kwargs) File "/usr/local/lib/python3.5/dist-packages/celery/bin/worker.py", line 257, in run **kwargs) File "/usr/local/lib/python3.5/dist-packages/celery/worker/worker.py", line 101, in __init__ self.setup_instance(**self.prepare_args(**kwargs)) File "/usr/local/lib/python3.5/dist-packages/celery/worker/worker.py", line 124, in setup_instance self.should_use_eventloop() if use_eventloop is None File "/usr/local/lib/python3.5/dist-packages/celery/worker/worker.py", line 243, in should_use_eventloop self._conninfo.transport.implements.asynchronous and File "/usr/local/lib/python3.5/dist-packages/kombu/connection.py", line 871, in transport self._transport = self.create_transport() File "/usr/local/lib/python3.5/dist-packages/kombu/connection.py", line 598, in create_transport return self.get_transport_cls()(client=self) File "/usr/local/lib/python3.5/dist-packages/kombu/transport/redis.py", line 1039, in __init__ raise ImportError('Missing redis library (pip install redis)') ImportError: Missing redis library (pip install redis)
This is because the pip did not install redis
Installation Components redis
pip install -U "celery[redis]"
Command again knock on it
Continue error when sending mail
[2019-09-25 17:41:28,074: INFO/MainProcess] Received task: celery_tasks.tasks.send_register_active_email[58be8ac2-4deb-4ca1-809b-6a88e9a2fc9f] [2019-09-25 17:41:28,085: ERROR/ForkPoolWorker-2] Task celery_tasks.tasks.send_register_active_email[58be8ac2-4deb-4ca1-809b-6a88e9a2fc9f] raised unexpected: ImproperlyConfigured('Requested setting EMAIL_FROM, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.',) Traceback (most recent call last): File "/home/python/.virtualenvs/bj19/lib/python3.5/site-packages/celery/app/trace.py", line 382, in trace_task R = retval = fun(*args, **kwargs) File "/home/python/.virtualenvs/bj19/lib/python3.5/site-packages/celery/app/trace.py", line 641, in __protected_call__ return self.run(*args, **kwargs) File "/home/python/bj19/ttsx/dailyfresh/celery_tasks/tasks.py", line 24, in send_register_active_email sender = settings.EMAIL_FROM # 发件人 File "/home/python/.virtualenvs/bj19/lib/python3.5/site-packages/django/conf/__init__.py", line 48, in __getattr__ self._setup(name) File "/home/python/.virtualenvs/bj19/lib/python3.5/site-packages/django/conf/__init__.py", line 42, in _setup % (desc, ENVIRONMENT_VARIABLE)) django.core.exceptions.ImproperlyConfigured: Requested setting EMAIL_FROM, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
django has not been initialized due
In tasks.py initialization file
Import os Import Django os.environ.setdefault ( " DJANGO_SETTINGS_MODULE " , " dailyfresh.settings " ) # copy from wsgi.py in over django.setup ()
Test again sent successfully