Vue + drf 打造前后端分离的生鲜电商平台 —— 周报 4

2024-02-25 12:40

本文主要是介绍Vue + drf 打造前后端分离的生鲜电商平台 —— 周报 4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

		                    ——————  学习周报 2019.2.10


在这里插入图片描述

掌握的技术:
  • Vue + Django REST framework 前后端分离技术
  • restful api 开发流程
  • Django REST framework 的功能实现和核心源码分析
  • Sentry 完成线上系统的错误日志的监控和警告
  • 第三方登录和支付宝支付的集成
  • 本地调试远程服务器代码技巧


完成情况:

  • “用户登录与手机注册”
    • drf 的tock登录和原理
    • viewsets 配置认证类
    • json web token 的原理
    • json web token 方式完成用户认证
    • vue 和 jwt 接口调试
    • 云片网发送短信验证码
  • django知识点学习


笔记:

1、drf 的tock登录和原理

  • 详见 Django REST framework 官方文档。
  • 采用tock机制。
  • 配置settings.py:
验证用户登录信息:
REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.BasicAuthentication','rest_framework.authentication.SessionAuthentication',),
}
  • 配置 INSTALLED_APPS:
INSTALLED_APPS = ['rest_framework.authtoken'
]
  • 配置url
  • 注意理解django下的源码。

2、viewsets 配置认证类

  • 可以分接口配置认证。解决某些接口需要认证才可以访问,某些接口不需要认证就可以访问
  • 怎么做?
    • 在需要配置认证的接口中进行认证判断
      from rest_framework.authentication import TokenAuthentication
      某一个接口:authentication_classes = (TokenAuthentication, )
      

3、json web token 的原理

  • 前后端分离的系统中,最常用的用户认证方式是:JWT模式。
  • 原理: https://www.jianshu.com/p/180a870a308a
  • JWT的主要作用:
    • (一)可附带用户信息,后端直接通过JWT获取相关信息。
    • (二)使用本地保存,通过HTTP Header中的Authorization位提交验证。
  • JWT用户认证:

在这里插入图片描述

  • 1、首先,前端通过Web表单将自己的用户名和密码发送到后端的接口。这一过程一般是一个HTTP POST请求。建议的方式是通过SSL加密的传输(https协议),从而避免敏感信息被嗅探。
  • 2、后端核对用户名和密码成功后,将用户的id等其他信息作为JWT Payload(负载),将其与头部分别进行Base64编码拼接后签名,形成一个JWT。形成的JWT就是一个形同lll.zzz.xxx的字符串。
  • 3、后端将JWT字符串作为登录成功的返回结果返回给前端。前端可以将返回的结果保存在localStorage或sessionStorage上,退出登录时前端删除保存的JWT即可。
  • 4、前端在每次请求时将JWT放入HTTP Header中的Authorization位。(解决XSS和XSRF问题)
  • 5、后端检查是否存在,如存在验证JWT的有效性。例如,检查签名是否正确;检查Token是否过期;检查Token的接收方是否是自己(可选)。
  • 6、验证通过后后端使用JWT中包含的用户信息进行其他逻辑操作,返回相应结果。
						本段文字来源于简书:https://www.jianshu.com/p/180a870a308a

4、json web token 方式完成用户认证

  • GitHub下载开源项目包: django rest framework jwt
  • 官方文档: http://getblimp.github.io/django-rest-framework-jwt/
  • 安装:
    在这里插入图片描述
  • 配置 jwt 认证接口: 见文档
  • 测试

5、vue 和 jwt 接口调试

  • 使用jwt接口配合vue完成认证登录:
    在这里插入图片描述
    在这里插入图片描述

  • 自定义用户认证函数:

    • settings.py中:

      AUTHENTICATION_BACKENDS = ('users.views.CustomBackend',
      )
      
  • 在users / views.py下定义用户认证类:

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
from django.db.models import QUser = get_user_model()class CustomBackend(ModelBackend):"""自定义用户验证"""def authenticate(self, username=None, password=None, **kwargs):try:user = User.objects.get(Q(username=username) | Q(mobile=username))if user.check_password(password):return userexcept Exception as e:return None
  • 过期时间设置:—— 在settings.py下
import datetime
JWT_AUTH = {'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),'JWT_AUTH_HEADER_PREFIX': 'JWT',
}

6、云片网发送短信验证码

  • 利用云片网发送短信验证码
  • 云片网文档:单条发送
  • APIKEY很重要,注意不要泄露。
    在这里插入图片描述
    在这里插入图片描述
  • 在apps下新建文件夹 utils,在 utils下新建 yunpian.py :
# -*- coding: utf-8 -*-
import json
import requestsclass YunPian(object):def __init__(self, api_key):self.api_key = api_keyself.single_send_url = "https://sms.yunpian.com/v2/sms/single_send.json"  # 单条发送def send_sms(self, code, mobile):parmas = {"apikey": self.api_key,"mobile": mobile,"text": "【Taotao生鲜】您的验证码是{code}。如非本人操作,请忽略本短信".format(code=code)}response = requests.post(self.single_send_url, data=parmas)re_dict = json.loads(response.text)return re_dictif __name__ == "__main__":yun_pian = YunPian("xxxxxxxxxxxxxxxxxxxx")   #  APIKEYyun_pian.send_sms("2019", "xxxxxxxxxx")   # 电话号码
  • 当发送失败时,在系统设置里面加入IP白名单。(将自己的服务器的IP或者本地IP加入白名单)


下周计划:

  • 手机注册:
  • drf 实现发送短信验证码接口
  • uesr serializer 和 validator 验证
  • django信号量实现用户密码修改
  • vue和注册功能联调
  • 商品详情页功能
  • viewsets实现商品详情页接口
  • 热卖商品接口实现
  • 用户收藏接口实现
  • drf 的权限验证
  • 用户收藏功能和vue联调

这篇关于Vue + drf 打造前后端分离的生鲜电商平台 —— 周报 4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745510

相关文章

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交