定制小程序开发Python Web开发基础

定制小程序开发分清前端和后端,定制小程序开发前后端分离,定制小程序开发后端进行数据的处理,定制小程序开发前端进行的是数据的格定制小程序开发式化和显示

一、B/S开发和HTTP协议(分清楚CS和BS的区别)

B/S定制小程序开发其实就是一种特殊的C/S    B/S指的是Browser-Server

定制小程序开发将浏览器认为是特殊的客户端(client),其支持HTTP协议,能够通过URL定制小程序开发向服务端发起请求,定制小程序开发等待服务端返回HTML等数据,定制小程序开发并在浏览器内可视化展示的程序

Server,支持HTTP(s) 协议,定制小程序开发能够接受众多客户端发起的HTTP协议请求,定制小程序开发经过处理将HTML定制小程序开发等数据返回给浏览器

定制小程序开发本质上来说,BS是一种特殊的CS,即客户端是一种支持HTTP协议且能解析并渲染HTML的软件,服务端必须是能够接收多客户端HTTP访问的服务器软件

HTTP协议底层基于TCP协议实现

BS开发分为两端开发:  

     1.客户端开发,或称:如HTML,CSS(层叠样式表),JavaScript

     2.服务端开发,Python有WSGI,Django,Flask,Tornado等

HTTP协议

该协议是无状态协议,同一个客户端的两次请求之间没有任何关系,从服务器端角度来说,它不知道这两个请求来自同一个客户端

cookie 解决了无状态,引入cookie之后服务器端会通过键值对来识别请求连接的客户端

就是服务器端必须要求浏览器端要保留的键值对,每次发出请求时会一并将cookie发送到服务器端

 类型为“小型文本文件”,是某些网站为了辨别用户身份,进行跟踪而储存在用户本地终端上的数据(通常经过加密),由用户计算机暂时或永久保存的信息

键值对消息;浏览器发起每一请求时,都会把cookie消息发给服务器端;是一种客户端,服务器端传递数据的技术;服务端可以通过判断这些信息,来确定这次请求是否和之前的请求有关联;一般来说cookie信息是在服务器端生成,返回给客户端的;客户端可以自己设置cookie信息

类似的还有session

URL组成

URL可以说就是地址,uniform resource locator统一资源定位符,每一个链接指向一个资源供客户端访问

scheme模式,协议:

http,ftp,https,file,mailto等等,mysql等都是类似这样写

host:port

www.baidu.com:80  80端口是默认端口可以不写,域名会使用DNS解析,域名会解析成IP才能使用,实际上会对解析后返回的IP的TCP的80端口发起访问

/path/to/resource

path,指向资源的路径

?key1=value1&key2=value2

query string,查询字符串,问号分割,后面key=value形式,且使用&符号分割

参数处理和资源路径的处理是重中之重

HTTP消息

消息分为Request,Response

Request:浏览器向服务器发起的请求

Response:服务器向客户端请求的响应

请求和响应消息都是由请求行,Header消息报头,Body消息正文组成

请求

请求消息行(第一行):请求方法Method   请求路径   协议版本CRLF(中间是空格隔开  CRLF表示回车换行)

 请求方法Method(重点)

 推荐工具 postman

常见传递消息的方式

1.GET方法使用Query String

 通过查询字符串在URL中传递参数  将请求到的资源全部放在Header部分,具体在请求行第一行

2.POST方法提交数据

 3.URL中本身就包含信息

响应

响应消息行: 协议版本   状态码   消息描述CRLF

 status code状态码

 

无状态,有连接和短连接

无状态之前提到过,指的是服务器无法知道2次请求之间的联系,即使是前后2次同一个浏览器也没有任何数据能够判断出是同一个浏览器的请求,后来可以通过cookie,session来判断

有连接,是因为它基于TCP协议,是面向连接的,需要三次握手,四次断开

短连接,HTTP1.1之前,都是一个请求一个连接,而TCP的连接创建销毁成本高,对服务器有很大的影响,所以自HTTP1.1开始,支持keep-alive,默认也开启(设置为True),一个连接打开后,会保持一段时间(可设置),浏览器再访问该服务器就是用这个TCP连接,减轻了服务器压力,提高了效率

二、WSGI概述和APP端开发(搞不懂)

 WSGI主要规定了服务器端和应用程序(app)间的接口    WSGI:Web服务器网关接口(Web Server Gateway Interface)

WSGI服务器------wsgiref

wsgiref是python关于WSGI的参考实现库  ref表示参考的意思(reference)

 WSGI服务器作用

    1.监听HTTP服务端口(TCPServer,默认端口80)

    2.接收浏览器端的HTTP请求并解析封装成environ环境数据

    3.负责调用应用程序,将environ和start_response方法传入

    4.将应用程序响应的正文封装成HTTP响应报文返回浏览器端

WSGI APP应用程序端

1.应用程序应该是一个可调用对象

Python中应该是函数,类,实现了_call_f方法的类的实例

2.这个可调用对象应该接收两个参数

3.以上的可调用对象实现,都必须返回一个可迭代对象

environ和start_response这两个参数名可以是任何合法名,但是一般默认都是这两个名字

应用程序端还有其他的规定,暂且不用关心

environ

environ是包含HTTP请求信息的dict对象

 

start_response

 

三、类Flask框架请求封装

服务器端

服务器程序需要调用符合上述定义的可调用对象APP,传入environ,start_response,APP处理后,返回响应头和可迭代对象的正文,由服务器封装返回浏览器端

simple_server只是参考用,不能用于生产

测试用命令

 -I使用HEAD方法

-X指定方法   -d传输数据

到这里就完成了一个简单的web程序开发

 

 为了更好的理解WSGI框架的工作原理,现在开始动手自己写一个web框架

类Flask框架实现

从这里开始将一步步完成一个WSGI的web框架,从而了解web框架的内部机制

WSGI请求environ处理

WSGI服务器程序会帮我们处理HTTP请求报文,但是提供的environ还是一个用起来不方便的字典

 最重要的是倒数第三四行的内容

QUERY_STRING查询字符串的解析

WSGI服务器程序处理过HTTP报文后,返回一个字典,可以得到查询字符串('QUERY_STRING','id=1234&name=tom')。这个键值对用起来不方便

1.编程序解析

 2.使用cgi模块   已过期,不建议使用

 可以看到使用这个库,可以解析查询字符串,一定要注意到value是列表,why?

这是因为同一个key可以有多个值

cgi模块过期了,建议使用urllib

3.使用urllib库

 parse_qs函数,将同一个名称的多值保存在字典中,使用了列表保存

comment=1,a,c这不是多值,这是一个值

age是多值

environ的解析----webob库

环境数据有很多,都是存在字典中的,字典的存取方式没有对象的属性访问方便

使用第三方库webob,可以把环境数据的解析,封装成对象\

webob简介

Python下,可以对WSGI请求进行解析,并提供对响应进行高级封装的库

安装直接使用pip命令即可   pip install webob

webob.Request对象

将环境参数解析并封装成requests对象

GET方法,发送的数据是URL中Query string,在Request Header中

request.GET就是一个字典MultiDict,里面就封装着查询字符串

POST方法,“提交”的数据是放在Request Body里面,但是也可以同时使用Query String。

request.POST可以获取Request Body中的数据,也是个字典MultiDict

若不关心什么方法提交,只关心数据,可以使用request.params,它里面是所有提交数据的封装

 

MultiDict

MultiDict允许一个key存了好几个值

导入方式: from webob.multidict import MultiDict

 

webob.response对象

html='<h1>欢迎光临</h1>'.encode("utf-8")

return [html]

wsgify.dec装饰器

from webob.dec import wsgify

然后在模块上面 @wsgify便完成了装饰

 

 

 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发