发送邮件的核心代码
发送一封邮件——send_mail
from django.core.mail import send_mail
send_mail(
'邮件标题',
'邮件内容',
'发件人邮箱地址',
['收件人邮箱地址'],
fail_silently=False
)
fail_silently:可选参数,默认是False,如果是False,则发送失败时候,会抛出smtplib.SMTPException异常,具体详细的异常
auth_user:可选的参数,如果有,那么认证SMTP Server时,使用该用户,否则使用EMAIL_HOST_USER设置
auth_password:可选参数,如果有,那么认证SMTP Server时,使用该密码,否则使用、EMAIL_HOST_PASSWORD设置
一次发送多封邮件——send_mass_mail((邮件1, 邮件2 …), fail_silently=False)
需要在setting中设置发送邮件的服务器配置信息
EMAIL_HOST ='smtp.sina.cn'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'sth@sina.cn' 发件人邮箱
EMAIL_HOST_PASSWORD = '123456' 授权码
EmailMultiAlternatives
from django.core.mail import EmailMultiAlternatives
msg = EmailMultiAlternatives(邮件标题, 纯文本内容, 发件人, [收件人])
msg.attach_alternative(HTML格式的文本, "text/html")
msg.send()
参考资料:https://docs.djangoproject.com/en/1.11/topics/email/
QQ邮箱的收取邮件支持POP/IMAP两种协议,发送邮件采用SMTP协议,收件和发件均使用SSL协议来进行加密传输,采用SSL协议需要单独对帐户进行设置。采用SSL协议和非SSL协议时端口号有所区别,参照下表的一些常见配置组合:
类型 | 服务器名称 | 服务器地址 | 非SSL协议端口号 | SSL协议端口号 |
---|---|---|---|---|
发件服务器 | SMTP | smtp.qq.com | 25 | 465/587 |
收件服务器 | POP | pop.qq.com | 110 | 995 |
收件服务器 | IMAP | imap.qq.com | 143 | 993 |
发送邮件
创建项目 EmailDemo
创建app
EmailDemo/settings.py
# 设置发件服务器
EMAIL_HOST ='smtp.qq.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = '183456679@qq.com'
EMAIL_HOST_PASSWORD = 'epensntfhhgb'
app/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from django.core.mail import EmailMultiAlternatives
def test_send_mail(request):
msg = EmailMultiAlternatives('学习', '天天向上', '1874996645@qq.com', ['huiyinimen@163.com'])
msg.attach_alternative('HTML格式的文本', "text/html")
msg.send()
return HttpResponse('ok')
EmailDemo/urls.py
from django.conf.urls import url
from django.contrib import admin
from app.views import test_send_mail
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^email/',test_send_mail)
]
测试:http://10.8.152.31:8888/email/
创建项目RESTfulDemo
创建app task
task/models.py
from django.db import models
# Create your models here.
class Task(models.Model):
title = models.CharField(max_length=100)
completed = models.BooleanField(default=False)
class Meta:
db_table = 'tasks'
verbose_name_plural = '任务列表'
verbose_name = '任务'
def __str__(self):
return self.title
# 让task出现在admin管理页面中
# 在admin中注册 Task
task/admin.py
# Register your models here.
from django.contrib import admin
from task.models import Task
# 注册
admin.site.register(Task)
RESTfulDemo/settings.py
ALLOWED_HOSTS = ['10.8.152.31']
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'task',
]
测试登录 python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
测试 登录之后显示内容
另一种测试方法
task/apps.py
from django.apps import AppConfig
class TaskConfig(AppConfig):
name = 'task'
verbose_name = '任务'
RESTfulDemo/settings.py
ALLOWED_HOSTS = ['10.8.152.31']
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'task.apps.TaskConfig',
]
task/serializers.py
from task.models import Task
from rest_framework import serializers
# 使用Serializer把task数据序列化
class TaskSerializer(serializers.ModelSerializer):
# 指定序列化的模型 字段
class Meta:
model = Task
fields = ('title',) # 元祖需要加逗号
task/views.py
# Create your views here.
from django.shortcuts import render
from task.models import Task
from task.serializers import TaskSerializer
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.parsers import JSONParser
from rest_framework.renderers import JSONRenderer
# 获取所有的数据 返回json格式
@csrf_exempt
def task_list(request):
if request.method == 'GET':
# 去除所有数据
task = Task.objects.all()
# 数据序列化
serializer = TaskSerializer(task,many=True)
return JsonResponse(serializer.data,safe=False)
elif request.method =='POST':
# 获取数据
data = JSONParser().parse(request)
# 创建一个序列化对象
serializer = TaskSerializer(data=data)
# 检测数据是否合法 若合法 保存数据
if serializer.is_valid():
serializer.save()
return JsonResponse({'msg':'save success!'})
else:
return JsonResponse({'msg':'save fail!'})
# 查询 查询出数据 序列化
# 保存 json数据转化成普通字段 普通字段序列化 在保存
# 查询某个
@csrf_exempt
def task_detail(request,pk):
try:
task = Task.objects.get(pk=pk)
except Task.DoesNotExist as e:
return JsonResponse({'msg':'查找的结果不存在'},status=404)
if request.method == 'GET':
servializer = TaskSerializer(task)
return JsonResponse(servializer.data)
# 修改
elif request.method == 'PUT':
data = JSONParser().parse(request)
servializer = TaskSerializer(task,data=data)
if servializer.is_valid():
servializer.save()
return JsonResponse(servializer.data)
elif request.method == 'DELETE':
task.delete()
return JsonResponse({'msg':'delete success!'})
task/urls.py
from django.conf.urls import url
from task.views import task_list
urlpatterns = [
url(r'^tasks/',task_list),
]
RESTfulDemo/urls.py
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^',include('task.urls'))
]
测试:10.8.152.31:8888/task/
官网测试1-4
http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/