第1章 从新浪微博聊起多端应用

当人们听到“新浪”,脑海里第一个浮现的关联词是“新浪微博”,而不是“新浪博客”的时候,互联网已经发展到了多端应用的时代。如果一个互联网公司的业务数据,还只能通过PC端访问,那么可以丝毫不危言耸听地说,这家互联网公司不论经营的业务是什么,都很难在这个时代有所建树。

同样地,假如时至今日,一个互联网开发者只会用Django开发PC端的Web项目,还以Python全栈工程师自居的话,相信他去哪家公司面试,都会被当成入职以后需要再培训很久,才能进入工作的“小白”,一旦在老板心中被贴上“小白”的标签,再怎么乐观,也需要半年的时间来撕掉吧?

其实“小白”跟“老鸟”相差的,不就是“老鸟”比“小白”多了解了一些知识点吗?只不过这些知识点是实际项目中必然会用到,而学校和培训班却很少提及的。一般的程序员,只能在年复一年的工作经验中获得这些知识点。幸运的是,本书里满满的都是这样的知识点,从本章开始,向一只“老鸟”蜕变吧。

1.1 AOP面对切面编程思想

这一节,我们来介绍多端应用的基础编程思想。站在一个项目架构者的角度,对项目的宏观布局做到胸有成竹是一项必备技能。其实多端应用的概念刚开始火起来的时候,Python全栈开发还方兴未艾(至少不像近些年这么热),当时PHP正如日中天,AOP就被广泛应用。想要与资深的Web开发人员侃侃而谈,那么AOP是一个绝佳的谈资。

AOP(Aspect Oriented Programming,面向切面编程),如果要长篇大论地介绍其最早是怎么来的,是通过多少复杂的机制实现的,那将是晦涩难懂的原理,下面举一个例子来跟大家解释什么是AOP。

假如文轩和阿福家里各有一棵苹果树,今天市场上苹果很畅销,文轩和阿福都很开心,因为他们可以摘苹果去卖钱。但是第二天市场上桃子变得畅销了,苹果滞销了,文轩不开心了,因为他只有一颗苹果树,他的苹果树只能结苹果,长不出桃子来。

但是阿福依然很开心,因为他在他的苹果树上嫁接了一根桃枝,当天就长出了很多桃子,又卖了很多钱。第三天市场上橘子变得畅销了,文轩依然不开心,因为他只有苹果;阿福依然很开心,因为他在苹果树上又嫁接了一根橘子枝。第四天阿福在苹果树上嫁接了一根梨枝,第五天嫁接了一根西瓜枝,第六天嫁接了一根巧克力枝……阿福的做法就是AOP,阿福的苹果树就是一个基于面对切面编程思想架构的Web。

AOP在软件架构中的应用非常广泛,是一种如果使用AOP架构最好,如果不使用AOP也行,至多就是耦合度高点儿的应用。但是在Web项目开发中,特别是进入移动互联网时代以来,基于AOP思想,对项目进行前后端分离的基本架构,已经成为了一种必须要做的事情。2012年以前,新浪的CTO如果跟CEO说:“新浪微博只能从PC端访问。”那么并没有什么问题,但是,如果今天,新浪的CTO跟CEO说:“新浪微博只能从PC端访问。”,那还不如直接说“世界那么大,我想去看看。”显得更文艺一点。

2017年12月,胡润研究院发布了《2017胡润大中华区独角兽指数》,榜单上的所有“独角兽”公司,都可以通过PC端和移动端进行业务访问,这个结果其实是可预料的。是的,现在多端应用可以说是绝大部分公司的业务标配,身为一个程序员,必须要有一棵能长巧克力的苹果树。

1.2 Django的前后端分离

相信对Django有所了解的读者都知道,Django的普通项目是基于MVT模式(Model View Template)开发的,而Django的前后端分离项目则是基于MVVM模式(Model View ViewModel)开发的,解耦得更彻底,彻底到前后端分离了,甚至可以说分离成了两个项目。

Django前后端分离项目原理:后端遵循restful规范开发API,与前端进行数据交互,实现多端应用。

1.2.1 什么是API

API作为一个互联网行业的术语,很少被直接翻译过来,因为在中文中并没有一个对应的词汇可以完全表达其含义,如果强行翻译,可以被翻译为数据接口,但显然这个翻译并不准确。举个现实中的例子,比如购房网上面有全国房屋买卖的交易数据,万达公司在需要一些房屋交易数据来作为参考投产项目时,如果自己去做社会调研,费时、费力,非常不合算,所以万达公司每年都要向购房网支付数百万元来购买这些交易数据。大家是否考虑过,这一笔交易是以怎样的方式进行的呢?

所谓的一手交钱一手交货,交钱的流程比较简单,只要万达公司将资金汇给购房网就可以了,但是购房网是怎样将全国房屋买卖的交易数据交给万达公司呢?难道是直接将数据库复制给万达公司一份吗?这显然不可能。购房网是将一些API和权限交给万达公司的技术人员,万达公司的技术人员就可以通过调用这些API获取到他们所需要的交易数据。当然,API是一个广义的概念,除了可以通过调用API获取到数据资源外,还可以通过API提供和获取技术服务,在无数的SDK(软件开发包)中都有所体现。在本章中,我们主要是通过API获取数据。

在业内编写这类API,不论是使用什么编程语言,都需要遵循RESTful规范,当然这是众所周知的事情。

1.2.2 RESTful规范——如何写API

API接口应该如何写?API跟URL有什么不同?这绝对是不可以被忽略的问题,如果API写得乱七八糟,很有可能会失去负责前端开发的同事的信任。将API写得“高大上”,也是一名开发者工匠精神的一种体现。下面来介绍如何写API。

(1)如果是对同一个表进行数据操作(增、删、改、查),应该使用一条API,然后根据method的不同,进行不同的操作。


GET/POST/PUT/DELETE/PATCH

(2)面向资源编程,通过API提交的参数最好是名词,比如name,尽量少用动词。


http://www.abc.com/name

(3)体现版本,在API中加入像v1、v2这样的版本代号:


http://www.abc.com/v1/name
http://www.abc.com/v2/name

(4)体现API,让使用者一眼能看出这是API而不是URL,应该在API中加入提示:


http://www.abc.com/api/v1/name
http://www.abc.com/api/v2/name

(5)使用HTTPS,这一项原本是为了安全考虑,但是随着国内外互联网环境对安全性越来越重视,谷歌浏览器对所有不是HTTPS请求的链接全都会提示用户此链接为不安全链接,腾讯等平台也对小程序等产品强制要求使用HTTPS协议。不过,好在国内许多提供云服务的公司,像腾讯云、阿里云等,都提供免费的SSL证书,供开发者去申请。


https://www.abc.com/api/v1/name
https://www.abc.com/api/v2/name

(6)响应式设置状态码,例如,200和201代表操作成功,403代表权限不够,404代表没有指定资源,500代表运行时发现代码逻辑错误等。


return HttpResponse('adgbag',status=300)

(7)API的参数中加入筛选条件参数,也可以理解为获取资源优先选择GET的方式。


https://www.abc.com/api/v2/name?page=1&size=10

(8)返回值的规范,不同的method操作成功后,后端应该响应的返回值如下:


https://www.abc.com/api/v1/name

不同的提交方式代表对数据进行不同的操作:

·GET:所有列表。

·POST:新增的数据。


https://www.abc.com/api/v1/name/1

·GET:单条数据。

·PUT:更新,返回更新的数据。

·PATCH:局部更新,返回更新的数据。

·DELETE:删除,返回空文档。

(9)返回错误信息,应该加入错误代号code,让用户能直接看出是哪种类型的错误。


ret {code:1000,data:{{'id':1,'title':'lala'}}
}

(10)返回的详细信息,应该以字典的形式放在data中。


ret { code:1000,data:{{'id':1,'title':'lala','detail':http://www.……}}
}

RESTful规范是业内约定俗成的规范,并不是技术上定义的公式,在实际生产使用中,大家还是要根据业务灵活运用。

1.2.3 Django REST framework简介

在Python的Web业内广为流传一句话“使用Python进行Web全栈开发者必会Django,使用Django开发前后端分离项目者必会Django REST framework”。使用Python进行Web全栈开发的框架,主流的就有4个,但是大家除了使用Django以外,其他的都很少使用。Django本身也拥有一些模块,可以用于完成前后端分离项目的需求,但是大家除了使用Django REST framework以外,也很少使用其他模块。

所以但愿读者在读到此处之前,没有浪费更多的时间去学习那些很少会被用到的知识。Django REST framework之所以能够拥有如此超然的地位,源于其将Python语言特有的一些优势发挥得淋漓尽致,虽然其中也有可以再完善的空间,但可以毫不夸张地说,如果可以将Django REST framework的10个常用组件融会贯通,那么使用Django开发前后端分离的项目中有可能遇到的绝大部分需求,都能得到高效的解决。

Django REST framework的10个常用组件如下:

·权限组件;

·认证组件;

·访问频率限制组件;

·序列化组件;

·路由组件;

·视图组件;

·分页组件;

·解析器组件;

·渲染器组件;

·版本组件。

Django REST framework官方文档的地址是https://www.django-rest-framework.org/。

新建一个Django项目,命名为book,作为贯穿本书的演示项目。选择PyCharm作为开发工具,在新建目录时,新建App命名为users。

第1章 从新浪微博聊起多端应用相关推荐

  1. python django web典型模块开发实战_带你读《Python Django Web典型模块 开发实战》之一:从新浪微博聊起多端应用-阿里云开发者社区...

    Python Django Web典型模块 开发实战 点击查看第二章 点击查看第三章 寇雪松 编著 第1章 从新浪微博聊起多端应用 当人们听到"新浪",脑海里第一个浮现的关联词是& ...

  2. 多线程+SOCKET编程实现qq群聊的服务端和客户端

    多线程+SOCKET编程实现qq群聊的服务端和客户端 标签(空格分隔): 多线程 网络编程 线程同步 一.设计思路 1.服务端 每来一个客户端连接,服务端起一个线程维护: 将收到的消息转发给所有的客户 ...

  3. 远程服务器 上传公钥,ssh-keygen教程第5章:copy公钥要服务端

    ssh-keygen教程第5章:copy公钥要服务端 上一章,我们已经生成了公钥和私钥,这一章我只需要将公钥copy到服务器(远程主机)就可以实现免密码登录了. graph LR 本地主机 --ssh ...

  4. 品达物流TMS项目_第11章 TMS司机端、快递员端开发

    品达物流TMS项目_第11章 TMS司机端.快递员端开发 文章目录 品达物流TMS项目_第11章 TMS司机端.快递员端开发 第11章 TMS司机端.快递员端开发 1. 导入功能代码 2. 分布式事务 ...

  5. socket.io实现聊天功能——第一章 、群聊

    效果:点击这儿 一.准备工作–搭建项目 1.确保node环境已经安好,我已将npm替换成了cnpm 淘宝镜像. 2.新建一个名为 " chat " 的文件夹. 3.在 " ...

  6. [贝聊科技]网页端「应用跳转」技术实现演变

    本文作者:Mr.Luo ,贝聊前端经理.本文同时发布于作者 个人博客 . 由于网页传播的便捷性,从网页向APP导流几乎是所有APP厂商都会采用的推广手段,具体来说就是在网页上提供一些触发点(例如按钮. ...

  7. 用C语言写一个通信软件,客户端可以实现文字聊天,文件传输,建立群聊;服务端可以创建账号吧...

    首先,需要为客户端和服务端分别编写代码,客户端的代码应该包括实现文字聊天.文件传输和建立群聊的功能,而服务端的代码则需要实现创建账号的功能.需要考虑到网络的安全性.客户端的用户体验以及服务端的可扩展性 ...

  8. 多线程实现 qq 群聊的服务端和客户端

    效果比较简陋,但是功能可以实现 效果: 服务器 #include <iostream> #include <winsock2.h>//必须写在windows.h前面 #incl ...

  9. 小满Vue3第三十六章(Vue如何开发移动端)

    视频教程Vue3 + vite + Ts + pinia + 实战 + 源码 +全栈_哔哩哔哩_bilibili 如果使用npm init vue@latest 报错 error when start ...

最新文章

  1. Linux mysql 5.6: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (usin
  2. python画折线图详解-python如何画折线图
  3. 观察者模式及Java实现例子
  4. python提示install无效_为什么是python设置.py给我“错误:选项installdir无法识别”错误?...
  5. c++抛出异常与栈展开(stack unwinding)
  6. 软件工程综合实践 作业 Axure介绍
  7. mysql笔记03 查询性能优化
  8. 【C++深度剖析教程16】智能指针的分析
  9. 芯片IC附近为啥要放0.1uF的电容?看完秒懂~
  10. 想加入IT行业为何建议你学Python,不要错过时机哦
  11. MC音乐网免费解析下载工具 v1.0
  12. React 16 加载性能优化指南
  13. sqoop导入与导出总结
  14. 三星固态硬盘装linux,三星T5 SSD制作ubuntu18.04随身携带即插即用与win10共享文件真爽~(简单粗暴安装大法一步到位)...
  15. 【Monster High】MMD镜头+动作打包下载.zip
  16. android 解压相关问题,解压文件失败的情况
  17. sequence-数据库-sjk
  18. Clion注册码与注册机
  19. 《工程伦理》网课第五章课后习题答案
  20. 北方工业大学编译原理——四、五章单元测试内容复习

热门文章

  1. MAC和PHY的区别
  2. VLOG旅游类短视频如何通过抖音进行变现?运作模式有什么精髓之处?不妨了解下
  3. 哪个国家拥有全世界最牛逼的程序员?
  4. SpringBoot电脑商城--登录功能
  5. 参加了个算法比赛,真是一言难尽啊
  6. 【Java基础系列】第3章 流程控制
  7. 【Python】素人万字总结,PyCharm2022.2专业版提升开发效率基本设置及常用快捷键(超实用) Python基本知识一一CSDN21天学习挑战赛
  8. 世界上有10种人,一种懂二进制的,另一种不懂
  9. [绍棠] CGPathAddArc和CGPathAddArcToPoint函数
  10. 记一次centos6.8系统安装