注册保护用户数据 捕获异常
在编写程序的时候,程序抛异常是一件很正常的事;既然异常总是会抛,那就想办法在抛出后,尽早解决才是王道。就拿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.改为异步发送