什么是软件
软件:
计算机中按照特定的顺序组织的计算机数据和指令的集合,是一个或者一些功能实现的集合,简而言之,软件就是计算机中可运行的程序。
软件的分类
软件在计算机中一般分为三类,系统软件,应用软件和介于两者之间的中间件。
系统软件
直接安装在计算机硬件上进行数据交互的大型软件,是对计算机硬件的第一次扩展,其他软件都是在系统软件上运行的。
常见的系统软件:window、Android、Linux、UNIX等。
应用软件
安装在操作系统之上,用来完成某个或者某些功能的软件,我们常常说的软件大多数时候指的就是应用软件,如office、浏览器、聊天软件等待。
应用软件的分类
我们一般分类,按照不同的标准会得到不同的分类,如果我们对应用软件安装是否可以上网(联网)来分,可以得到两大类:单机软件和网络软件。安装是否需要本地安装客户端,也可以得到两大类:C/S架构软件和B/S架构软件。
单机软件
安装在操作系统上,可以独立运行并且可以不需要网络软件的功能的应用软件,如office办公软件,单机游戏等。
网络软件
安装在操作系统上,必须要连接网络才能正常执行软件功能的应用软件,如社交软件QQ、微信、电子邮箱、爱奇艺等。
C/S结构软件
该类软件由两部分组成,
client
(客户端)和server
(服务器端)组成。用户一般需要先下载安装客户端,之后使用客户端来连接服务器,如QQ、微信、MySQL数据库等。
B/S结构软件
该类软件一般之后服务器端(
server
),而客户端由第三方提供的浏览器(browser
)提供,用户使用的时候,不需要下载安装客户端,只要安装了浏览器即可。用户通过浏览器来访问服务器,浏览器就是界面和客户端。
web软件
什么是web?
WEB:英文单词[网状物],主要用于表示计算机中的广域网络[world wide web](www)。
world wide web
:全球广域网络,也称为万维网,是一种基于超文本和HTTP的全球性的、动态交互的、跨平台的分布式图形信息系统,是建立在internet上的一种网络服务。
什么是web软件?
web软件,是一种基于web为其数据交互基础的计算机软件 .该类型软件,通过web万维网的数据交互协议,通过网络进行数据传输 .主要目的是高效率的跨平台跨地区数据共享
什么是协议?
协议:是一种共同协商、计议之后通过的一种约定。
网络协议:互联网中的不同主机之间互相传递数据的一种约定,由OSI组织定义协议的描述模型(通常称为7层网络传输模型),规范网络传输的各种协议性质。
PS1
:OSI(Open System Initiative)开放式系统互联,一个推动开源软件发展的非盈利性质的组织。
PS2
:OSI/RM参考模型(Open System Interconnection Reference Model),是由国际化标准ISO(International Oranization for Standardization)提出的一个网络系统互联参考模型
PS3
:OSI/RM参考模型
OSI模型层 | 功能描述 | 涉及协议 |
---|---|---|
应用层Application layer | 文件传输、电子邮件等等 | FTP/TFTP/HTTP/SMTP/ DNS/Telnet.. |
表示层Presentation layer | 数据格式化、代码转换数据加密等等 | 无 |
会话层Session layer | 建立或者解除与其他节点之间的联系 | 无 |
传输层Transport layer | 提供端对端的接口 | TCP/UDP |
网络层Network layer | 数据包传输路由 | IP/ICMP/RIP/OSPEIGMP/BGP.. |
数据链路层Datalink layer | 传输有地址的帧错误检测功能 | SLIP/GSLIP/PPP/ARP/RAPR/MTU.. |
物理层Physical layer | 二进制数据在物理媒体上的传输 | 中继器、集线器、双绞线等等 |
web开发时使用的网络传输协议?
协议名称 | 描述 |
---|---|
IP协议 | 是将多个包交换网络连接起来,在源地址和目标地址之间传输数据包并对数据包进行拆分和重组以适应不同的网络大小 |
TCP协议 | Transmission Control Protocal 传输控制协议一种端对端的、可靠的、基于IP的传输层协议。特点:3次握手建立连接;4次挥手断开连接 |
UDP协议 | User Datagram Protocal用户数据报协议一种无连接的传输层协议 |
FTP协议 | File Transfer Protocal文件传输协议。TCP/IP协议族中的一种。特点:FTP协议包含两部分[服务器][客户端] |
SMTP协议 | Simple Mail Transfer 简单邮件传输协议。TCP/IP协议族中的一种:邮件发送服务协议 |
POP3协议 | Post Office Protocal-Version3 邮局协议版本3。TCP/IP协议族中的一种 |
HTTP协议 | HyperText Transfer Protocal超文本传输协议 |
HTTPS协议 | HyperText Transfer Protocal over Secure Socket Layer。安全HTTP协议通道,简称安全的超文本传输协议 |
web开发行业术语
硬件:组成计算机的各种元器件,如CPU、硬盘、键盘、鼠标等。
服务器:专门用于提供网络数据访问服务的主机。
客户端:发起请求访问数据的主机的计算机软件。
网络:有大量计算机和网络介质组成,用于计算机间进行数据交互。
协议:访问数据的数据编码及传输方式或者规定。
软件
web服务器:专门将指定大数据共享在网络中的一种数据容器软件
web程序:可以在网络上访问并且进行数据处理的程序
web接口:浏览器通过url地址可以访问调用的一个函数或者方法
GET和POST的区别
1、 提交参数的位置不同:
GET 提交的数据会放在 URL 之后,以?分割 URL 和传输数据,参数之间以&相连,如
http://www.baidu.com/test?name=test&id=123456。
POST 方法是把提交的数据放在 HTTP 包的Body中。
2、提交参数的大小不同(理论上,存在争议):
GET 提交的数据大小有限制(因为浏览器对 URL 的长度有限制),这点要根据实际情况而论,目前浏览器种类比较多,不同的浏览器大小限制不同。
而 POST 方法提交的数据理论上没有限制,但是不建议太大。
3、安全问题上:
GET 方式提交数据,会带来安全问题,因为参数是裸露在地址栏上,所以较不安全。
POST方式参数在body中,所以安全性较高(注意:只是较高,不是很安全,在http协议下,不管哪种提交方式,都是明码提交,只要有抓包工具,都能抓取数据的!!!)
4、是否浏览器可以收藏
GET请求因为参数在地址栏上,因此可以收藏(因为参数也会保存啊)。
而POST请求不行,不能被浏览器收藏,因为参数无法被浏览器保存。
wsgi接口开发
wsgi(web server gateway interface):web服务网管接口,是一个web服务网关接口组件。
所谓网关接口,就是指代的一个处理节点,处理节点反映到web程序中就是一个简单的处理函数,如定义一个处理根节点的接口
在Python中,Python语言也实现了wsgi的web接口编程,如下代码案例演示:
"""
python使用wsgi编程demo
"""
def index(env,respose):
# 设置响应头信息
respose("200 OK",[("Content-Type","text/html;charset=utf-8")])
print(env)
print(env["PATH_INFO"])
print(env["QUERY_STRING"])
msg = "欢迎访问我的第一个页面"
return [msg.encode("utf-8")]
# 导入Python实现了wsgi接口编程的模块和方法
from wsgiref.simple_server import make_server
# 设置ip地址和端口及处理函数
httpd = make_server("",8080,app=index)
# 启动服务器
httpd.serve_forever()
启动程序,使用浏览器访问http://localhost:8080/,
打印控制台env参数查看,我们发现env是一个字典,注意其中PATH_INFO和QUERY_STRING这两个key对应的值。
PATH_INFO获取的就是该页面的URI,我们就可以利用它来传递参数
QUERY_STRING获取的是使用get请求传递的参数。
第一套简单web程序
PS:软件核心处理结构开发
绣春刀——无常簿
需求:相传明洪武年间,东西两厂各执牛耳把持天下,尤以东厂厂公手中一本无常簿最是恐怖,只要上了无常簿的人,不论是王公大臣还是塞外王侯,都不过是阎王叫你三更死,绝不留人到五更
无常簿:
查看所有可疑人员名单 http://localhost:8000/findall
查看所有良民名单列表 http://localhost:8000/findgood
查看所有嫌犯人员名单 http://localhost:8000/findbad
实现如下:
# 导入python实现了wsgi网关接口的模块
from wsgiref.simple_server import make_server
"""
一个基于WSGI编程的demo
"""
all_name = ["吴庭艳", "赵雨", "任彦彪", "张书豪", "刘栋宇", "高家星", "刘杰"]
def index(env, response):
"""
:param env: 上下文环境
:param response: 相应对象
:return: 类型是二进制数据,为页面展示提供数据
"""
response("200 OK", [("Content-Type", "text/html;charset=utf-8")])
# QUERY_STRING 传递客户端的参数 注意是?这种传参方式
# params = env["QUERY_STRING"]
# name = params.split("=")
# print(name)
# print("客户端传递过来了name={}")
path = env["PATH_INFO"][1:]
print(path)
# if path == "login":
# return login(env, response)
if path == "findall":
return findall(env, response)
elif path == "findgood":
return findgood(env, response)
elif path == "findbad":
return findbad(env, response)
else:
msg = " 相传明洪武年间,东西两厂各执牛耳把持天下,尤以东厂厂公手中一本无常簿最是恐怖,
" \
"只要上了无常簿的人,不论是王公大臣还是塞外王侯,都不过是阎王叫你三更死,绝不留
" \
"人到五更
" \
"无常簿:
" \
"查看所有可疑人员名单 http://localhost:8000/findall
"\
"查看所有良民名单列表 http://localhost:8000/findgood
" \
"查看所有嫌犯人员名单 http://localhost:8000/findbad
"
return [msg.encode("utf-8")]
# def login(env, response):
# css = open("templates/css3.html", "r", encoding="utf-8")
# content = css.read()
# return [content.encode("utf-8")]
def findall(env, response):
ls3 = ','.join(all_name)
return [("所有可疑人员名单:
%s" % ls3).encode("utf-8")]
def findgood(env, response):
good_name = [all_name[0], all_name[2], all_name[4], all_name[6]]
good = ','.join(good_name)
return [("所有良民名单列表:
%s" % good).encode("utf-8")]
def findbad(env, response):
bad_name = [all_name[1], all_name[3], all_name[5]]
bad = ','.join(bad_name)
return [("所有嫌犯人员名单:
%s" % bad).encode("utf-8")]
if __name__ == '__main__':
# 构建一个wsgi web网关接口的应用
server = make_server("", 8080, app=index)
print(" server running……")
# 启动应用
server.serve_forever()