初始Django

初始Django

首先要知道Django是一种框架,但是框架又是什么呢?

简单来说,框架的本质就是一系列功能集合体,然后可以把不同的功能放在不同的文件中,有了框架以后,就可以让我们写项目整个的周期大幅度的缩短,效率表的极大的提高,一个成熟合适的框架更是可以实现很多我们无法实现的功能

软件开发架构简介

​ c/s 客户端 服务端

​ b/s 浏览器 服务端

​ bs本质也是cs

HTTP协议

超文本传输协议.
应用层协议,为了实现某一类具体应用的协议,并且由某一运行在用户空间的应用程序去实现功能,基于c/s架构进行通信的.
规定浏览器和服务端之间消息传输的数据格式

HTTP事务处理过程

基于客户.服务器模式,而且面向连接的,

  1. 客户与服务器建立连接;
  2. 又向它提出请求
  3. 服务器接收请求,根据请求返回响应文件作为应答;
  4. 客户与服务器关闭连接

web(互联网)服务本质.

​ 也就是当你在浏览器输入网址回车发生那些事?

​ 1.浏览器向服务端发送请求

​ 2.服务端接受请求

​ 3.服务端返回相应响应

​ 4.浏览器接受相应 根据规则 渲染页面展示给用户看

HTTP协议的四个特性

  1. 基于请求响应
  2. 基于TCP/IP之上,作用于应用层
  3. 无状态, (服务端没法保存用户的状态,)cookie session token...
  4. 无连接 (请求一次,我就响应一次,然后立即拔吊无情,从此毫无瓜葛)

websocket(互联网套接字) 相当于是HTTP协议的一个大的补丁,支持长连接

数据格式

有两个,请求和响应,主要就是请求和响应.两者对应一样
请求数据格式:

  • 请求首行(为了标识HTTP协议的版本,当前请求方式)

  • 请求头(一大堆K,V键值对,)

    accept:浏览器通过这个头告诉服务器,它所支持的数据类型
    Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
    Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式
    Accept-Language:浏览器通过这个头告诉服务器,它的语言环境
    Host:浏览器通过这个头告诉服务器,想访问哪台主机
    If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间
    Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链
    Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接

  • /r/n(换行)

  • 请求体(真正的数据,post请求才会有 而且是key:value形式,get不会)

请求首行
b'GET /index HTTP/1.1\r\n
请求头
Host: 127.0.0.1:8080\r\n
Connection: keep-alive\r\n
Cache-Control: max-age=0\r\n
DNT: 1\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36\r\n
Sec-Fetch-Mode: navigate\r\n
Sec-Fetch-User: ?1\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\n
Sec-Fetch-Site: none\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
\r\n
请求体

User-Agent :User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

Accept:客户端可是别的内容类型列表

Host:主机地址

响应格式:

  • 响应首行(http版本 + 状态码 + 状态代码的文本描述)
  • 响应头(包含服务器类型,日期,长度,内容类型)
  • \r\n
  • 响应体 服务器返回的HTML页面或者json数据

响应状态码

用特定的数字表示一些意思

'''
1XX:服务端已经成功接收到你的数据,正在处理,你可以继续提交其他数据

2XX Success(成功状态码):

	200 服务端成功响应客户端发来的消息

	204 表示服务端接收的请求已经被成功处理,但是在返回的响应报文中不含实体的主体部分

3XX Redirection(重定向状态码):

	301 永久性重定向

	302 临时性重定向

4XX Client Error(客户端错误状态码)

	400 表示请求报文中存在语法错误

	401 表示发送的请求需要有通过HTTP认证的认证信息

	403 表示对请求资源的访问被服务器拒绝了

	404 服务器上无法找到请求的资源,是我们最常见的报错

5XX Server Error(服务器内部错误状态码)

	500 表示服务端在执行请求的时候发生了错误

	503 表示服务器暂时处于超负载或者正在进行停机维护,无法处理请求
'''

请求方式

get,post请求,(从字面理解,一个是要数据,一个是提交数据(eg:用户的登录))

url www统一资源定位标志,网络地址

纯手撸web框架

import socket
server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5)

while True:
    conn,addr = server.accept()
    data = conn.recv(1024)
    # print(data)
    conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
    data = data.decode('utf8')
    current_path = data.split('\r\n')[0].split(' ')[1]
    # print(current_path)
    if current_path == '/index':
        with open(r"test.html", 'rb')as f:
            conn.send(f.read())
    elif current_path == '/login':
        conn.send(b'login')
    else:
        conn.send(b'404 error')
    conn.close()

手撸过于麻烦,还好我们的python是调包侠

posted @ 2019-10-20 21:38  Huise.J  阅读(112)  评论(0编辑  收藏  举报