### Django
#### Django
#####
+ Smtp : ,
+ Smtp
+ SSL : smtp.163.com: 465
+ SSL : smtp.163.com: 25
+
```python
import smtplib # smtp
from email.mime.text import MIMENText #
#
subject = ""
content = ""
sender = ""
recver = ""
password = ""
message = MIMEText(content, "html", "utf-8")
message["Subject"] = subject #
message["From"] = sender #
message["To"] = recver #
# , smtp
smtp = smtplib.SMTP_SSL("smtp.163.com", 994)
#
smtp.login(sender, password)
smtp.sendmail(sender, [recver], message.as_string())
smtp.close()
```
#####
1. , [](https://www.yuntongxun.com)
2. [](http://doc.yuntongxun.com/p/5a533de33b8496dd00dce07c)
3.
+ Demo
```python
coding=utf-8gbk
from CCPRestSDK import REST
import ConfigParser
accountSid= '';
#ACCOUNT SID
accountToken= 'Token';
#TokenAUTH TOKEN
appId='ID';
#APPID
serverIP='app.cloopen.com';
#app.cloopen.com
serverPort='8883';
# 8883.
softVersion='2013-12-26'; #REST API
def sendTemplateSMS(to,datas,tempId):
#REST SDK
rest = REST(serverIP,serverPort,softVersion)
rest.setAccount(accountSid,accountToken)
rest.setAppId(appId)
result = rest.sendTemplateSMS(to,datas,tempId)
for k,v in result.iteritems():
if k=='templateSMS' :
for k,s in v.iteritems():
print '%s:%s' % (k, s)
else:
print '%s:%s' % (k, v)
```
4. Python SDK : `pip install ronglian_sms_sdk`
```python
from ronglian_sms_sdk import SmsSDK
accId = 'ID'
accToken = 'TOKEN'
appId = 'ID'
def send_message():
sdk = SmsSDK(accId, accToken, appId)
tid = 'ID'
mobile = '1,2'
datas = ('1', '2')
resp = sdk.sendMessage(tid, mobile, datas)
print(resp)
```
##### Django
1.
1. (`settings.py` )
```python
#
#
EMAIL_HOST_USER = 'xxx' #
EMAIL_HOST_PASSWORD = 'xxxx' #
EMAIL_USE_SSL = True # SSL
EMAIL_HOST = 'smtp.163.com' #
EMAIL_PORT = 994 #
```
2. ()
```python
def email_test(request):
email = EmailMultiAlternatives(subject='',
body='',
from_email='163',
to=[''],
)
email.send()
return HttpResponse('')
```
3.
2.
1.
1. ajax get
2.
3.
2.
3.
4. ,
1. ,
2.
1.
2.
##### Celery
1. Celery
+ Celery : Python
+ : ,,,,
+ :
+ : ,,
+ Celery (,)
1. , worker
2. ,
3. store
4.
1. user :
2. broker :
3. workers : ,
4. store :
+ Celery **** ****
+ Redis, NoSQL : Redis ,,Redis ,
+ RabbitMQ :
2. Celery
1. Redis Python Celery redis
```python
pip install django-celery==3.2.2
pip install django-redis
pip install redis==2.10.6
```
2. Redis
1. Redis
2. , `redis-server.exe redis.windows.conf`
3. Redis , `redis-cli.exe` `shutdown`
3. Celery
1. `settings.py`, djcelery App
```python
INSTALLED_APPS = [
...
'Buyer',
'Seller',
'djcelery',
]
```
2. (app) CeleryTask, `tasks.py` `python manage.py startapp CeleryTask`
3. `settings.py`
```python
import djcelery
djcelery.setup_loader() #
BROKER_URL = 'redis://127.0.0.1:6379/1' # broken , redis
CELERY_IMPORTS = ('CeleryTask.tasks') #
##
CELERY_TIMEZONE = 'Asia/Shanghai'
# celery ,
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
```
4. () `celery.py` ()
```python
import os
from celery import Celery
from django.conf import settings
# celery Django-celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Cmdb.settings')
# celery , celery
app = Celery('art_project')
# celery
app.config_from_object('django.conf:settings')
# , task.py , celery app task.py
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
```
5. `tasks.py` (celery : , `@app.task` )
```python
from __future__ import absolute_import
from Qshop.celery import app
@app.task
def Test():
import time
time.sleep(20)
print('')
```
6. celery
1. `python manage.py migrate`
2. celery : `python manage.py celery worker --loglevel=INFO`
3. `from kombu.async.timer import Entry ...` (Python3 async ,)
1. kombu async `asynchronous`
2. , async asynchronous
4. worler
7. `tasks.py`
```python
from CeleryTask.tasks import Test
def index(request):
Test.delay()
```
8.
```python
from CeleryTask import test.myprint
@LoginValid
def index(request):
myprint.delay(10)
return render(request, 'store/index.html')
```
4. Celery
1. `settings.py`
```python
from celery.schedules import timedelta, crontab
CELERYBEAT_SCHEDULE = {
u"": {
"task": "CeleryTask.tasks.Test", #
"schedule": timedelta(seconds=2), #
}
}
```
2. worker : `python manage.py celery worker --loglevel=INFO`
3. : `python manage.py celerybeat --loglevel=INFO`