前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

基本概念

什么是前后端分离

前后端分离

  • 前:浏览器

    • HTML、CSS、Bootstrap、JS、JQuery、Vue、NodeJS、webpack
    • 体验为主:炫酷流畅兼容
  • 后:服务端
    • Jvm、springboot、Django、flask、tornado、
    • 三高:高并发、高可用、高性能

传统的不分离


用户在浏览器上发送请求,服务器端接收到请求,根据 Header 中的 token 进行用户鉴权,从数据库取出数据,处理后将结果数据填入 HTML 模板,返回给浏览器,浏览器将 HTML 展现给用户,不分离的核心就是模版,比如 Django 直接将返回数据到模版,通过模版表单将数据返回至后端

  • 业务耦合较强

那这样就有一个问题,从事不分离的开发者,一般需要懂数据库懂框架操作、懂模版前端,小型项目还好,一个人可以抗的下来,你可以加班,但如果项目较大,一个人无法独立完成,需要团队合作


  • 指责划分不明确

并且不分离的情况,所有的业务、代码、逻辑都在一套服务体系内,会造成团队之间沟通混乱,代码风格不统一,每个人的前后端技能水平层次不齐的水平,出了问题找背锅的人更慢,无法快速找到罪魁祸首


  • 开发成本较高

除此之外,不分离还有一个问题,现在的服务,比如一个电商平台,除了WEB端之外,还会有 IOS 端、安卓端的各种 APP,本质上这些软件 APP 用的都是同一套数据,但是现在除了每一套前端的应用界面,由于不分离的情况,还需要给每一个平台不同的 APP 开发多套后端,这个开发成本是很高的,需要很多很多的不同语言的开发者


  • 服务器压力较大

此外页面的渲染本应该是在客户端完成,但是现在都是在服务端渲染好之后再返回给用户,那么在高并发的情况下,会大量占用服务器的资源

  • 提高 SEO 速度,提高搜索引擎收录检索速度

当然,不分离也有好处,页面数据都是渲染好返回的,可以有效提高 SEO的速度


现在的前后端分离

数据渲染的工作在客户端浏览器,不需要服务端完成,服务端专注于提供数据

那么这就要求Django框架不需要返回一个模版页面,而是返回一套***JSON***数据,而由于***JSON***可以在多种语言中支持,是一种交互、兼容非常合适的语言格式,所以现在后台常返回的数据都为**JSON格式的,这个过程也称作序列化


  • 部署解耦

前后端分离再就是部署压力较小,前后端分离部署,可以分离业务,起码在后端宕机时,前端还可以正常服务


  • 业务划分清晰,指责更为明确

后端工程师只需要专注于编写接口,从数据库提取数据,进行逻辑处理,并返回给前端,而前端怎么去渲染,怎么写样式,用什么前端,这都不是后端工程师需要考虑的,后端要做好的就一件事,写好接口就可以


  • 开发成本较低,一套后台可以支持多套前端渲染

一般来说,一套接口编写好之后,业务相同的情况下,是可以在多种 app 端、pc 端进行渲染展示的,不需要额外开发多套耦合的服务,这就很省钱了


  • SEO 优化较差,需要引入一些页面静态化手段

但是前后端分离也有不好的地方,在于页面数据的渲染是需要花费时间的,数据并不是渲染好返回给用户,所以可能会出现白屏时间,并且影响搜索引擎爬虫的检索收录

什么是restful风格

在前后端分离的应用模式里,API接口如何定义?

例如:对于后端数据库中保存了商品的信息,前端可能需要对商品数据进行增删改查,那相应的每个操作后端都需要提供一个API接口:

  • POST /add-goods 增加商品
  • POST /delete-goods 删除商品
  • POST /update-goods 修改商品
  • GET /get-goods查询商品信息

对于接口的请求方式与路径,每个后端开发人员可能都有自己的定义方式,风格迥异。

是否存在一种统一的定义方式,被广大开发人员接受认可的方式呢?

这就是被普遍采用的*API*的RESTful设计风格。

RestFul 规范建议

域名要有标示

Restful 风格建议,Api 服务器的域名要尽量在专用域名之下

如:百度面向用户的站点地址为https://baidu.com

那么后端的接口地址可以为

https://api.baidu.com

也可以放在连接之后

https://baidu.com/api/

路由中体现接口版本号

如果你的接口会不停的升级,那么建议你把接口的版本号维护在URL中,比如图灵机器人就是这么干的,API 的升级会把版本放入连接

https://api.baidu.com/v1/
https://baidu.com/api/v1/
http://openapi.tuling123.com/openapi/api/v2

使用合理的请求方式

对应操作,应该返回操作后的资源结果,比如获取数据,那就应该使用***GET***请求方式

如果是更新数据,那么建议你使用***PUT***或***PATCH***方法

  • GET:获取数据
  • POST:提交数据,创建数据
  • PUT:提交数据,更新数据
  • DELETE:删除数据

还有三个不常用的HTTP动词

  • PATCH:在服务器更新(更新)资源
  • HEAD:获取资源的元数据。
  • OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的

提供参数过滤数据

如果数据较多,返回所有数据是不现实的,那么可以让API提供参数,进行结果返回

?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件

使用合理的状态码

接口返回数据,还要带上合理的状态码进行标记

200 OK - [GET] # 服务器成功返回用户请求的数据
201 CREATED - [POST/PUT/PATCH] # 用户新建或修改数据成功。
202 Accepted - [*] # 表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE] # 用户删除数据成功。

400 INVALID REQUEST - [POST/PUT/PATCH] # 用户发出的请求有错误,服务器没有进行新建或修改数据的操作
401 Unauthorized - [*] # 表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] # 表示用户得到授权(与 401 错误相对),但是访问是被禁止的。
404 NOT FOUND - [*] # 用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET] # 用户请求的格式不可得(比如用户请求 JSON 格式,但是只有 XML 格式)。
410 Gone -[GET] # 用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] # 当创建一个对象时,发生一个验证错误。

500 INTERNAL SERVER ERROR - [*] # 服务器发生错误,用户将无法判断发出的请求是否成功

什么是接口及接口文档

API,全称是Application Programming Interface,即应用程序编程接口,我们日常中习惯简称为“接口”。其实,接口这个词大家应该不会陌生,比如我们平时比较常用的“USB接口”,就是用来存储和传输数据用的;

那什么是API呢,API事实上是在内部预先定义了函数,能够使开发人员无须明白API内部实现的机制,就能够实现某一个功能。

比如说你要实现一个手机注册的功能,那么相应地后台工程师就需要提供一个手机注册的接口,前端开发人员在调用接口实现功能的时候,只需按照既定的规则进行请求即可,不需要去理解该功能的实现逻辑。有了这么一个机制,就使得开发人员间的协作变得非常简洁、高效。

所以,你可以简单地理解为“接口决定了功能”。

接口文档又称为API文档,一般是由开发人员所编写的,用来描述系统所提供接口信息的文档。 大家都根据这个接口文档进行开发,并需要一直维护和遵守。

为什么要写接口文档?
1、项目开发过程中前后端工程师有一个统一的文件进行沟通交流开发
2、项目维护中或者项目人员更迭,方便后期人员查看、维护

如何阅读接口文档

API接口文档一般分为接口描述、接口地址、请求方法、请求参数、响应内容、错误代码、实例几个部分:

接口描述: 简单描述接口的逻辑和作用。例如说明这是一个发送消息的接口、查询天气的接口;

接口地址: 这个地址表示的是网络地址,即url,我们需要调用接口url,获取响应内容;

请求方法: 常见的请求方法为GET和POST,其他的方式见下图;

请求参数: 用来传递信息的变量。即需要请求的字段名的名称和规则:都是哪些字段,字段的类型是什么,是否必填字段等等;

  • URL传参
  • Headers 请求头
  • Body 请求内容

响应内容: 接口返回的字段名称和规则;

错误代码: 对接口的错误用代码进行归类,以便能快速找到错误原因,解决问题;

实例: 实际调用时的响应的内容。


以阿里云API市场为例:

获取access_token

【注意】正常情况下access_token有效期为7200秒,有效期内重复获取返回相同结果,并自动续期。

调试工具:在线调试

请求方式:GET(HTTPS)

请求地址https://oapi.dingtalk.com/gettoken?appkey=key&appsecret=secret

参数说明

参数 类型 必须 说明
appkey String 应用的唯一标识key
appsecret String 应用的密钥

Django前后端分离概念解析相关推荐

  1. Nginx+uwsgi+celery+supervisor部署Django前后端分离项目

    转载 Nginx+uwsgi+celery+supervisor部署Django前后端分离项目 ljmict 0人评论 3887人阅读 2018-08-08 01:29:45 本实验实现了负载均衡.反 ...

  2. Django前后端分离实现登录验证码功能

    Django前后端分离实现登录验证码功能 当下最流行最热门的开发方式当属前后端分离开发,分工也更加明确与专注,前端也是越来越难,几天不学习就跟不上节奏,一个月不学习可以好不夸张的说,你已经不适合这个行 ...

  3. 视频教程-Python+Vue+Django前后端分离项目实战-Python

    Python+Vue+Django前后端分离项目实战 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ...

  4. 视频教程-Angular+Django前后端分离实战项目开发教程-AngularJS

    Angular+Django前后端分离实战项目开发教程 胜蓝博创(韬略课堂)创始人,IT培训讲师,先后在蓝港在线,热酷,乐元素等大型游戏公司任职,参与过多款大型网游.手游的设计和开发,精通页游.手游前 ...

  5. Django CSRF(什么是CSRF?)\Django前后端分离csrf token获取方式

    文章目录 Django CSRF 什么是CSRF? Django CSRF Django CSRF 中间件 Django,Ajax提交csrf_token处理 Django 设置 cookie 中的 ...

  6. Django 前后端分离 ---Django REST Framework框架(1)

    一. 关于前后端分离需要知道的一些术语 (一)什么是RESTful API? 要弄清楚什么是RESTful API,首先要弄清楚什么是REST.REST – REpresentational Stat ...

  7. Django 前后端分离(REST Framework)

    一. 关于前后端分离需要知道的一些术语 (一)什么是RESTful API? 要弄清楚什么是RESTful API,首先要弄清楚什么是REST.REST – REpresentational Stat ...

  8. Django 前后端分离实战项目 生鲜超市(七)之Vue展示商品分类数据和搜索

    Vue展示商品分类数据和搜索 前言 所有vue接口全部在src/api/api.js文件下 代码已上传至github:https://github.com/kalipoison/fresh-marke ...

  9. Django前后端分离1——jwt

    一.前戏 1.base64 方法 作用 参数 返回值 b64encode 将输入的参数转化为base64规则的串 预加密的明文,类型为bytes:例:b'guoxiaonao' base64对应编码的 ...

  10. vue+django前后端分离之hippo后端初始化

    0.依赖 pip install djangorestframework -i https://pypi.douban.com/simple/pip install PymySQL -i https: ...

最新文章

  1. 网络学习笔记—计算机网络基础
  2. Linux系统下的文件管理类常命令及使用方式
  3. leetcode算法题--增量元素之间的最大差值
  4. python用语句输入一个3*3的二维矩阵_python中二维数组的建立,输入和输出
  5. 《Linux网络接口》---------struct ifreq struct ifconf
  6. CentOS6.4 Install FTP
  7. MySQL性能调优与架构设计-架构篇
  8. ofo 回应海外部门集体解散;罗永浩将现身快如发布会;支付宝更名? | 极客头条...
  9. 计算机管理 网络延时打开,如何解决网络延时-如何解决局域网访问延迟问题?通过局域网访问网内机子,有时候半天没 爱问知识人...
  10. 我终于知道,中国互联网是怎么弯道超车,干翻美国了
  11. 想成为产品经理,应该怎么起步?
  12. css让文本不会被选中,鼠标变小手
  13. 小米手机miui12系统usb共享网络
  14. 互联网史上10大经典商战
  15. ASM管理命令行三工具:KFOD、KFED和AMDU
  16. 飞车手游显示服务器连接失败怎么办,QQ飞车手游拉取服务器失败 请检查网络稍后重试...
  17. tar,tar.gz,zip,tar.bz2压缩算法比较,tar.bz2压缩率最大最耗cpu
  18. 情人节买什么礼物比较好呢?最实用的情人节礼物分享
  19. Redis之父Antirez谈副业与主业
  20. 多版本node安装相关知识

热门文章

  1. 中介分析(四)- 因果中介分析
  2. centos7.6安装mysql数据库_CentOS7.6安装MYSQL8.0
  3. git 清除用户名密码
  4. 关键字: CCTV5 天下足球 盗版
  5. c语言元音字母辅音字母,英语字母中的5个元音字母和21个辅音字母
  6. 小学校本课程计算机前言,《创意手工》三河小学校本课程——序言
  7. 椭圆部分面积计算公式及微积分推导过程
  8. 搜索和浏览离线 Wikipedia 维基百科(中/英)数据工具
  9. python转txt到xml并编译为exe
  10. Proxy(代理)服务器