django 框架引入:

web框架本质


  1. web框架本质:
  2. 软件开发架构: c / s ; b/ s
  3. --所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端
  4. import socket
  5. def server():
  6. sk = socket.socket()
  7. sk.bind(("127.0.0.1", 8080))
  8. sk.listen()
  9. while True:
  10. conn, addr = sk.accept()
  11. data = conn.recv(8096)
  12. conn.send(b"OK")
  13. conn.close()
  14. if __name__ == '__main__':
  15. server()

HTTP协议

  1. HTTP协议:
  2. HTTP协议主要统一规定了客户端和服务器之间的通信格式
  3. "b'GET / HTTP/1.1\r\nHost: 127.0.0.1:8080\r\nConnection:...."
  4. 规定请求数据 / 响应数据格式!
  5. 每个HTTP请求和响应都遵循相同的格式,一个HTTP包含HeaderBody两部分,其中Body是可选的。 HTTP响应的Header中有一个 Content-Type表明响应的内容格式

  1. import socket
  2. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  3. sock.bind(('127.0.0.1', 8000))
  4. sock.listen()
  5. while True:
  6. conn, addr = sock.accept()
  7. data = conn.recv(8096)
  8. # 给回复的消息加上响应状态行
  9. conn.send(b"HTTP/1.1 200 OK\r\n\r\n")
  10. conn.send(b"OK")
  11. conn.close()

多功能web服务

  1. 实现多功能web服务:
  2. Web服务根据用户请求的URL不同而返回不同的内容:
  3. 从请求相关数据里面拿到请求URL的路径,然后拿路径做一个判断 ---> 切割 + replace
  4. #s1:
  5. import socket
  6. sk = socket.socket()
  7. sk.bind(("127.0.0.1", 8080)) # 绑定IP和端口
  8. sk.listen() # 监听
  9. # 将返回不同的内容部分封装成函数
  10. def index(url):
  11. s = "这是{}页面!".format(url)
  12. return bytes(s, encoding="utf8")
  13. def home(url):
  14. s = "这是{}页面!".format(url)
  15. return bytes(s, encoding="utf8")
  16. while 1:
  17. # 等待连接
  18. conn, add = sk.accept()
  19. data = conn.recv(8096) # 接收客户端发来的消息
  20. # 从data中取到路径
  21. data = str(data, encoding="utf8") # 把收到的字节类型的数据转换成字符串
  22. # 按\r\n分割
  23. data1 = data.split("\r\n")[0]
  24. url = data1.split()[1] # url是我们从浏览器发过来的消息中分离出的访问路径
  25. conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # 因为要遵循HTTP协议,所以回复的消息也要加状态行
  26. # 根据不同的路径返回不同内容,response是具体的响应体
  27. if url == "/index/":
  28. response = index(url)
  29. elif url == "/home/":
  30. response = home(url)
  31. else:
  32. response = b"404 not found!"
  33. conn.send(response)
  34. conn.close()

封装,分发处理

  1. #s2:
  2. # 将返回不同的内容部分封装成函数
  3. def index(url):
  4. s = "这是{}页面!".format(url)
  5. return bytes(s, encoding="utf8")
  6. def home(url):
  7. s = "这是{}页面!".format(url)
  8. return bytes(s, encoding="utf8")
  9. # 定义一个url和实际要执行的函数的对应关系
  10. list1 = [
  11. ("/index/", index),
  12. ("/home/", home),
  13. ]
  14. while 1:
  15. # 等待连接
  16. conn, add = sk.accept()
  17. data = conn.recv(8096) # 接收客户端发来的消息
  18. # 从data中取到路径
  19. data = str(data, encoding="utf8") # 把收到的字节类型的数据转换成字符串
  20. # 按\r\n分割
  21. data1 = data.split("\r\n")[0]
  22. url = data1.split()[1] # url是我们从浏览器发过来的消息中分离出的访问路径
  23. conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # 因为要遵循HTTP协议,所以回复的消息也要加状态行
  24. # 根据不同的路径返回不同内容
  25. func = None # 定义一个保存将要执行的函数名的变量
  26. for i in list1:
  27. if i[0] == url:
  28. func = i[1]
  29. break
  30. if func:
  31. response = func(url)
  32. else:
  33. response = b"404 not found!"
  34. # 返回具体的响应消息
  35. conn.send(response)
  36. conn.close()

web服务本质的更多相关文章

  1. Web框架本质及第一个Django实例

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...

  2. Web框架本质及第一个Django实例 Web框架

    Web框架本质及第一个Django实例   Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web ...

  3. WEB框架本质和第一个Django实例

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 总的来说:Web框架的本质就是浏览 ...

  4. Django之Web框架本质及第一个Django实例

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...

  5. Django框架----Web框架本质

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...

  6. Web框架本质及浅谈HTTP协议

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...

  7. Django 基础 web框架本质

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. import socket sk ...

  8. 用于构建 RESTful Web 服务的多层架构

    作者:Bruce Sun, Java 架构师, IBM 出处:http://www.ibm.com/developerworks/cn/web/wa-aj-multitier/ 用于构建 RESTfu ...

  9. 【Django】Web框架本质

    目录 根据不同的路径返回不同的内容 普通版 函数版 函数进阶版 返回具体的HTML文件 让网页动态起来 服务器和应用程序 wsgiref 模块 @ * 我们可以这样理解:所有的==Web应用本质上就是 ...

随机推荐

  1. Java基础语法面试题

    1,关于JDK,JRE,JVM [为什么安装包要分JDK和JRE?] 先来说说什么是JDK,JRE. JDK:Java Development Kit Java开发工具包[开发Java程序用] JRE ...

  2. Deep Learning专栏--强化学习之MDP、Bellman方程(1)

    本文主要介绍强化学习的一些基本概念:包括MDP.Bellman方程等, 并且讲述了如何从 MDP 过渡到 Reinforcement Learning. 1. 强化学习基本概念 这里还是放上David ...

  3. Dart:2.通过一个简单程序来理解Dart基础语法

    一 . 一个简单的 Dart 程序 // 这是程序执行的入口. main() { var number = 42; // 定义并初始化一个变量. printNumber(number); // 调用一 ...

  4. AtCoder Grand Contest 014

    AtCoder Grand Contest 014 A - Cookie Exchanges 有三个人,分别有\(A,B,C\)块饼干,每次每个人都会把自己的饼干分成相等的两份然后给其他两个人.当其中 ...

  5. 2019-11-29-dotnet-通过-WMI-获取指定进程的输入命令行

    原文:2019-11-29-dotnet-通过-WMI-获取指定进程的输入命令行 title author date CreateTime categories dotnet 通过 WMI 获取指定进 ...

  6. JS删除指定下标的元素

    在开发过程中,有时我们需要删除数组中某一下标的元素.JAVA中ArrayList有remove函数.但是在JavaScript中没有直接的删除方法.我们可以利用splice来实现.Array.spli ...

  7. Windows下VS Code打开黑屏解决办法(这样真的行)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_42421611/article/d ...

  8. 记MacOS抹盘后--使用U盘安装MacOS实录

    背景 纯属一时手贱,本想重装系统,结果直接把磁盘抹了,然后联网安装死活安不上.但这里仍然附上联网安装方法: 按键 描述 ⌘+R 重新安装您的 Mac 上装有的最新 macOS(建议操作). Optio ...

  9. Android源码分析(十三)----SystemUI下拉状态栏如何添加快捷开关

    一:如何添加快捷开关 源码路径:frameworks/base/packages/SystemUI/res/values/config.xml 添加headset快捷开关,参考如下修改. Index: ...

  10. 更改用户host留下的坑

    前言:  我们在创建数据库用户的时候都会指定host,即一个完整的用户可描述为 'username'@'host' .创建用户时不显式指定host则默认为%,%代表所有ip段都可以使用这个用户,我们也 ...