Django之Web框架原理

Django之Web框架原理

为什么要学习所谓的Web框架原理

因为不管是django也好 市场上最火的什么MVC框架也好他就是基于这一套东西,来给你进行一些功能的封装让你用着特别方便,我们要做的不止是学会这些框架学框架的时候要有自己的想法,要知道这个框架的这个地方自己好像试着做也能做出来废话不多说 铁子 奥力给!!

Web框架是什么

Web 应用框架,或者简单的说是“Web 框架”,其实是建立 web 应用的一种方式。从简单的博客系统到复杂的富 AJAX 应用,web 上每个页面都是通过写代码来生成的。我发现很多人都热衷于学习 web 框架技术,例如 Flask 或这 Django 之类的,但是很多人并不理解什么是 web 框架,我们需要理解 Web 如何“工作”的。为此,我将深入挖掘你在浏览器里输入一个 URL 按下 Enter 之后都发生了什么。

Web服务器

Web服务器是不是第一个名词上来就让你头大了 你可以这么理解Web服务器他就是一个中间层他负责处理客户端和服务端之间交互的工作 那我们能不能自己写一个Web服务器 我们都学过最简单的python基于Socket的网络通信,在那里边我们是不是写一个客户端只需要绑定一个端口 然后.listen就可以了

#简单服务器
import socket

server = socket.socket()
ip_port = ('127.0.0.1',8080)
server.bind(ip_port)
server.listen()
while 1:
   conn,addr = server.accept()
   msg = conn.recv(1024).decode('utf-8')
   print(msg)
   conn.close()

这样是不是我们自己写了一个‘服务端’, 我们基于自己再写一个客户端就可以访问这个端口,那么基于浏览器呢?我们在浏览器url栏上输入127.0.0.1/8080之后看会出现什么

首先我们的客户端打印了请求的信息那么是不是说明浏览器可以理解成一个别人写好的客户端呢?先不要着急我们继续看浏览器说什么

浏览器告诉我们我们并没有发送任何数据 这个合理但是我们不发送数据最多不就是阻塞住吗 为什么会报错呢?

浏览器告诉我们我们并没有发送任何数据 这个合理但是我们不发送数据最多不就是阻塞住吗 为什么会报错呢?

这就引出了我们的下一个话题 HTTP协议

HTTP协议

还记得我们接受到的浏览器请求信息吗 第一行是GET/ HTTP /1.1那么这是什么东西呢?你可以暂时理解为浏览器给我们的要求 要求我们用HTTP协议来给浏览器进行回应

关于HTTP协议详情可参见 https://www.cnblogs.com/mark5/p/11219154.html

那么我们就知道了我们按照HTTP协议来对他进行回应不就好了

所以修改我们的自己的服务器代码

#可以让浏览器有反应的服务器
import socket

server = socket.socket()
ip_port = ('127.0.0.1',8080)
server.bind(ip_port)
server.listen()
while 1:
   conn,addr = server.accept()
   msg = conn.recv(1024).decode('utf-8')
   print(msg)
   conn.send('HTTP/1.1 200 OK/r/n/r/n') #为什么这么发后面会给大家解释到
   conn.close()

然后继续看我们这样了之后浏览器会有什么反应呢

我们的浏览器现在才是阻塞住了 你可以理解为现在的浏览器是在 conn.recv()就是说他现在才是等待这接收消息,那么这个东西是不是可以理解为浏览器每一次收东西之前都会先收一个响应头我们就是给他发这么一个响应头他就默认开始接收状态了

现在我们发送一串字符串‘HELLO WEB’

#像级了web服务器的服务器
import socket

server = socket.socket()
ip_port = ('127.0.0.1',8080)
server.bind(ip_port)
server.listen()
while 1:
   conn,addr = server.accept()
   msg = conn.recv(1024).decode('utf-8')
   print(msg)
   conn.send('HTTP/1.1 200 OK\r\n\r\n')#为什么这么发后面会给大家解释到
   conn.send(b'HELLO WEB')             #字节流形式
   conn.close()

效果如图

现在我们可以接收到字符串了 那我们的这个服务器是不是就是一个web服务器了对吧

这时有人问了 你连个页面都没有只有字符串算什么web服务器?

关于这个咱们在进行最后一次扩展

#web服务器
import socket

server = socket.socket()
ip_port = ('127.0.0.1',8080)
server.bind(ip_port)
server.listen()
while 1:
   conn,addr = server.accept()
   msg = conn.recv(1024).decode('utf-8')
   print(msg)
   conn.send('HTTP/1.1 200 OK\r\n\r\n')#为什么这么发后面会给大家解释到
   with open('index.html',mode='rb') as f:
       data = f.read()
       conn.send(data)
   conn.close()
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>Document</title>
   <style type="text/css">
       .content{
           width : 500px;
           height : 500px;
           background-color: black;
           border-radius: 20px;
      }
   </style>
</head>
<body>
   <div class='content'>
       
   </div>


</body>
</html>

然后现在看我们的浏览器会有什么反应

怎么样现在可以说是个web框架了吧 只不过我们没什么功能对吧?那就对了

因为我这个是django的分享对吧 所以下一章我们正式进行到django的学习 在django学习中的一些我们觉得神奇的内容我都分浅显的分析一下原理 不会之说这个东西怎么用

posted @ 2019-12-23 11:28  roniner  阅读(394)  评论(0编辑  收藏  举报