前后端分离--博客项目

1,前后端分离

1.1 什么是前后端分离

​ 前端: 即客户端,负责渲染用户显示界面【如web的js动态渲染页面, 安卓, IOS,pc客户端等】

​ 后端:即服务器端,负责接收http请求,处理数据

​ API:Application Programming Interface 是一些预先定义的函数,或指软件系统不同组成部分衔接的约定

​ 前后端分离 完整请求过程

​ 1,前端通过http请求后端API

​ 2,后端以json形式返回前端数据

​ 3,前端生成用户显示界面【如html , ios , android】

判断前后端分离得核心标准: 谁生成显示页面

​ 1,后端生成【前后端未分离】 ex: flask -> render_template

​ django -> HttpResponse(html)

​ 2, 前端生成【前后端分离】

1.2 优点

​ 1,各司其职

​ 前端:视觉层面,兼容性,前端性能优化

​ 后端:并发,可用性,性能

​ 2,解耦,前端和后端均易于扩展

​ 3,后端灵活搭配各类前端 - 如安卓等

​ 4,提高用户体验

​ 5,前端+后端可完全并行开发,加快开发效率

1.3 分离常见问题

问题 答案
如何解决http无状态? 采用token(详情见下方章节)
如果前端为JS,如何解决跨域问题? 采用CORS(详情见下方章节)
如何解决csrf问题 采用token
Single Page web Application 是否会影响Search Engine Optimization效果 会,前后端分离后,往往页面不存在静态文字【例如新闻的详细内容】
”老板,这个逻辑到底是让前端做还是后端做啊?“ 底线原则: 数据校验需要前后端都做
”老板,前端工作压力太大了啊“ 团队协作不能只是嘴上说说
动静分离和前后端分离是一个意思么? 动静分离指的是 css/js/img这类静态资源跟服务器拆开部署,典型方案-静态资源交由CDN厂商处理

1.4 实现方式

1,Django/Flask 后端只返回json

2, 前端 -> ex: js向服务器发出ajax请求,获取数据,拿到数据后动态生成html

3, 前端服务和后端服务 分开部署

2,token - 令牌

学前须知:

​ 1,base64 ‘防君子不防小人’

方法 作用 参数 返回值
b64encode 将输入的参数转化为base64规则的串 预加密的明文,类型为bytes;例:b‘guoxiaonao’ base64对应编码的密文,类型为bytes;例:b’Z3VveGlhb25hbw==’
b64decode 将base64串 解密回 明文 base64密文,类型为bytes;例:b’Z3VveGlhb25hbw==’ 参数对应的明文,类型为bytes;例:b’guoxiaonao’
urlsafe_b64encode 作用同b64encode,但是会将 ‘+‘替换成 ‘-’,将’/‘替换成’_’ 同b64encode 同b64encode
urlsafe_b64decode 作用同b64decode 同b64decode 同b64decode

代码演示:

import base64
#base64加密
s = b'guoxiaonao'
b_s = base64.b64encode(s)
#b_s打印结果为 b'Z3VveGlhb25hbw=='

#base64解密
ss = base64.b64decode(b_s)
#ss打印结果为 b'guoxiaonao'

​ 2,SHA-256 安全散列算法的一种(hash)

​ hash三大特点:

​ 1)定长输出 2)不可逆 3) 雪崩

import hashlib
s = hashlib.sha256() #创建sha256对象
s.update(b'xxxx')  #添加欲hash的内容,类型为 bytes
s.digest()  #获取最终结果
s.hexdigest()


​ 3,HMAC-SHA256 是一种通过特别计算方式之后产生的消息认证码,使用散列算法同时结合一个加密密钥。它可以用来保证数据的完整性,同时可以用来作某个消息的身份验证

import hmac
#生成hmac对象
#第一个参数为加密的key,bytes类型,
#第二个参数为欲加密的串,bytes类型
#第三个参数为hmac的算法,指定为SHA256
h = hmac.new(key, str, digestmod='SHA256 ') 
h.digest() #获取最终结果

h.hexdigest()#获取结果

​ 4,RSA256 非对称加密

​ 1,加密: 公钥加密,私钥解密

​ 2,签名: 私钥签名, 公钥验签

2.1 JWT - json-web-token

1,三大组成

​ 1,header

​ 格式为字典-元数据格式如下

{
   'alg':'HS256', 'typ':'JWT'}
#alg代表要使用的 算法
#typ表明该token的类别 - 此处必须为 大写的 JWT

​ 该部分数据需要转成json串并用base64 加密

​ 2,payload

​ 格式为字典-此部分分为公有声明和私有声明

  公共声明:JWT提供了内置关键字用于描述常见的问题

此部分均为可选项,用户根据自己需求 按需添加key,常见公共声明如下:

{
   'exp':xxx, # Expiration Time 此token的过期时间的时间戳
 'iss':xxx,# (Issuer) Claim 指明此token的签发者
 'aud':xxx, #(Audience) Claim 指明此token的
 'iat':xxx, # (Issued At) Claim 指明此创建时间的时间戳
 'aud':xxx, # (Audience) Claim	指明此token签发面向群体
}

​ 私有声明:用户可根据自己业务需求,添加自定义的key,例如如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值