django邮件通知功能-

需求:
1:下单人员下订单时需要向组长和投流手发送邮件通知
2:为何使用邮件通知功能?因为没钱去开通短信通知功能

设计
1:给用户信息表添加2个字段
第一个字段为:是否开通邮件通知的布尔值
第二个字段为: 用户接收通知的邮箱账号
2:发送通知时携带服务器中的时间,因为考虑到139服务器的接收时间可能会不一致
3:django自带邮件插件

高并发:不考虑

django邮件通知功能-_第1张图片

这个案例是使用139邮箱
获取邮箱的smtp功能,
启动程序后
1:程序发送邮件命令给139邮箱服务器
2:139邮箱服务器再发送给对应的被通知者
settings.py中设定

# -------------------------------------------------------
# 添加邮件通知
# 1使用的django内置邮件插件
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'
# 2邮箱的服务地址
EMAIL_HOST='smtp.139.com'
# 3 端 口--找到139邮件中的smtp 给出的端口 默认25 非ssl的是25
# EMAIL_PORT=25
# 3 端 口--SSL时为465
EMAIL_USE_SSL=True
EMAIL_PORT=465
# 4 我的邮箱账号
EMAIL_HOST_USER='[email protected]'
# 5 我的授权码就是邮箱密码
EMAIL_HOST_PASSWORD='xxxxxxxxxx3fa2900'
# -------------------------------------------------------

admin.py中设定

from django.core.mail import send_mail


# 在订单管理函数中
# 1 判断当前添加的订单是否是有id这个值的,当没有id这个值,那么就是新添加的订单(Django models.py中设定了id值是自动累加添加的数值)
#   所以添加数据是没有id值的
class Order_salesmanAdmin(admin.ModelAdmin):
    ...

    def save_model(self, request, obj, form, change):

    # 判断没有id值时,那么表示为添加新订单
    # 当当前添加订单的身份级别为7时,那么执行逻辑

    if not obj.pk:
        if UserProfile.objects.get(user=request.user).userrank == 7:
            # 获取到订单中指定的人员中是否开通邮件通知的布尔值
            # 小组组长的身份中,是否开通邮件通知的布尔值
            # 投流手的身份中,是否开通邮件通知的布尔值
            is_team_notice = obj.team_leader_userid.is_email_notice
            is_trader_notice = obj.trader_userid.is_email_notice

            # 进行判断
            # 当小组长开通了通知,投流手也开通了通知
            if is_team_notice and is_trader_notice:
                # 获取小组长的身份中的邮箱
                # 获取投流手身份中的邮箱
                team_leader_email = obj.team_leader_userid.user_email
                trader_email = obj.trader_userid.user_email
                # 当小组长和投流手的邮箱值为"无"时,表示为默认值
                # 所以当投流手和小组长的邮件都有邮箱时
                if trader_email != "无" and team_leader_email != "无":
                    # 发送邮件
                    send_mail(
                        # 使用当前用户的用户名作为邮件的标题
                        UserProfile.objects.get(user=request.user).user.username,
                        # 邮件的内容
                        f'{datetime.datetime.now():%d日%H时:%M分},添加了一张新订单',
                        # 邮件的发送人
                        '[email protected]',
                        # 邮件的接收人
                        # 1小组长
                        [team_leader_email,
                         # 2投流人
                         trader_email,
                         ], fail_silently=False)
            # 当小组长开通了 邮件通知功能
            # 向小组长发送邮件
            elif is_team_notice:
                team_leader_email = obj.team_leader_userid.user_email
                if team_leader_email != "无":
                    send_mail(
                        # 使用当前用户的用户名作为邮件的标题
                        UserProfile.objects.get(user=request.user).user.username,
                        # 邮件的内容
                        f'{datetime.datetime.now():%d日%H时:%M分},添加了一张新订单',
                        # 邮件的发送人
                        '[email protected]',
                        # 邮件的接收人
                        # 1小组长
                        [team_leader_email,
                         # 2投流人
                         ], fail_silently=False)
            # 当投流手开通了 邮件通知功能
            # 向投流手发送邮件
            elif is_trader_notice:
                # 向投流人发送邮件
                trader_email = obj.trader_userid.user_email
                if trader_email != "无":
                    send_mail(
                        # 使用当前用户的用户名作为邮件的标题
                        UserProfile.objects.get(user=request.user).user.username,
                        # 邮件的内容
                        f'{datetime.datetime.now():%d日%H时:%M分},添加了一张新订单',
                        # 邮件的发送人
                        '[email protected]',
                        # 邮件的接收人
                        # 1小组长# 2投流人
                        [trader_email, ], fail_silently=False)

你可能感兴趣的:(django,数据库,sqlite)