Django深入浅出-web概述
目录
9. 总结:web软件专业术语、组成部分、处理流程、编程步骤 9
[if !supportLists]1. [endif]软件分类
什么是软件?
软件:计算机中按照特定的顺序组织的计算机数据和指令的集合!一般情况下软件被分为系统软件、应用软件以及介于两者之间的中间件
软件:就是计算机中可运行的程序
软件的分类?
系统软件:直接安装在硬件上和计算机硬件进行数据交互大软件,如windows操作系统、android手机操作系统等等
应用软件:安装在操作系统上,用于解决一定的实际业务问题的软件,如office办公软件、QQ聊天交互软件等等
中间件:应用软件和操作系统软件交互的特殊的软件,如负载均衡软件等等
应用软件的分类:
[应用是否联网]
单机软件:安装在操作系统上,可以独立运行并执行软件的功能的应用软件,如office办公软件
网络软件:安装在操作系统上,必须要连接网络才能正常执行软件功能的应用软件,如社交软件QQ
[应用客户端是否需要安装]
C/S结构软件:客户端(Client)服务器(Server)软件,客户端需要单独下载安装之后,才能正常操作的软件
B/S结构软件:浏览器(Browser)服务器(Server)软件,客户端不需要下载安装,只需要用户的电脑上安装有浏览器就可以正常使用软件的全部功能
Django的重点【关键词】
网络软件
B/S结构
B/S结构的网络软件的开发,一般称为web软件的开发
PS:web网站和web软件的区别
web网站一般是主要用于信息展示的网络软件,客户端可以通过浏览器访问指定的url地址的方式来访问到需要大信息,此类软件数据处理量很小甚至没有,如政府部门介绍网站等等
web软件一般主要用于进行信息展示及数据处理的软件,客户端可以通过浏览器访问指定的url地址并进行一定的数据处理功能,如淘宝、京东网站等等
[if !supportLists]2. [endif]web软件概述
什么是web?
web,英文单词[网状物],主要用于表示计算机中的广域网络[world wide web]
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/OSPE
IGMP/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协议通道,简称安全的超文本传输协议
[if !supportLists]3. [endif]web开发行业术语
硬件
服务器:专门用于提供网络数据访问服务的主机
客户端:发起请求访问数据的主机
网络
协议:访问数据的数据编码及传输方式
软件
web服务器:专门将指定大数据共享在网络中的一种数据容器软件
web程序:可以在网络上访问并且进行数据处理的程序
web接口:浏览器通过url地址可以访问调用的一个函数或者方法
..
[if !supportLists]4. [endif]wsgi接口开发
wsgi接口:全名为(web server gateway interface)是一个web服务网关接口组件
所谓网关接口,就是指代的一个处理节点,处理节点反映到web程序中就是一个简单的处理函数,如定义一个处理根节点的接口(index)[web_demo01.py]
def index(env, response):
response(“200 OK”, [(“Content-type”, “text/html”)])
return [b”
Hello Web!
”]PS:固定语法,wsgi接口函数包含两个参数
env参数:请求中包含的环境变量上下文信息
response参数:响应操作对象
既然是网关服务接口,定义好接口之后,接下来就是启动web服务器,让接口暴露在网络上以供其他人访问[web_demo01.py]
from wsgiref.simple_server import make_server
httpd = make_server(“”, 8000, index)
print(“web server starting……”)
httpd.serve_forever()
运行上述程序
python web_demo01.py
打开浏览器,地址栏访问指定大url地址:http://localhost:8000
[if !supportLists]l [endif]扩展:获取客户端发送的参数数据
定义wsgi接口函数
def index(env, response):
response(“200 OK”, [(“Content-type”, “text/html)])
name = env[“PATH_INFO”][1:]
msg = “
hello %s!
” % (name or ‘web’)return [name.encode(“utf-8”)]
编写服务启动程序,启动服务器并进行访问
from wsgiref.simple_server import make_server
httpd = make_server(‘’, 8000, index)
httpd.serve_forever()
启动服务器之后,浏览器中访问http://localhost:8000/jerry,得到如下结果
备注:请求方式
客户端向服务器发送数据请求,根据请求的性质区分不同的请求方式
HTTP1.1协议中共定义了8种不同的请求方式
[if !supportLists]l [endif]OPTIONS:返回服务器对指定资源数据支持的HTTP请求方法,一般用于测试服务器功能的可用性
[if !supportLists]l [endif]HEAD:返回服务器上对指定资源数据的HTTP请求头,在不需要返回全部数据的情况下测试指定功能大可用性
[if !supportLists]l [endif]GET:向服务器请求指定的资源
[if !supportLists]l [endif]POST:向服务器提交数据请求处理,数据被包含在请求体中
[if !supportLists]l [endif]PUT:向服务器上传指定的数据
[if !supportLists]l [endif]DELETE:向服务器发送请求删除指定数据
[if !supportLists]l [endif]TRACE:回显服务器收到的请求,主要进行功能测试诊断
[if !supportLists]l [endif]CONNECT:HTTP1.1协议中预留请求方式,可以将连接改为管道方式的代理服务器
[if !supportLists]5. [endif]第一套简单web程序
PS:软件核心处理结构开发
绣春刀——无常簿
需求:相传明洪武年间,东西两厂各执牛耳把持天下,尤以东厂厂公手中一本无常簿最是恐怖,只要上了无常簿的人,不论是王公大臣还是塞外王侯,都不过是阎王叫你三更死,绝不留人到五更
无常簿:
查看所有可疑人员名单 http://localhost:8000/findall
查看所有良民名单列表 http://localhost:8000/findgood
查看所有嫌犯人员名单 http://localhost:8000/findbad
[if !supportLists]6. [endif]扩展:多环境多项目协同开发
由于不同的web项目,可能依赖的项目环境是不一样的,如公司前期项目开发依赖的是python2.7的开发环境,开发的web框架使用的是django1.8,过一段时间之后,公司项目组响应国家号召与时俱进,python开发环境调整成了3.4的版本,同时web框架也相应进行了调整,使用django1.11进行开发,此时我们在自己的开发电脑上,就需要有满足原始项目的开发环境,同时有满足当前项目开发的环境,就需要多个环境进行不同的切换工作了。
核心的问题主要集中在两点
[if !supportLists]l [endif]切换python版本
[if !supportLists]l [endif]切换模块(如django)版本
切换python版本,最简单的操作可以通过配置不同的环境变量来实现,优点是操作简单,缺点是在一台电脑上这样的切换会让不同的项目不能并行运行操作,要付出跟多大代价去实现不同python环境下的项目并行操作,此时有一种切换Python并且满足不同环境操作的工具软件出现了:pyenv,该软件主要应用与Like Unix环境,也就是说通常情况下在Unix/Linux内核环境下可以无缝使用
PS:参考https://github.com/pyenv/pyenv
实现了不同python版本切换之后,不同的项目依赖的模块环境可能不一致,就需要在不同大项目中搭建不同的模块环境,有一个模块是virtualenv,这个虚拟环境就可以通过指定不同大文件夹使用不同大开发环境来实现不同大操作。
本节主要以virtualenv作为重点进行讲解。
PS:大部分的开发主要集中在windows环境下,尤其是python环境的切换在常规项目中比较少见,所以virtualenv的使用还是比较广泛的。
[if !supportLists]6.1. [endif]windows下不同项目的协同开发
下面是virtualenv在windows中的使用方式和常见命令,通过项目驱动的方式进行引导讲解如下:
[if !supportLists]l [endif]virtualevn的安装
pip install virtualenv
virtualenv --version
[if !supportLists]l [endif]指定文件夹,创建一个python虚拟环境
virtualenv [name]命令用于创建一个名称为name的虚拟环境
创建项目文件夹
进入项目文件夹,创建一个python虚拟环境
[if !supportLists]l [endif]切换到虚拟环境进行项目开发
在项目文件夹中,执行[name]/Scripts/activate,启用虚拟环境
启用虚拟环境之后,前面就会多出来一个虚拟环境提示圆括号
此时该文件夹下的项目开发依赖大就是当前虚拟python环境
[if !supportLists]l [endif]退出虚拟环境
退出虚拟环境,通过执行deactivate命令退出即可。
[if !supportLists]7. [endif]扩展:pycharm virtualenv
pycharm作为python开发神器,已经内置了对虚拟Python环境开发的支持
可以在工具中创建多个python开发环境并进行切换以适应不同项目的开发。
[if !supportLists]l [endif]打开设置文件夹,找到python开发环境设置
[if !supportLists]l [endif]点击创建一个虚拟环境
弹出的对话框中,输入虚拟环境的名称以及保存虚拟环境文件的文件夹路径,点击OK创建即可
[if !supportLists]l [endif]pycharm中切换python虚拟环境
创建好不同的虚拟环境之后,就可以通过python interceptor进行不同环境的切换
[if !supportLists]8. [endif]常见的web开发框架
wsgi作为底层的web操作,使用起来开发效率较低,并且编码复杂度较高,要求开发人员对web操作的方方面面都有所涉及和了解才能参加到正常的开发工作中,该模块可以用于进行底层代码建设,但是不适用于常规的企业级项目开发
在常规企业级web项目开发过程中,要求保证开发效率高、开发成本地、开发周期短、见效快等特点,所以在企业级项目开发时会优先选用已经成型的开发框架来降低开发成本提高开发效率。
python常见的web开发框架有很多,并且实现原理和操作方式有所不同,根据实际需求进行选用即可
web.py:轻量级的开源的web框架,简单而且功能强大
Flask:python编写的轻量级web开发框架
Django:python编写的一个开源的web应用框架
Tornado:即是一个web服务器也是一个web框架
[if !supportLists]9. [endif]总结:web软件专业术语、组成部分、处理流程、编程步骤
项目任务:绣春刀——无常簿