【九层之台】Web开发教程:7. 网络

2024-03-18 22:30

本文主要是介绍【九层之台】Web开发教程:7. 网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Network

目录

  • 7. 网络
    • 模型与架构
    • 数据与视图
      • 静态分页面
      • 服务端渲染
      • AJAX
    • axios

7. 网络

在之前的章节里面,我们已经介绍完毕了所有web应用开发所需要的技术和框架,有了这些技能,你已经可以轻松完成一个很不错的交互式网页应用,把精彩纷呈的内容呈现给用户了。

从本章开始,我将补充介绍一些细节技术(和原理),它们经常在网页应用中有重要的作用。例如本章所讲的网络,就是是网页应用无法避免的问题:如何获取数据?

本章很多内容可能都是后端的内容,我在这里稍稍拓展。那为啥要讲呢?“这就是我们想要的!”

模型与架构

网页应用也不能逃离所有应用的限制,纵使你的UI有千般变化,也无法脱离核心数据而存在。如果没有商品数据,怎么显示购买界面?如果没有天气数据,怎么显示天气预报?如果没有用户数据,怎么显示用户中心?此乃巧妇难为无米之炊也。

也许有的人一定要较真:“单机应用不也玩的挺好!”,那我就要回一句:“那你何必用网页应用?”
网页应用本身就是依托网络而存在的,网络也是网页应用的灵活性所在。

因此,我们必然需要通过一定的方法来获得这些数据。在逻辑上,我们把这种数据写入、存储、调取、显示的过程称为应用架构。在架构中,一类数据(例如:每天的天气预报数据)被称为模型。这其实本来是后端(服务器端)需要关心的问题,但是随着前端网页的日益复杂,也渐渐出现在前端。可还记得我们说过,Vuejs的架构是MVVM,即Model-View-ViewModel?

无论采取什么架构,我们无法避免的矛盾在于:数据放在天南海北的某个服务器上,但却需要在你的手机(客户端)上显示出来。在web发展的这么多年当中,解决方法也在不断地更新。让我们来了解一下!

数据与视图

之前说过,视图就是用户看到的用户界面。如何把服务器上的数据放进客户端的视图?
举个例子说明:如果用户A访问了自己的个人信息页面,用户B也访问了自己的个人信息页面,怎么把数据库中的A和B的信息分别显示在两个页面上呢?

静态分页面

已淘汰,可考古

web最早最古老的方法。简单想想,我对每个不同的用户都生成一个网页文件,包含了不同的信息,不就好了吗?用户A访问到的是A.html,B用户访问到的是B.html,搞定!

网页是从网页文件中加载的,网页文件的内容是固定的,因此这是静态页面。

问题也是显著的:大量的代码被重复书写,即使使用程序去生成不同的网页文件,在用户数量变多以后也是一种极大的浪费。

服务端渲染

数十年中的主流做法

随着web的发展,人们发现一个惊喜的事实:只要我用一个程序去接收、处理、响应http请求,并且动态生成需要返回的网页代码,就可以实现对不同的用户显示不同的网页!

例如,用户A向服务器发起了http请求,服务器通过检查http请求中包含的信息,验证数据库中的用户数据发现这是用户A的请求。这时候服务端程序通过查询数据库获得用户A的个人数据,将这些个人数据拼接成一个HTML代码并响应http请求。这样,用户A看到的页面就成功地显示了他的个人数据。同理,用户B也可以通过在http请求中包含他的信息(例如用户名和密码)来获取属于他的页面。

在这种方案中,网页代码都是服务端动态生成的。在服务器上,服务端程序把数据塞进固定的网页样式当中,并把整个网页的代码作为http请求的响应。因此,我们把这一类方法叫做服务端渲染。

这种方法虽然很成熟,也诞生了很多很多的框架,但是有如下一些问题:

  • 服务端计算压力大,需要进行网页内容组合
  • 每次信息获取都需要加载整个网页,浪费流量也不利于交互

最著名的服务端渲染语言可能是PHP(世界最美语言)。PHP的代码作为HTML的一个元素被插入到HTML代码当中。当http请求到来的时候,PHP解释器(运行在服务器上的程序)将HTML代码中的PHP代码解释运行,并用代码运行的结果替换掉PHP代码元素,形成一个没有PHP代码的纯HTML代码。
这时HTML代码中的一部分内容是PHP代码运行的结果,通过这种方式可以实现动态网页内容。
如果有兴趣可以去学习一下哦!这是后端的内容啦!

AJAX

“藕断丝连”

新一代的网络数据获取方式,被称为AJAX。简单来说,在网页文件加载完毕以后,通过网页的JS代码发起http请求获取核心数据,并通过JS代码把获取到的数据显示在页面上。

这种方式的网页代码依然是固定的,动态内容只是根据JS代码中获取到的数据变量显示的网页内容而已。因此,这样的网页是静态页面,却实现了动态页面的效果,甚至更好。在页面数据发生变化的时候,只需要JS代码重新发起请求更新数据,然后显示在页面上即可。

此外,从整个网络应用的访问情况上来看,这种方式可以允许前端页面的CDN缓存(因为前端页面代码不会变),大大降低了服务器的计算压力和流量压力。

CDN是Content Delivery Network的缩写,即内容分发网络,这个我们下次再说。

axios

如何才能在JS代码中发起请求呢?JS自带了一种方式是fetch,但是我认为axios这个JS库更好用。

你可以通过CDN的方式直接引入axios(使用了jsdelivr):

<script src="https://cdn.jsdelivr.net/npm/axios@0.19.2/index.min.js"></script>

对于VueCli的项目来说,你也可以说使用

npm i axios -S

来安装依赖包,或者使用VueCli控制台。然后需要在main.js中引入:

import axios from "axios";
Vue.prototype.$ajax = axios;

通过绑定Vue对象的原型,我们接下来就可以在VueCli的组件中使用this.$ajax来调用axios了。

具体如何使用呢?以发送http的get请求获取百度首页的HTML代码为例(VueCli中用this.$ajax替换axios):

axios.get("https://www.baidu.com/").then((resp) => {console.log(resp.data);}).catch((err) => {alert(err);});

可以看到,axios整体采用了Promise结构,为了好看我们通常把axios单独写一行,然后.get发起get请求,.then内部是一个箭头函数处理正确的响应,.catch内部也是一个箭头函数处理错误响应。axios会自动等待请求返回,然后执行对应的函数。(需要注意:整个axios结构不会阻塞处理进程,也就是说,后面的代码不会理会请求是否返回,而是会继续执行。如果需要让后面的代码等待,需要在axios之前使用await)。

执行了这段代码以后,百度首页的HTML代码就会被输出到控制台上。

http状态码:http协议中规定,http响应必须包含一个状态码用来标定请求的响应情况。如果状态码是2开头的(200或201等),表示请求正确响应;3开头的状态码(301等)表示需要继续请求,例如重定向等;4开头的状态码(404等)表示客户端发起请求错误,服务端不能理解或不能响应;5开头的状态码(502等)表示服务端错误,请求不能响应。

如果需要在请求的时候传入数据,可以在url字符串后面增加一个参数,传入一个对象作为请求参数。axios的请求数据和响应数据都默认使用了JSON格式,在JS代码中可以像访问对象中的变量一样使用。

JSON格式:一种数据在网络中传递的格式,与JS的对象格式非常相似。

这就是axios的基本用法啦!axios还有很多例如baseURLintercept的高级功能,有需要的可以自学哦!同时axios还经常和Vuex一起使用,放在Vuex的action部分当中,各位可以自行实践。

相信各位已经具有一定的自学能力了!

这篇关于【九层之台】Web开发教程:7. 网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经