Django项目实战 ----用户个人信息页面

注册保护用户数据 捕获异常

在编写程序的时候,程序抛异常是一件很正常的事;既然异常总是会抛,那就想办法在抛出后,尽早解决才是王道。就拿Django来说,通常发生未知异常时,我们会将settings里的DEBUG=False改为True,然后盯着日志看。可谁没事老盯着日志看啊,未免也太浪费时间了;不能老是等待用户反馈异常和问题,万一用户懒得反馈了,岂不很尴尬。

在保护用户数据的逻辑代码里面添加上try,最后直接返回 JsonResponse
# 密码加密   数据保存可能不成功捕获异常
# create_user 可以给密码加密
   try:
        user = User.objects.create_user(username=username, password=password, mobile=mobile)
   except Exception as e:
        return JsonResponse({"code": "400", "errmsg": "用户保存失败,检查用户信息"})

用户个人信息

添加mixin
  • 在工程目录下的utils下创建一个新的文件viewmixin.py
  • LoginMixin继承LoginRequiredMixin重写了handle_no_permission方法 返回json数据

LoginRequiredMixin类的使用:
1.单独创建一个utils包,在包内创建minix.py文件
在这里插入图片描述
2.编写一个LoginRequiredMixin继承object
3.重写as_view(cls,**intkwargs)类方法,对父类的as_view进行一层封装

from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import JsonResponse


class LoginMixin(LoginRequiredMixin):

    def handle_no_permission(self):
        return JsonResponse({"code": "400", "errmsg": "没有登录"})

4.从自己的视图类中继承LoginRequiredMixin类和View
5.先从LoginRequiredMixin类中调用as_view()方法,而后又会在改类中向他的父类View中调用as_view()
在这里插入图片描述

添加邮箱字段

class User(AbstractUser):
	email_active = models.BooleanField(default=False, verbose_name='邮箱是否验证')
	class Meta:
	       db_table = 'tb_user'
	       verbose_name = '用户'
	       verbose_name_plural = verbose_name  # 复数形式

保存邮箱功能

步骤
  • 1.获取数据 邮箱地址
  • 2.校验数据
  • 3.保存邮箱地址
  • 4.发送邮件
  • 5.返回响应

直接上代码!!

class SaveEmailView(View):
    def put(self, request):
        # 1 获取数据 邮箱地址
        json_body = request.body
        data_dict = json.loads(json_body)
        email = data_dict.get("email")
        # 校验数据
        if not email:
            return JsonResponse({"code": "400", "errmsg": "邮箱地址不能为空"})

        if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
            return JsonResponse({"code": "400", "errmsg": "邮箱地址格式错误"})
        # 2 保存邮箱地址
        try:
            request.user.email = email
            request.user.save()
        except Exception as e:
            print(e)
            return JsonResponse({"code": "400", "errmsg": "邮箱保存失败"})

        # 3 发送邮件
        print("发送邮件")

        # 4返回响应
        return JsonResponse({"code": "0", "errmsg": "ok"})

邮件配置

在这里插入图片描述

在setting配置

###########邮件配置#####################
# 指定django里发送短信的模块
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.126.com'
EMAIL_PORT = 25
# 发送邮件的邮箱
EMAIL_HOST_USER = 'yanjianglong@126.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'GLSIDUGQZBUFIGVK'
# 收件人看到的发件人
EMAIL_FROM = '美多小商品<yanjianglong@126.com>'

发邮件测试

  • 使用send_mail方法
    在这里插入图片描述

异步发邮件(celery)

  • 1.创建celery包,在包里创建tasks.py,文件名不能改
    在这里插入图片描述

  • 2.在tasks.py文件中添加发邮件的任务

from django.core.mail import send_mail

from celery_tasks.main import app


@app.task(name="send_verify_mail")
def send_verify_mail(subject, recipient_list, html_message):
    subject = subject  # 标题
    message = ''  # 内容
    from_email = 'l18671436995@126.com'
    recipient_list = recipient_list  # 接收方地址 列表
    try:
        send_mail(subject, message, from_email, recipient_list, html_message=html_message)
    except Exception as e:
        print('发送邮件失败', e)

  • 3.main里面添加邮件模块
# 1 设置django环境
# 2 创建celery对象
# 3 设置 broker
# 4 celery自动检测任务
import os

# 1 设置django环境
# set the default Django settings module for the 'celery' program.
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo.settings')

# 2 创建celery对象
app = Celery('celery_tasks')

# 3 设置 broker
app.config_from_object("celery_tasks.config")

# 4celery自动检测任务  这里会自动去celery_tasks.sms下找tasks.py
app.autodiscover_tasks(['celery_tasks.sms', 'celery_tasks.email'])
  • 4.开启celerty
 celery -A celery_tasks.main worker -l info

注意这里:如果如下的命令执行失败,或者开启之后不执行,很难受!解决办法就是如下链接
解决celery不执行的办法,点击这里!!!

  • 5.改为异步发送
    在这里插入图片描述

修改发送内容为链接

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值