前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >美多商城项目(四)

美多商城项目(四)

作者头像
小闫同学啊
发布2019-07-18 12:58:00
1.2K0
发布2019-07-18 12:58:00
举报
文章被收录于专栏:小闫笔记小闫笔记

正文共: 3099字 预计阅读时间: 8分钟

每日分享

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

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

小闫语录:

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

美多商城项目(四)

项目地址

代码语言:javascript
复制
https://github.com/EthanYan6/E-commerce-sites.git

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

1.登录用户的邮箱设置

代码语言:javascript
复制
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进行邮件发送:

代码语言:javascript
复制
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.用户邮箱验证

代码语言:javascript
复制
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

定义模型类:

代码语言:javascript
复制
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管理界面填写数据的时候,父级地区可以不填。

代码语言:javascript
复制
# 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脚本文件,我们直接执行此文件就可以执行了。

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

4.2省市县三级联动API

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

代码语言:javascript
复制
API: GET /areas/
参数:
    无
响应:
    [
        {
            "id":"省id",
            "name":"省名称"
        },
        ...
    ]

代码逻辑:

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

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

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

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

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

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

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

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

代码逻辑:

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

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

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

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

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • 美多商城项目(四)
    • 项目地址
      • 1.登录用户的邮箱设置
        • 2.用户邮箱验证
          • 3.用户地址管理
            • 4.省市县三级联动
              • 4.1shell脚本添加地区数据
              • 4.2省市县三级联动API
          相关产品与服务
          文件存储
          文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档