Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用
一丶Http协议
http协议简介
超文本传输协议(hyper Text Transfer Protocol :HTTP),是一种用于分布式,协作式和超媒体信息系统的应用层协议.
HTTP是万维网的数据通信的基础,http的有很多的应用,但最著名的是用于web浏览器和web服务区之间的双工通信(双工:即双通道)
http协议使用最广泛的一个版本 --HTTP1.1 , 2015年http2.0版本发布
http协议概述
# 1. Http是一个客户端 和 服务端 ,请求和应答的标准.
# 2. 客户端发起一个http请求到服务端,服务端向客户端返回一些存放在服务器上的资源.
# 3. http协议存在'应用层',http需要可靠的传输,http是基于TCP/IP传输之上的协议
由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
http工作原理
1.client端连接到WebServer端(建立一个基于tcp的套接字连接)
2.客户端发起http请求(通过tcp套接字,向服务端发送一个文本的请求报文.报文包含:请求行,请求头,空行和请求数据)
3.Web服务器接收请求并返回HTTP响应(web服务器解析请求,定位请求资源. 通过tcp套接字向客户端发送响应,响应包含:响应状态行,响应头部,空行和响应数据)
4.释放tcp连接
# 若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5.客户端浏览器解析html数据
# 客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示
浏览器 url请求经历的事情
### 浏览器 url请求经历的事情
# 1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
# 2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
# 3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
# 4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
# 5. 释放 TCP连接;
# 6. 浏览器将该 html 文本内容显示;
http请求方法
http/1.1协议定义了八种方法,最常用post和get方法
# 1. get
获取数据
# 2. post
提交数据,数据封装在请求体里面
# 3. head
与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
# 4. put
向指定资源位置上传其最新内容。
# 5. delete
请求服务器删除Request-URI所标识的资源
# 6. trace
回显服务器收到的请求,主要用于测试或诊断
# 7. options
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
# 8. connect
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)
注意事项:
I. 方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
II. HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当匹配下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。例如PATCH(由 RFC 5789 指定的方法)用于将局部修改应用到资源。
http状态码
http响应的第一行都是状态行,3位数字组成的状态码.状态码和状态描述端语由空格分隔
# 1XX信息---请求已被服务器接收
# 2XX成功---请求成功,请求已被服务器接收,解析,并响应
# 3XX重定向---重新请求别的url
# 4XX请求错误---请求含有错误,或资源不存在.
# 5XX服务器错误---服务器处理错误,或者是服务宕机,网速慢等影响
URL
统一资源定位符
# 1. 传送协议。
# 2. 层级URL标记符号(为[//],固定不变)
# 3. 访问资源需要的凭证信息(可省略)
# 4. 服务器。(通常为域名,有时为IP地址)
# 5. 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
# 6. 路径。(以“/”字符区别路径中的每一个目录名称)
# 7. 查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
# 8. 片段。以“#”字符为起点
例子
// http://www.baidu.com:80/news/index.html?id=250&page=1 为例, 其中:
http,是协议;
www.baidu.com,是服务器;
80,是服务器上的网络端口号;
/news/index.html,是路径;
?id=250&page=1,是查询。
http请求格式
http响应格式
二丶Django的使用
下载安装
1.cmd安装
# 使用 pip 安装
pip3 install django==1.11.23 -i https://pypi.tuna.tsinghua.edu.cn/simple
2.pycharm
# 1. 选择File
# 2. 选择settings配置
# 3. 选择 Project: PythonDjango,
# 4. 选择 Project Interpreter----> 选中使用的解释器---->点击 '+' 号 ---->搜索django,specify version 选择版本---->点击Install Package
创建项目
1.cmd
# 1. 在某文件下,进入cmd命令行
# 2. 输入: django-admin startproject 项目名 , 如:django-admin startproject mySite
# 3. 创建项目成功,进入mySite
# 4. 启动项目: python manage.py runserver ip 端口 如: >python manage.py runserver 192.168.XXX.XXX:8001
2.pycharm
# 1. 选择Django项目
# 2. 填写此项目存在地址和项目名称
# 3. 创建成功
# 4. 点击绿色三角启动按钮
模板文件配置:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "template")], #重点: template文件夹位置
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
静态文件配置
# settings文件配置
STATIC_URL = '/static/' # HTML中使用的静态文件夹前缀
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"), # 静态文件存放位置
]
静态资源配置过程如下图: