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

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

springboot将lib和jar分离的操作方法

《springboot将lib和jar分离的操作方法》本文介绍了如何通过优化pom.xml配置来减小SpringBoot项目的jar包大小,主要通过使用spring-boot-maven-plugin... 遇到一个问题,就是每次maven package或者maven install后target中的ja

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要