程序中的框架和生活中搭建的框架的功能是相同的,框架来完成一些基础的工作,
程序员在此基础上开发实现自己业务功能的代码;
把程序员从繁琐的重复性的代码中解脱出来,提交开发效率;

所有的Web应用框架本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 一些常用框架(Django、Tornado、Flash)是对socket服务端进行的封装,使得基础功能更加完善。
由于Django框架是B/S架构,所以我们需要了解一些前端的知识,比如HTTP,URL,HTTP请求格式和响应格式。
Django框架基础请求方式: GET 和 POST 方式
GET请求:地址栏访问、超链接访问都是get请求方式,get请求方式不安全,地址栏大小有限。
POST请求:内容在请求体中,数据安全,理论上内容可以无限。
请求地址:访问服务器的哪个目录。
请求协议: HTTP版本有1.0和1.1两个版本, 1.0版本建立连接后立即断开,下次访 问需要再次建立连接, 1.1版本 建立连接后可以不用断开,直到不发送信息后 才断开节约了资源;

请求头分析:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
表示客户端可以接受的内容类型, 多个值使用;分号隔开 q=0.9 表示权重优先级,*/*表示可以接受任意类型内容;
2、Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
表示客户端可以接受的语言
3、User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64;
浏览器信息,例如使用的是网井的内核, windows64位系统;
4、Accept-Encoding: gzip, deflate–>>支持的压缩格式
5、Host: localhost:8888====>访问地址
6、Connection: keep-alive —>>保持连接 和HTTP1.1版本有关,默认保持3s
7、Content-Type: application/x-www-form-urlencoded
表单提交时才有可能出现,表示表单的数据类型,使用url编码,url编码 % 16位数
8、Content-Length: 7 —>post请求 请求体长度
9、Upgrade-Insecure-Requests: 1–>>告诉服务器,浏览器可以处理https协议、

请求空行分析:
就是一个分隔符,用来区分请求头和请求体的;

请求体分析:
只有POST请求才有请求体,
因此 POST请求 请求体中存放的是表单提交的键值对。
Django框架基础
Django框架基础响应首行(状态行)分析:
HTTP/1.1 200 OK
包含 协议–>>HTTP/1.1, 响应码(状态码)—>>200 , 状态码描述—>>OK
状态码:
200: 服务器很好的处理了客户端的请求,一切 OK
302: 重定向
例如经常去一家饭店吃饭,突然某一天饭店搬迁,只剩下一个门,门上写着新 店在左边100米处,然后你根据纸条找到新饭店; 302就相当于门上的条,当你 访问一个网站时他给你返回302你需要重新访问新的网址; 这里面发生了2次请求
304:通常表示资源文件在服务器没有更改,而浏览器端又有缓存,这时候回送 304 状体码通知浏览器拿本地的缓存显示
404:表示客户端访问的资源路径有问题或者资源问题不存在
500:表示服务器出现了 异常.

响应头部分析:
server: Apache-Coyote/1.1—>> 服务器版本号
Set-Cookie: JSESSIONID=ECA8005D1235BBB6B9CFCC338A8206FD;
Path=/03test; HttpOnly学cookie时在讲
Content-Type: text/html;charset=ISO-8859-1响应字符集,告诉浏览器以什么样的字符集解码;
3、Content-Length: 265 响应体长度
4、Date: Fri, 23 Jun 2017 13:45:01 GMT 发送日期 少8个小时;
5、Expires: -1、Cache-control:no-cache、Pragma:no-cache 三个响应头一起使用, 表示禁止浏览器缓存当前页面. 每个浏览器厂商对认识的禁止头不同因此三 个一起使用。

B/S架构

B/S即:Browser与Server,中文意思:浏览器端与服务器端架构。
只需在浏览器上通过HTTP去请求服务器端相关的资源(网页资源)。
Django框架基础这样我们就可以自己实现Web框架了。

自定义web框架

Django框架基础
Django框架基础
扩展:
1.解决返回给浏览器中文乱码问题:
很多浏览器的默认编码是GBK 这个时候就会出现乱码,我们可以用添加请求头的方法解决这个问题

Django框架基础2. 查看浏览器请求时的路径位置
Django框架基础Django框架基础

根据不同的路径返回不同的内容

如何让我们的Web服务根据用户请求的URL不同而返回不同的内容呢?
我们可以从请求相关数据里面拿到请求URL的路径,然后拿路径做一个判断,然后根据不同的路径返回不同的内容
Django框架基础
函数版
Django框架基础Django框架基础函数进阶版
Django框架基础Django框架基础

返回具体的HTML文件

不管是什么内容,最后都是转换成字节数据发送出去的。 我们可以打开HTML文件,读取出它内部的二进制数据,然后再发送给浏览器。
Django框架基础Django框架基础

总结

**1.web框架的本质:socket 服务端 与浏览器的通讯。
2.socket 服务端功能可以划分为3部分:

  • a.负责与浏览器收发消息(socket)在python中有专门的框架
    wsgiref/uWsgi/gunicorn…
  • b.根据用户访问不同的路径执行不同的函数
  • c.从HTML中读取出内容,并且完成字符串的替换
    3.Python中 web 框架的分类:
  • 按照2上面的功能分类
    (1).框架自带a,b,c 功能 ----> Tornado
    (2).框架自带b,c,使用第三方的a ---->Django
    (3).框架自带b,使用第三方的a,c ---->Flask
    -按照另一个维度划分
    (1).Diango ,Tornado–>大而全(做一个网站用到的技术都有)
    (2).其他 例如 Flask 轻量级只封装了核心功能。
    a部分和b、c 部分通讯需要遵守WSGI 协议。

相关文章: