Flask框架开发学习笔记《5》简易服务器代码

Flask框架开发学习笔记《5》

Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。

简易服务器代码

接口解析那一块很关键,学后端服务器这一块,感觉主要就是学习相应地址的接口怎么处理。 然后写清楚每个地址接口的功能应该怎么处理。

# 简易服务器代码
import socketdef log(*args, **kwargs):# 用这个log替代 print:少打几个字;主要是打印出来的东西格式化处理过,最前面有个“log”字符。尽量不要用原生的。print('log', *args, **kwargs)def route_index():# 主页的处理函数,返回主页的响应(这现在返回的是HTML页面代码,之后是不是应该就只是返回一些数据,HTML在前端渲染就得,后端不要出现)header = 'HTTP/1.1 200 0K\r\nContent-Type: text/html\r\n'body = '<h1>Hello World</h1> <img src="/dancer.gif">'     # /dancer.gif这个路径不是文件的相对路径,而是服务器的配置接口中的/dancer.gif接口,到时候发送的是/dancer.gif请求r = header + '\r\n' + bodyreturn r.encode(encoding='utf-8')def route_image():# 图片的处理函数,读取图片并生成响应返回with open('dancer.gif', 'rb') as f:header = b'HTTP/1.1 200 OK\r\nContent-Type: image/gif\r\n'img = header + b'\r\n' + f.read()return imgdef page(name):with open(name, encoding='utf-8') as f:return f.read()def route_msg():# msg页面的处理函数header = 'HTTP/1I1 200 oK\r\ncontent-Type: text/html\r\n'body = page('html_basic.html')  # 返回指定的前端页面r = header + '\r\n' + bodyreturn r.encode(encoding='utf-8')def error(code=404):# 根据code返回不同的错误响应目前只有404# 之前上课我说过不要用数字来作为字典的key# 但是在HTTP协议中 code都是数字似乎更方便所以打破了这个原则e = {404: b'HTTP/1.x 404 NOT FOUND\r\n\r\n<h1>NOT FOUND</h1>'}return e.get(code, b' ')def response_for_path(path):# 根据path调用相应的处理函数# 没有处理的path会返回404r = {'/': route_index,  # 这个就是字典,根路径对应route_index函数'/dancer.gif': route_image,  # 这个就是字典,/dancer.gif路径对应route_image函数'/msg': route_msg,}response = r.get(path, error)return response()def run(host='', port=3000):# 启动服务器# 初始化socket套路# 使用with可以保证程序中断的时候正确关闭socket释放占用的端口with socket.socket() as s:s.bind((host, port))# 无限循环来处理请求while True:# 监听接受读取请求数据解码成字符串s.listen(5)connection, address = s.accept()request = connection.recv(1024)request = request.decode('utf-8')log('ip and request,{}\n{}'.format(address, request))try:# 因为chrome会发送空请求导致split得到空list#所以这里用try 防止程序崩溃path = request.split()[1]# 用response_for_path幽数米得到path 对应的响应内容response = response_for_path(path)  # 这个就是接口函数!!关键代码# 把响应发送给客户端                             # 之前感觉接口很神秘,很神奇connection.sendall(response)  # 现在才发现就是解析校验对应的接口地址字符串仅此而已except Exception as e:log('error', e)# 处理完请求,关闭连接connection.close()if __name__ == '__main__':  # 这样写代码的话,只在自己运行的时候才执行,被import不会执行:因为被别的文件import的时候,文件name就不是main了,就是文件本身的名字。保证程序只有一个入口。# 生成配置并且运行程序config = dict(host='',port=3000,)# 如果不了解**kwargs 的用法,群里问或者看书/搜索关键字参数run(**config)# 为什么图片显示不出来;原因是/dancer.gif这个路径不是文件的相对路径,而是服务器的配置接口中的/dancer.gif接口

运行以及代码对应效果

图片换成自己的图片
在浏览器输入:localhost:3000

在这里插入图片描述

代码标准化,规范化工具。

在这里插入图片描述

本笔记是学习B站某视频的教程,作为一个自己的学习记录,侵删。

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

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

相关文章

在centos 7 中安装配置Jdk、Tomcat、及Tomcat自启动

目录 一、安装配置Jdk 1.创建目录并上传文件 2.解压JDK压缩包 3.配置JDK环境变量 4.设置环境变量生效 二、安装配置Tomcat 1.上传Tomcat并解压 2.启停Tomcat 3.修改tomcat-user.xml配置 4.配置远程访问Tomcat 5.远程项目发布 三.Tomcat自启动配置 1.配置Tomcat自启…

链表的删除和预处理

创建空链表&#xff1a; struct Node head - - - 创建了头链表&#xff0c;内部不储存数据&#xff0c;地址为null&#xff0c;空间开在栈上&#xff08;在main函数里创建新的节点&#xff0c;一般都开在堆上&#xff09;。 函数不能返回局部变量的地址,因为局部变量的空…

各大厂急招鸿蒙开发员,争抢鸿蒙工程师

余承东宣布鸿蒙原生应用全面启动&#xff0c;华为开始了全面抛弃安卓的进程。 多家互联网公司也发布了鸿蒙OS的App开发工程师的岗位&#xff0c;开启了抢人大战。 有的企业开出了近百万的年薪招聘鸿蒙OS工程师&#xff0c;而华为甚至为鸿蒙OS资深架构师开出了100万-160万元的…

SASS 官方文档速通

前言&#xff1a;参考 Sass 中文网。 一. 特色功能 Sass 是一款强化 CSS 的辅助工具&#xff0c;在 CSS 语法的基础上增加了变量、嵌套、混合、导入等高级功能。有助于组织管理样式文件&#xff0c;更高效地开发项目。 二. 语法格式 .scss 拓展名&#xff1a;在 CSS3 语法的基…

二分图板子

原理&#xff1a; 匈牙利算法&#xff1a;二分图最大权匹配 - OI Wiki 简单说就是挨个找&#xff0c;找到就退出。后面的来了就让前面的挪位置。 板子&#xff1a; book指给u找位置时&#xff0c;有人考虑过的位置就不考虑了。 match[ i ]就是i位置对应的人。 e是关系 …

k8s helm安装Tiller出错解决

安装Helm 安装Helm通常使用一下命令&#xff1a; [rootk8s-master ~]# curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent …

Kotlin快速入门系列10

Kotlin的委托 委托模式是常见的设计模式之一。在委托模式中&#xff0c;有两个对象参与处理同一个请求&#xff0c;接受请求的对象将请求委托给另一个对象来处理。与Java一样&#xff0c;Kotlin也支持委托模式&#xff0c;通过关键字by。 类委托 类的委托即一个类中定义的方…

Mysql-ReadView + MVCC-RR 与 RC

实验准备 创建脚本 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,age int(11) NULL DEFAULT NULL,addr varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,PRIMARY …

1967 - 输出字符的ascii码

题目 从键盘读入一个字符&#xff0c;请计算并输出该字符的 ascii 码。 比如&#xff1a;字符 A 的 ascii 码输出是 65 &#xff0c;a 的 ascii 码输出是 97 &#xff0c;0 的ascii码输出是 48 。 输入 一个字符。 输出 一个整数&#xff0c;代表字符对应的 ascii 码。 …

Red Panda Dev C++项目的基本操作

最近在Red Panda Dev C上面编写程序时发现&#xff0c;很多小伙伴都会创建项目。今天我带大家看看如何使用一个项目。 一、项目的创建 创建项目 首先&#xff0c;我们需要创建一个项目。 1、打开Red Panda Dev C。 2、点击 “文件[F]” → “新建[N]” → “项目[P]...”&…

精选70套前端数据可视化大屏

分享70款还不错的前端数据可视化大屏源码 其中包含行业&#xff1a;智慧社区、智慧物业、政务系统、智慧交通、智慧工程、智慧医疗、智慧金融银行等&#xff0c;全网最新、最多&#xff0c;最全、最酷、最炫大数据可视化模板。 你可以点击在线预览查看该源码资源的最终展示效果…

新概念英语第二册(50)上

【New words and expressions】生词和短语&#xff08;4&#xff09; ride n. 旅行 excursion n. 远足 conductor n. 售票员 view n. 景色 ★ride n. 旅行&am…

从零搭建Vue3 + Typescript + Pinia + Vite + Tailwind CSS + Element Plus开发脚手架

项目代码以上传至码云&#xff0c;项目地址&#xff1a;https://gitee.com/breezefaith/vue-ts-scaffold 文章目录 前言脚手架技术栈简介vue3TypeScriptPiniaTailwind CSSElement Plusvite 详细步骤Node.js安装创建以 typescript 开发的vue3工程集成Pinia安装pinia修改main.ts创…

正点原子--STM32定时器学习笔记(1)(更新中....)

F1系列基本定时器&#xff08;TIM6 / TIM7&#xff09; 我们的目标是通过TIM6基本定时器定时500ms&#xff0c;让LED0每隔500ms闪一下&#xff01; 思路&#xff1a;使用定时器6&#xff0c;实现500ms产生一次定时器更新中断&#xff0c;在中断里执行“翻转LED0”。 定时器什…

react useCallback(记忆函数)用法

//定义&#xff1a;防止组件重新渲染&#xff0c;导致方法被重新创建&#xff0c;起到缓存作用&#xff0c;只有第二个参数变化&#xff0c;才重新声明一次。 import React, { useCallback, useState } from react const [text,settext] useState(""); export def…

什么是ISO21434网络安全中的风险评估?-亚远景

在ISO 21434标准中&#xff0c;网络安全风险评估是指对汽车网络和相关电子系统进行系统性分析&#xff0c;以识别和评估潜在的网络安全威胁和风险。该过程旨在帮助汽车制造商和供应商在整个开发和运营生命周期中有效管理和缓解与网络安全相关的风险&#xff0c;确保车辆在数字化…

docker容器之consul

一、consul解决了什么问题&#xff1f; 如果后端应用服务器集群节点数量很多&#xff0c;前端负载均衡器配置和管理会很麻烦的问题 &#xff08;负载均衡器的节点配置条目数量会很多&#xff0c;后端节点的网络位置发生了变化还需要修改所有调用这些后端节点的负载均衡器配置等…

【精华文章】戊子仲秋的算法学习笔记汇总

文章目录 前言通用基础算法集合蓝桥杯备赛算法特训算法学习方法 前言 我的算法学习之旅&#xff0c;持续更新中 通用基础算法集合 二分查找 二分查找模板&#xff1a;二分原来这么简单二分题目合集&#xff1a;LeetCode 上六道经典的二分题目 排序算法 快速排序模板&#xf…

Android 12.0 应用中监听系统收到的通知

Android 12.0 通知简介https://blog.csdn.net/Smile_729day/article/details/135502031?spm1001.2014.3001.5502 1. 需求 在系统内置应用中或者在第三方应用中,获取Android系统收到的通知的内容. 2. NotificationListenerService 接口 Android 系统预留了专门的API, 即 No…

Github 2F2【解决】经验帖-PPHub登入

最近在做项目时,Github总是出问题,这是一经验贴 Github 2F2登入问题【无法登入】PPhub 2F2是为了安全,更好的生态 启用 2FA 二十八 (28) 天后,要在使用 GitHub.com 时 2FA 检查 物理安全密钥、Windows Hello 或面容 ID/触控 ID、SMS、GitHub Mobile 都可以作为 2F2 的工…