Django项目实践(商城):十、个人信息

本文主要介绍了Django商城项目中关于用户个人信息的处理,包括用户基本信息逻辑分析、添加email_active字段、查询渲染用户信息、添加邮箱功能及邮箱验证流程。详细讲解了后端views的实现、路由定义、前端Vue展示以及邮箱发送的异步任务。同时,提到了密码修改的接口设计、后端实现和前端交互。
摘要由CSDN通过智能技术生成

在这里插入图片描述

(根据居然老师直播课内容整理)

一、用户基本信息

1、用户基本信息逻辑分析

  • 以下是要实现的后端逻辑
    • 用户模型补充email_active字段
    • 查询并渲染用户基本信息
    • 添加邮箱
    • 发送邮箱验证邮件
    • 验证邮箱

2、用户模型补充email_active字段

  • 用户模型中有email字段,但没有邮箱是否激活的字段,需要添加字段
  • 对已存在数据有表中,增加字段时,一般需要添加缺省值
    在这里插入图片描述
email_active = models.BooleanField(default=False, verbose_name='邮箱验证状态')
  • 补充完字段后,需要进行迁移。
python manage.py makemigrations
python manage.py migrate

3、查询用户基本信息

# ./apps/users/views.py 

		context = {
            "username": request.user.username,
            "mobile": request.user.mobile,
            "email": request.user.email,
            "email_active": request.user.email_active,
        }
        return render(request, 'user_center_info.html',context=context)

4、渲染用户基本信息

  • 前端显示用户信息时,有3种方法:
    • ajax 方式查询获取展示
    • django的DTL模板语法方式展示
    • vue 方式展示
  • 为统一前端实现方式,本项目模板中采用vue方式展示
  • 为了保持模板语法一致,将django中模板渲染变量写到js里面,赋值给js变量
  • user_center_info.html:在这里插入图片描述
  • user_center_info.html
    在这里插入图片描述
  • user_center_info.js
    在这里插入图片描述

5、添加邮箱信息

  • 填写邮箱后,用put方式保存邮箱信息

5.1 请求方式

选项 方案
请求方法 PUT
请求地址 /email/

5.2 请求参数:

参数名 类型 是否必传 说明
email string {email:邮箱名}

5.3 响应结果:HTML

字段 说明
邮箱验证失败 响应错误提示
邮箱验证成功 重定向到用户中心

5.4 后端views实现

  • 在users.views.py 中定义一个EmailView类,用put方法保存邮箱名称到用户表中
  • 接收参数:email
    • put方法参数存放在request.body中
    • request.body数据是字节类型的,需要decode()转换成字符串
    • 再转换成json类型
  • 校验邮箱:
    • 正则表达式校验邮箱是否正确
    • 如果不正确,返回错误
  • 保存邮箱信息
    • 正常情况下,用户登录后才会到达此界面,需要校验是用户是否登录(后面再优化)
    • 确认登录后,修改request.user.email属性值并保存,即可完成邮箱信息保存
  • 发送激活邮件(后面再优化)
  • 返回响应结果
# ./apps/users/views.py 
class EmailView(View):
    """添加邮箱"""

    def put(self,request):
        # 接收参数
        # print(request.body) # 建议调试看一下数据及数据类型
        json_str = request.body.decode()
        # print(type(json_str))
        json_dict = json.loads(json_str)
        email = json_dict.get('email')

        # 校验参数
        if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
            return http.HttpResponseForbidden('参数邮箱有误')

        # 存数据
        try:
            request.user.email = email
            request.user.save()
        except Exception as e:
            return http.JsonResponse({'code': RETCODE.DBERR, 'errmsg': '添加邮箱失败'})

        # 发送邮件

        # 响应结果
        return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK'})

5.5 定义路由

	# 保存邮件
    path('email/', views.EmailView.as_view()),

5.6 前端user_center_info.js

  • 点击保存时,执行此js的save_mail函数
  • 首选判断邮箱是否正确,
  • 如果正确,就提交后台
    • 定义url
    • 定义put数据传递方式
    • 用ajax方式发送请求
    • 返回类型是json
      在这里插入图片描述

6、后端判断用户是否登录

6.1 自定义判断用户是否登录的扩展类:返回JSON

  • 获取个人用户中心页面时,写过判断用户是否登录的功能
    • UserInfoView类继续 django的LoginRequiredMixin类和view类
      • LoginRequiredMixin返回的HttpResponseRedirect
        在这里插入图片描述
    • 而put方法返回的是JsonResponse 在这里插入图片描述
  • 所以,继承LoginRequiredMixin类,改写返回方法
    • 将自定义类存放到./utils/views.py 中
    • 重写handle_no_permission方法
# /utils/views.py
from django.contrib.auth.mixins import LoginRequiredMixin
from django import http
from utils.response_code import RETCODE


class LoginRequiredJSONMixin(LoginRequiredMixin):
    """自定义判断用户是否登录的扩展类:返回JSON"""

    def handle_no_permission(self):
        """直接响应JSON数据"""
        return http.JsonResponse({'code': RETCODE.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值