Django回顾1

目录

1.c/s架构

2.b/s架构

3.基于socket写一个web应用

main.py

index.html

4.手写web框架

main.py

login.html

time.html

user_list.html

user_list_new

二.HTTP协议

1.什么是HTTP协议

2.HTTP协议的作用

3.HTTP版本及区别

4.HTTP协议的特点

5.HTTP请求协议

常用的请求头:

6.HTTP响应协议

常见的HTTP状态码:


1.c/s架构

c/s:客户端  --->  服务端(MySQL是客户端和服务端在同一台机器上)

优点:

  1. 客户端和服务端直接相连
  2. 客户端可以处理一些逻辑事务
  3. 客户端操作界面       

缺点:

  1. 客户端:
            只能处理一些功能单一的多系统
            适用于局域网,对网速要求高
            安装部署困难,不易扩展
  2. 服务器:
            用户数增多会出现通信拥堵
            对服务器的要求很高
  3. 用户:
            没安装客户端的外部用户不能访问
            用户数受限,不易扩张

2.b/s架构

b/s:浏览器--->服务端


优点:

  1. 能面向广大的用户实现信息传播共享
  2. 浏览器负担小
  3. 页面的更新能实时同步
  4. 软件重用性强,节省大量成本

缺点:

  1. 客户端:
            页面需要不停的动态刷新,网速慢的情况很费时间
            面对大量不可知用户
  2. 服务器:
            用户增多,服务器响应慢
            不能处理复杂功能

*****b/s架构本质上就是c/s架构*****

3.基于socket写一个web应用

main.py

import socketdef server_run():soc = socket.socket()soc.bind(('127.0.0.1', 8008))soc.listen(5)while True:conn, addr = soc.accept()recv_data = conn.recv(1024)print(recv_data)# 1 直接在send里写,发送给客户端# conn.send(b'HTTP/1.1 200 OK\r\n\r\n<h1>hello web</h1><img src="https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5e3814acf9edab64607f4592965fc4a6/14ce36d3d539b600c0c465d0eb50352ac65cb74b.jpg"></img>')#2 打开一个html文件,发送给客户端# with open('index.html','r',encoding='utf-8') as f:#     data=f.read()# conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))# 3 动态网页,字符串替换import timenow=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())print(now)with open('index.html','r',encoding='utf-8') as f:data=f.read()data=data.replace('@@@',now)conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))conn.close()if __name__ == '__main__':server_run()

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h2>@@@</h2><img src="https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5e3814acf9edab64607f4592965fc4a6/14ce36d3d539b600c0c465d0eb50352ac65cb74b.jpg" alt="">
</body>
</html>

4.手写web框架

main.py

import socketimport pymysql
def index(request):return '<img src="https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5e3814acf9edab64607f4592965fc4a6/14ce36d3d539b600c0c465d0eb50352ac65cb74b.jpg"></img>'def login(request):with open('login.html','r',encoding='utf-8') as f :data=f.read()return data
def time(request):import datetimenow=datetime.datetime.now().strftime('%Y-%m-%d %X')with open('time.html','r',encoding='utf-8') as f :data=f.read()data=data.replace('@@time@@',now)return data
def user_list(request):# 创建连接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='lqz')cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)cursor.execute("select id,name,password from user")user_list = cursor.fetchall()cursor.close()conn.close()tr_list=[]for row in user_list:tr='<tr><td>%s</td><td>%s</td><td>%s</td></tr>'%(row['id'],row['name'],row['password'])tr_list.append(tr)with open('user_list.html','r',encoding='utf-8') as f:data=f.read()data=data.replace('@@body@@',''.join(tr_list))return datadef user_list_new(request):# 创建连接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='lqz')cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)cursor.execute("select id,name,password from user")user_list = cursor.fetchall()cursor.close()conn.close()with open('user_list_new.html','r',encoding='utf-8') as f:data=f.read()from jinja2 import Templatetemplate=Template(data)response=template.render(user_list=user_list)# response=template.render({'user_list':user_list})return responseurls = [('/index', index),('/login', login),('/time', time),('/user_list', user_list),('/user_list_new', user_list_new),
]def run():soc = socket.socket()soc.bind(('127.0.0.1', 8006))soc.listen(5)while True:conn, port = soc.accept()data = conn.recv(1024)# data=data.decode('utf-8')print(data)data = str(data, encoding='utf-8')request_list = data.split('\r\n\r\n')head_list = request_list[0].split('\r\n')method, url, htt = head_list[0].split(' ')# conn.send(b'hello web')conn.send(b'HTTP/1.1 200 OK \r\n\r\n')print(url)func_name = Nonefor u in urls:if url == u[0]:func_name = u[1]breakif func_name:response = func_name(data)else:response = '404 not found'conn.send(response.encode('utf-8'))conn.close()if __name__ == '__main__':run()

login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action=""><p>用户名:<input type="text"></p><p>密码:<input type="password"></p></form>
</body>
</html>

time.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>@@time@@
</body>
</html>

user_list.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>用户列表</title>
</head>
<body><table border="1"><thead><tr><th>id</th><th>用户名</th><th>密码</th></tr></thead><tbody>@@body@@</tbody></table></body>
</html>

user_list_new

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>用户列表</title>
</head>
<body>
<table border="1"><thead><tr><th>id</th><th>name</th><th>password</th></tr></thead><tbody>{% for user in user_list%}<tr><td>{{user.id}}</td><td>{{user.name}}</td><td>{{user.password}}</td></tr>{%endfor%}</tbody></table></body>
</html>

二.HTTP协议

1.什么是HTTP协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)

2.HTTP协议的作用

服务器与本地浏览器之间传输超文本的传送协议

3.HTTP版本及区别

0.9:功能捡漏,只支持GET方法,只能发送HTML格式字符串。

1.1:默认持久连接、请求管道化、增加缓存处理、增加Host字段、支持断点传输分块传输等。

2.0:二进制分帧、多路复用、头部压缩、服务器推送

3.0:弃用TCP,改用基于UDP协议的QUIC协议代替TCP协议。

4.HTTP协议的特点

  1. 支持客户端/服务端模式
  2. 简单快速:客户端向服务端发送请求时,只需要传送请求方式和路径(GET、POST、HEAD)
  3. 灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记
  4. 无连接:限制每次连接只处理一个请求,服务器处理完客户请求并接收到客户的响应后即断开连接
  5. 无状态:协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息则必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时响应就很快

5.HTTP请求协议

一个HTTP请求报文(也称请求消息)由请求行(request line)、请求头(header)、空行和请求数据(也称请求体)4个部分组成

请求行
请求头1
请求头2
……
请求空行
请求体

请求行:由请求字段、URL字段和HTTP协议版本字段三部分组成,用空格分隔

请求行格式:Method空格Request-URL空格HTTP-Version \r\n

        Method:表示请求方法

        Request-URL:表示一个统一资源标识符

        HTTP-Version:表示请求的HTTP协议版本

        \r\n:表示换行

常用的请求头:

  • Content-Type: 数据类型(text/html等)。
  • Content-Length: 请求体Body的长度。
  • User-Agent:产生请求的浏览器类型。
  • Accept:客户端希望接收的响应数据类型。就是希望服务器返回什么类型的数据。
  • Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
  • referer: 当前页面是从哪个页面跳转过来的。
  • location: 搭配3xx状态码使用,告诉客户端接下来要去哪里访问。
  • Cookie: 用于在客户端存储少量信息,通常用于实现会话(session)的功能。

6.HTTP响应协议

HTTP响应也由三个部分组成,分别是:状态行、响应头、空行、响应正文

状态行
响应头1
响应头2
……
响应空行
响应体

状态行:由 协议版本,状态码,[状态码说明] 三部分组成

状态行格式:HTTP-Version空格Status-Code空格Reason-Phrase 

        HTTP-Version表示服务器HTTP协议的版本,例如为HTTP/1.1

        Status-Code表示服务器发回的响应状态代码,例如200

        Reason-Phrase表示状态代码的文本描述

常见的HTTP状态码:

  • 1xx:指示信息--表示服务器收到请求,需要请求者继续执行操作。
  • 2xx:成功--表示操作被成功接收并处理。
  • 3xx:重定向--需要进一步的操作以完成请求。
  • 4xx:客户端错误--请求有语法错误或请求无法完成。
  • 5xx:服务器端错误--服务器在处理请求的过程中发生了错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腹泻的原因,种类,风险因素,如何预防

谷禾健康 腹泻是常见的健康问题&#xff0c;相信绝大多数人在生活中都曾遭受过腹泻的困扰。 根据2016年柳叶刀期刊统计&#xff0c;慢性腹泻影响全世界 3%-20% 的成年人。全球每年有17亿儿童腹泻病例&#xff0c;腹泻是五岁以下儿童死亡的第五大原因&#xff0c;每年约有52.5万…

P1 什么是链表 C语言简单易懂

目录 前言 01 什么是链表 02 数组的特点 03 数组的缺点 3.1 删除数组其中一个元素 3.2 数组增加某个节点 04 链表 前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《 C 》✨✨✨ &#x1f525; 推荐专栏2: 《 Linux C应用编程&#xff08;概念…

如何在Ubuntu上清理缓存和垃圾文件

随着时间的推移&#xff0c;Ubuntu系统上可能会积累大量的缓存和垃圾文件&#xff0c;占据宝贵的磁盘空间&#xff0c;同时也可能影响系统性能。为了确保系统保持高效运行并释放磁盘空间&#xff0c;我们可以定期执行清理操作。在本文中&#xff0c;我们将介绍一些常见的清理步…

Leetcode98 验证二叉搜索树

题意理解&#xff1a; 首先明确二叉树的定义&#xff0c;对于所有节点&#xff0c;根节点的值大于左子树所有节点的值&#xff0c;小于右子树所有节点的值。 注意一个误区&#xff1a; 根节点简单和左孩子&#xff0c;右孩子比大小是不够的&#xff0c;要和子树比&#xff0c;…

2024年天津天狮学院专升本专业课考试报名通知

天津天狮学院2024年高职升本科专业课报名时间考试时间通知 1.报名条件 报名条件和具体要求按照天津市招生委员会的文件规定执行。考生必须完成文化课报名环节&#xff0c;且填报天津天狮学院志愿&#xff0c;方可报考我校专业课考试。考生提供的各种证件应真实有效&#xff0…

数据结构和算法-树和二叉树的定义和基本术语和性质

文章目录 树的基本概念和相关术语相关的应用节点间的关系描述节点&#xff0c;树的属性描述有序树vs无序树树vs森林小结 树的相关性质考点1考点2考点3考点4考点5考点6小结 二叉树的相关概念和基本术语重要 &#xff08;五种状态&#xff09;特殊二叉树小结 二叉树的相关性质二叉…

css深度选择器>>>、/deep/ 、::v-deep 、:deep()

很多vue的组件库 , 如vant&#xff0c;elementUI&#xff0c; iview等都可能自定义样式。 如项目中用到了 elementui&#xff0c;如果使用预处理器 scss, sass,less , 修改样式可能修改不掉, 而且这种需求出现的频率非常高。但如果去掉scoped话又会影响全局样式。当然我们知道可…

设计模式之美学习笔记-理论篇1-面向对象的特性

一、设计模式前言 面向对象 主流的编程范式或者是编程风格有三种&#xff0c;它们分别是面向过程、面向对象和函数式编程。面向对象这种编程风格又是这其中最主流的。现在比较流行的编程语言大部分都是面向对象编程语言。大部分项目也都是基于面向对象编程风格开发的。面向对…

中职组网络安全-FTPServer20221010.img(环境+解析)

任务环境说明&#xff1a; √服务器场景&#xff1a;FTPServer20221010.img √服务器操作系统&#xff1a;未知&#xff08;关闭链接&#xff09; √FTP用户名&#xff1a;attack817 密码&#xff1a;attack817 1.分析attack.pcapng数据包文件&#xff0c;通过分析数据包attack…

elasticsearch聚合、自动补全、数据同步

目录 一、数据聚合1.1 聚合的种类1.2 DSL实现聚合1.2.1 Bucket聚合语法1.2.2 聚合结果排序1.2.3 限定聚合范围1.2.4 Metric聚合语法 1.3 RestAPI实现聚合 二、自动补全2.1 拼音分词器2.2 自定义分词器2.3 自动补全查询2.4 RestAPI实现自动补全 三、数据同步3.1 思路分析3.1.1 同…

哈希表Leetcode 1657. 确定两个字符串是否接近

如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。 例如&#xff0c;abcde -> aecdb操作 2&#xff1a;将一个 现有 字符的每次出现转换为另一个 现有 字符&#xff0c;并对另…

PCP的Parallel Repetition

1. 引言 见Alessandro Chiesa等人2023年论文《On Parallel Repetition of PCPs》。 Parallel Repetition&#xff08;并行重复&#xff09;可用于&#xff1a; 降低probabilistic proofs的soundness error 的同时提升某些衡量指标的效率 interactive proofs&#xff08;IPs…

模型层——多表操作

多表操作 一 创建模型 实例&#xff1a;我们来假定下面这些概念&#xff0c;字段和关系 作者模型&#xff1a;一个作者有姓名和年龄。 作者详细模型&#xff1a;把作者的详情放到详情表&#xff0c;包含生日&#xff0c;手机号&#xff0c;家庭住址等信息。作者详情模型和作…

YOLOv5全网独家首发改进:SENetv2,Squeeze-Excitation模块融合Dense Layer,效果秒杀SENet

💡💡💡本文自研创新改进:SENet v2,针对SENet主要优化点,提出新颖的多分支Dense Layer,并与Squeeze-Excitation网络模块高效融合,融合增强了网络捕获通道模式和全局知识的能力 推荐指数:五星 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/catego…

项目申请书撰写【笔记】

撰写项目申请书需要良好的科技写作技能。好的项目申请书应该条理清 晰、逻辑严密。整份申请 书要有清晰的结构&#xff0c;每部分都有特定的功能&#xff0c;让项目评审人觉得一目了 然。每一段话也要有特定的功能&#xff0c;表达要有层次和递进。要注意起承转合、文脉通畅&am…

【24押题卷】小马哥终极押题3+1!

告别11月&#xff0c;迎接12月&#xff01;说来也是缘分&#xff0c;各平台发了快200套真题&#xff0c;梳理了6本教材课后习题&#xff0c;讲解了吴大正、郑君里、奥本三本重点习题。终于我“悟了”&#xff0c;你们会发现&#xff0c;我今年做的每一套真题解析&#xff0c;几…

Linux Ubuntu protobuf 安装方法

文章目录 安装方法检验安装意外状况 安装方法 去GitHub官网找下载地址 安装 protobuf 21.11 GitHub 资源地址 选择安装版本 &#xff08;是一个URL网址&#xff09; 例如这里选用&#xff1a;protobuf-all-21.11.zip 资源 安装依赖库&#xff0c;执行指令 6. sudo apt-get …

【Node.js】笔记整理4 - 版本管理工具nvm

写在最前&#xff1a;跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识&#xff0c;需要格外注重实战和官方技术文档&#xff0c;文档建议作为手册使用 系列文章 【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n…

毕业项目分享

大家好&#xff0c;今天给大家分享112个有趣的Python实战项目&#xff0c;可以直接拿来实战练习&#xff0c;涵盖机器学习、爬虫、数据分析、数据可视化、大数据等内容&#xff0c;建议关注、收藏。 项目名称 主要技术 2023招聘数据分析可视化系统爬虫 7种薪资预测模型 Flas…

【JAVA面向对象编程】--- 探索子类如何继承父类

&#x1f308;个人主页: Aileen_0v0&#x1f525;学习专栏: Java学习系列专栏 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 继承 继承的普通成员方法调用 及 普通成员变量修改 构造方法的调用 子类构造方法 继承 package Inherit;class Animal …