阿语python4-2 美多商城v5.0用户中心-添加和验证邮箱之第5.2.1节添加邮箱后端逻辑...

news/2024/7/19 14:05:36 标签: python, java, js, django, ajax
js_content">

1. 添加邮箱接口设计和定义

1.请求方式

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

2.请求参数

参数名类型是否必传说明
emailstring邮箱

3.响应结果:JSON

字段说明
code状态码
errmsg错误信息

2. 添加邮箱后端逻辑实现

class EmailView(View):
    """添加邮箱"""

    def put(self, request):
        """实现添加邮箱逻辑"""
        # 接收参数
        json_dict = json.loads(request.body.decode())
        email = json_dict.get('email')

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

        # 赋值email字段
        try:
            request.user.email = email
            request.user.save()
        except Exception as e:
            logger.error(e)
            return http.JsonResponse({'code': RETCODE.DBERR, 'errmsg': '添加邮箱失败'})

        # 响应添加邮箱结果
        return http.JsonResponse({'code': RETCODE.OK, 'errmsg': '添加邮箱成功'})

3. 判断用户是否登录并返回JSON

重要提示:

  • 只有用户登录时才能让其绑定邮箱。

  • 此时前后端交互的数据类型是JSON,所以需要判断用户是否登录并返回JSON给用户。

方案一:

  • 使用Django用户认证系统提供的is_authenticated()

class EmailView(View):
    """添加邮箱"""

    def put(self, request):
        """实现添加邮箱逻辑"""
        # 判断用户是否登录并返回JSON
        if not request.user.is_authenticated():
            return http.JsonResponse({'code': RETCODE.SESSIONERR, 'errmsg': '用户未登录'})
        pass

方案二:

  • 自定义返回JSON的login_required装饰器

  • meiduo_mall.utils.views.py

def login_required_json(view_func):
    """
    判断用户是否登录的装饰器,并返回json
    :param view_func: 被装饰的视图函数
    :return: json、view_func
    """
    # 恢复view_func的名字和文档
    @wraps(view_func)
    def wrapper(request, *args, **kwargs):

        # 如果用户未登录,返回json数据
        if not request.user.is_authenticated():
            return http.JsonResponse({'code': RETCODE.SESSIONERR, 'errmsg': '用户未登录'})
        else:
            # 如果用户登录,进入到view_func中
            return view_func(request, *args, **kwargs)

    return wrapper


class LoginRequiredJSONMixin(object):
    """验证用户是否登陆并返回json的扩展类"""
    @classmethod
    def as_view(cls, **initkwargs):
        view = super().as_view(**initkwargs)
        return login_required_json(view)

LoginRequiredJSONMixin的使用

class EmailView(LoginRequiredJSONMixin, View):
    """添加邮箱"""

    def put(self, request):
        """实现添加邮箱逻辑"""
        # 判断用户是否登录并返回JSON
        pass

http://www.niftyadmin.cn/n/739761.html

相关文章

阿语python4-2 美多商城v5.0用户中心-收货地址之第5.3.4节修改地址前后端逻辑

1. 修改地址接口设计和定义1.请求方式选项方案请求方法PUT请求地址/addresses/(?P<address_id>\d)/2.请求参数&#xff1a;路径参数 和 JSON参数名类型是否必传说明address_idstring是要修改的地址ID&#xff08;路径参数&#xff09;receiverstring是收货人province_id…

阿语python4-2 美多商城v5.0用户中心-收货地址之第5.3.3节展示地址前后端逻辑

1. 展示地址接口设计和定义1.请求方式选项方案请求方法GET请求地址/addresses/2.请求参数无3.响应结果&#xff1a;HTMLuser_center_site.html2. 展示地址后端逻辑实现class AddressView(LoginRequiredMixin, View):"""用户收货地址"""def get(s…

阿语python4-2 美多商城v5.0用户中心-收货地址之第5.3.2节新增地址前后端逻辑

1. 定义用户地址模型类1.用户地址模型类class Address(BaseModel):"""用户地址"""user models.ForeignKey(User, on_deletemodels.CASCADE, related_nameaddresses, verbose_name用户)title models.CharField(max_length20, verbose_name地址名…

阿语python4-2 美多商城v5.0用户中心-收货地址之第5.3.1节省市区三级联动

1. 展示收货地址界面提示&#xff1a;省市区数据是在收货地址界面展示的&#xff0c;所以我们先渲染出收货地址界面。收货地址界面中基础的交互已经提前实现。class AddressView(LoginRequiredMixin, View):"""用户收货地址"""def get(self, req…

阿语python4-2 美多商城v5.0用户中心-添加和验证邮箱之第5.2.4节验证邮箱后端逻辑...

1. 验证邮箱接口设计和定义1.请求方式选项方案请求方法GET请求地址/emails/verification/2.请求参数&#xff1a;查询参数参数名类型是否必传说明tokenstring是邮箱激活链接3.响应结果&#xff1a;HTML字段说明邮箱验证失败响应错误提示邮箱验证成功重定向到用户中心2. 验证链接…

阿语python4-2 美多商城v5.0用户中心-添加和验证邮箱之第5.2.2节Django发送邮件的配置...

1. Django发送邮件流程分析send_mall()方法介绍位置&#xff1a;在django.core.mail模块提供了send_mail()来发送邮件。方法参数&#xff1a;send_mail(subject, message, from_email, recipient_list, html_messageNone)subject 邮件标题 message 普通邮件正文&#xff0c;普通…

阿语python4-2 美多商城v5.0商品-商品数据表设计之第6.1.2节首页广告数据库表分析...

1. 首页广告数据库表分析2. 定义首页广告模型类class ContentCategory(BaseModel):"""广告内容类别"""name models.CharField(max_length50, verbose_name名称)key models.CharField(max_length50, verbose_name类别键名)class Meta:db_table …

阿语python4-2 美多商城v5.0用户中心-收货地址之第5.3.7节修改地址标题

1. 修改地址标题接口设计和定义1.请求方式选项方案请求方法PUT请求地址/addresses/(?P<address_id>\d)/title/2.请求参数&#xff1a;路径参数参数名类型是否必传说明address_idstring是要修改的地址ID&#xff08;路径参数&#xff09;3.响应结果&#xff1a;JSON字段说…