美多商城项目(四)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 美多商城项目(四)

每日分享

Know well what leads you forward and what holds you back,and choose the path that leads you to wisdom.

要知道是什么导致你前进,是什么阻碍你,并选择引导你智慧的道路。

小闫语录:

古语『吾日三省吾身』我们在如今快节奏的生活中,需要片刻的安静,需要片刻的思考。现在的你是否每天沉浸在手机、电脑中,失去了思考的时间,闲暇的时间都充斥在了抖音快手等快餐视频中?看似从中得到了片刻的安宁愉悦,掌握了许多人生哲理,看遍了人生百态,其实呢?得到的还是放下手机后的空虚感。其实快餐文化中你得不到任何养分,那些只是昙花一现。我承认如今互联网带给我们极大的便利,但是真正从中学习的人又有多少呢?放下手机,发呆一会,思考一下自己的路。成功是因为什么,失败又是因为什么,善于总结,即使是失败,也是你一笔宝贵的财富。



美多商城项目(四)

项目地址

  1. https://github.com/EthanYan6/E-commerce-sites.git

笔记配合代码查看效果更好哦~

1.登录用户的邮箱设置

API: PUT /email/
参数: 
    通过请求头传递jwt token
    {
        "email":"邮箱",
    }
响应:
    {
        "id":"用户id",
        "email":"邮箱"
    }

代码逻辑

1.获取参数并进行校验(email必传,email格式)。

可以添加一个邮箱设置序列化器类;email序列化和反序列化时都用;自动生成的字段email默认是可以不传递的,我们修改为必传;将 required改为True。

2.设置登录用户的邮箱。

3.返回应答,邮箱设置成功。

完成视图的代码后,配置视图的url地址。

4.在序列化器类中自己设置update方法。

4.1设置用户的邮箱。

4.2给邮箱发送验证邮件。

发送邮件需要使用SMTP服务器,常用的服务器有163邮箱等。

5.在Django配置文件中,设置邮箱配置信息。需要修改邮箱和客户端授权密码,以及收件人看到的发件人。

6.使用Django提供的模块发送邮件。

使用send_email进行邮件发送:

from django.core.mail import send_email
send_email(subject='标题',
          message='正文',
          from_email='发件人邮箱',
          recipient_list='收件人邮箱列表',
          html_message='多媒体正文')

Django中内置的邮件发送功能在django.core.mail模块中。

message只是普通的字符串正文,如果是多媒体正文,设置html_message。

7.发送邮件之前要生成一个验证链接

注意:如果直接将用户的id放在验证链接中,可能会发生恶意的请求。比如其他人在链接后面1,2,3.....一个接一个的尝试。解决办法就是将用户的信息进行加密,然后把加密之后的内容放在验证链接后面。

7.1在用户模型类User中添加方法用于生成用户的邮箱验证连接地址。

7.2封装一个函数,使用celery异步发送邮件

7.3把发送邮件代码封装成celery任务函数,在邮箱设置接口中,只是发出发送邮件任务消息。

2.用户邮箱验证

API: PUT /emails/verification/?token=<加密用户信息>
参数:
    通过查询字符串传递<加密用户信息>
响应:
    {
        "message":"OK"
    }

代码逻辑:

1.获取token并进行校验(token必传,token是否有效)。

2.设置对应用户的邮箱验证标记email_active为True。

3.返回应答,验证成功。

3.用户地址管理

业务功能:

1.地址的增(重点)、删、改、查。

2.设置默认地址。

3.设置地址的标题。

4.省市县三级联动效果。(重点

4.省市县三级联动

1.省市县存储

自关联:省市县地区的存储只需要一张表,表本身是一个自关联。(一个省下面有多个市,一个市下面有多个区县)

ID(地区ID) name(地区名称) parent_id(父级地区ID)
200001 北京市 NULL
200010 北京市 200001
200110 海淀区 200010

定义模型类:

class Area(models.Model):
    """地区模型类"""
    name = models.CharField(max_length=20, verbose='地区名称')
    parent = models.ForeignKey('self', on_delete=models.SET_NULL, 
null=True, related_name='subs',
blank=True, verbose_name='父级地区')
    class Meta:
        db_table='tb_areas'
        verbose_name = '地区'
        verbose_name_plural = verbose_name

父级地区blank设置为True后,通过admin管理界面填写数据的时候,父级地区可以不填。

# 1.查询id为200001的地区
area = Area.objects.get(id=200001)
# 2.查询area下级地区  由一查多
# sub_areas = Area.objects.filter(parent_id=200001)
# 由一查多:一对象.多类名小写__set.all()
sub_area = area.area_set.all()
# 一旦设置了related_name='subs'之后,查area下级地区
sub_areas = area.subs.all()

4.1shell脚本添加地区数据

我们给数据库添加数据的时候,不一定非得在数据库中操作,我们还可以写一个脚本文件,添加一条可以多次执行的命令。

写一个 .sh脚本文件,我们直接执行此文件就可以执行了。

#! /bin/bash
mysql -u<用户名> -p<用户密码> -h<数据库服务器ip> <数据库> < sql文件;

4.2省市县三级联动API

1.获取所有省级地区的信息。

API: GET /areas/
参数:
响应:
    [
        {
            "id":"省id",
            "name":"省名称"
        },
        ...
    ]

代码逻辑:

a 查询所有省级地区的信息。

b 将省级地区的数据序列化并返回。


2.选择某个省市,获取省下面的市的信息。

API: GET /areas/(?P<pk>\d+)/
参数:
    通过url地址传递省id
响应:
    [
        {
            "id":"市id",
            "name":"市名称"
        },
        ...
    ]

3.选择某个市时,获取市下面的区县的信息。

API: GET /areas/(?P<pk>\d+)/
参数:
    通过url地址传递市的id
响应:
    [
        {
            "id":"区县id",
            "name":"区县名称"
        },
        ...
    ]

4.可以将上面2、3两个接口合并,写成下面的接口。获取指定地区的信息。

API: GET /areas/(?P<pk>\d+)/
参数:
    通过url地址传递地区id
响应:
    {
        "id":"地区id",
        "name":"地区名称",
        "subs":[
            {
                "id":"下级地区id",
                "name":"下级地区名称"
            },
            ...
        ]
    }

代码逻辑:

a. 根据pk查询指定地区的信息。

b. 将地区数据序列化并返回。(地区下级地区需要进行嵌套序列化)

关联对象嵌套序列化:使用指定的序列化器

省市县三级联动只需要实现两个接口即可1、4

相关文章
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的大学生二手电子产品交易平台的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的大学生二手电子产品交易平台的详细设计和实现(源码+lw+部署文档+讲解等)
83 0
|
7月前
|
小程序 关系型数据库 MySQL
Gitee项目分享——学之思开源考试系统,食堂大妈看完都学会了
Gitee项目分享——学之思开源考试系统,食堂大妈看完都学会了
|
7月前
|
开发框架 小程序 Java
免费开题报告|基于SpringBoot+Vue的校内跑腿平台
免费开题报告|基于SpringBoot+Vue的校内跑腿平台
100 0
免费开题报告|基于SpringBoot+Vue的校内跑腿平台
|
Linux 数据库 文件存储
美多商城项目(六)
美多商城项目(六)
|
存储 安全 数据安全/隐私保护
美多商城项目(二)
美多商城项目(二)
|
应用服务中间件 API 数据库
美多商城项目(十)
美多商城项目(十)
|
SQL NoSQL 关系型数据库
美多商城项目(九)
美多商城项目(九)
|
存储 搜索推荐 NoSQL
美多商城项目(七)
美多商城项目(七)
|
存储 NoSQL 前端开发
美多商城项目(八)
美多商城项目(八)
|
API 数据库 数据安全/隐私保护
美多商城项目(三)
美多商城项目(三)