美多商城项目(四)

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

每日分享

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

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

小闫语录:

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

美多商城项目(四)

项目地址

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

优质文章推荐:

公众号使用指南

redis操作命令总结

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

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

本文分享自微信公众号 - 全栈技术精选(Pythonnote)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Devops专栏

Django 2.1.7 Admin - 列表页选项

https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial07/

17730
来自专栏日常撸知识

用python的Django框架来做一个简单的web应用(一)

什么是web开发:“通俗的说,web开发就是我们说的做网站。它分为网页部分和逻辑部分也就是我们说的前台与后台,前台负责与用户的交互,显示数据。用到HTML显示数...

12140
来自专栏日常撸知识

python用selenium驱动浏览器爬取天府新区二手房房价--并展示在网页上

3,web 应用测试工具selenium库: pip install selenium

11820
来自专栏Devops专栏

Django 2.1.7 Admin - 重写模板,自定义后台

Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段 Django 2.1.7 Admin - 列表页选项 Django 2.1....

61620
来自专栏Devops专栏

Django 2.1.7 Admin - 编辑页选项

Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段 Django 2.1.7 Admin - 列表页选项

14930
来自专栏日常撸知识

用python的Django框架来做一个简单的web应用(二)

创建管理员用户:执行语句python manage.py createsuperuser, 输入用户名和密码可以创建一个超级管理员用户。注意输入密码的时候不会显...

16920
来自专栏日常撸知识

Django后台和前台使用summernote富文本编辑器

简单介绍一下怎么在django的管理后台和用户使用网页中使用django-summernote富文本编辑器,其他富文本编辑器类似。

36840
来自专栏Devops专栏

Django 2.1.7 自定义form表单中上传图片、显示图片

Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段 Django 2.1.7 Admin - 列表页选项 Django 2.1....

24820
来自专栏Devops专栏

Django 2.1.7 上传图片 - Admin后台管理

Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段 Django 2.1.7 Admin - 列表页选项 Django 2.1....

18630
来自专栏日常撸知识

用python的Django框架来做一个简单的web应用(三)

在urls.py 中添加app_name='app_name'#app的名称。通过app_name加以区分。在html模板中可以调用<li><a href="{...

8110

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励