Django 发送邮件

在settings.py中设置html

 

EMAIL_USE_SSL = Truepython

EMAIL_HOST = 'smtp.qq.com'  # 若是是 163 改为 smtp.163.comredis

EMAIL_PORT = 465sql

EMAIL_HOST_USER = '763005825@qq.com' # 账号django

EMAIL_HOST_PASSWORD = 'jffbcdknmbzvbega'  # 密码json

DEFAULT_FROM_EMAIL = EMAIL_HOST_USERsession

引入包函数

from django.core.mail import send_mailpost

 

发送邮件网站

send_mail('主题',"内容",'发送帐号',['接收帐号'], fail_silently=False)

 

 

 

 

selery发送邮件

 

 

celery

  • 官方网站
  • 中文文档
  • 示例一:用户发起request,并等待response返回。在本些views中,可能须要执行一段耗时的程序,那么用户就会等待很长时间,形成很差的用户体验
  • 示例二:网站每小时须要同步一次天气预报信息,可是http是请求触发的,难道要一小时请求一次吗?
  • 使用celery后,状况就不同了
  • 示例一的解决:将耗时的程序放到celery中执行
  • 示例二的解决:使用celery定时执行

名词

  • 任务task:就是一个Python函数
  • 队列queue:将须要执行的任务加入到队列中
  • 工人worker:在一个新进程中,负责执行队列中的任务
  • 代理人broker:负责调度,在布置环境中使用redis

使用

  • 安装包

celery==3.1.25

celery-with-redis==3.0

django-celery==3.1.17

  • 配置settings

INSTALLED_APPS = (

  ...

  'djcelery',

}

 

...

 

import djcelery

djcelery.setup_loader()

BROKER_URL = 'redis://127.0.0.1:6379/0'

CELERY_IMPORTS = ('应用名称.task')

  • 在应用目录下建立task.py文件

from celery import task

from django.core.mail import send_mail

import time

 

@task

def sendmail():

    email='763005825@qq.com'

    send_mail('reigster',"欢迎登陆每天生鲜",'763005825@qq.com',[email],fail_silently=False)

    time.sleep(10)

 

  • 迁移,生成celery须要的数据表

python manage.py migrate

  • 启动Redis

sudo redis-server /etc/redis/redis.conf

  • 启动worker

python manage.py celery worker --loglevel=info

  • 使用代码

#from task import *

 

def index(request):

    sendmail.delay()

 

 

    return HttpResponse("hello world")

 

 

 

# 专门进行验证def validate_sql(data):    for k,val in data:        if re.match("['select' ,'update','delete']", val) != None:            return False    return True# 注册class Register(View):    def get(self,request):        return render(request,'index/register.html')    def post(self,request):        mes = {}        data=request.POST        # flag=validate_sql(data)        # if flag==False:        #     mes['code'] = 10015        #     mes['message'] = '输入不合法'        #     return HttpResponse(json.dumps(mes))        username=data.get('user_name')        pwd=data.get('pwd')        cpwd=data.get('cpwd')        email=data.get('email')        allow=data.get('allow')        if not all([username,pwd,cpwd,email,allow]):            mes['code']=10010            mes['message']='都不能为空'            return HttpResponse(json.dumps(mes))        else:            # 用户名必须为8-12位字母            if re.match("\w{8,12}$",username)==None:                mes['code']=10011                mes['message']='用户名不合法'            # if re.match("['select' ,'update','delete']",username)!=None:            #     mes['code']=10012            #     验证邮箱            if re.match("\w{8,12}@(163|126|qq).com$", email) == None:                mes['code'] = 10012                mes['message'] = '用户名不合法'                return HttpResponse(json.dumps(mes))            # 验证两次输入的密码是否一致            if pwd!=cpwd:                mes['code'] = 10013                mes['message'] = '两次输入的密码不一致'                return HttpResponse(json.dumps(mes))            # 注册            user=User(name=username,password=make_password(pwd),            token='23')            try:                user.save()                request.session['indexuser']=username                # 发送邮件                from mypro.settings import DEFAULT_FROM_EMAIL                send_mail('你好,欢迎注册',"欢迎你注册xx网站<a href='/authuser?"                                    "token=wertfgb>",DEFAULT_FROM_EMAIL,[email],fail_silently=False)            except:                mes['code'] = 10018                mes['message'] = '添加失败'                return HttpResponse(json.dumps(mes))        mes['code']=1200        mes['message']=''        return HttpResponse(json.dumps(mes))
相关文章
相关标签/搜索