Flask框架开发学习笔记《6》前后端不分离基础框架

news2024/11/15 5:43:55

Flask框架开发学习笔记《6》前后端不分离基础框架

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

主要包含如下文件:

  1. static 目录中存储了图片
  2. templates 目录中存储了 html 文件
  3. utils.py 包含了 log 函数
  4. server.py 是扩展的服务器代码, 详细流程功能说明请看后文
  5. routes.py 是服务器能处理的 path(路由) 和 路由处理函数
  6. models.py 是数据存储的代码

在这里插入图片描述
这一份博客和上一份博客主要区别在于:把功能区分的更加细致的,功能并没有挤在同一个代码中了。

因为不是前后端分离的代码,所以将前端页面集中存放于template文件夹下。

然后静态数据,例如图片等资源也单独统一存放在static文件夹下。

将各个路径的路由功能函数也抽离出来,单独存放在routes.py代码中。

将log等自定义通用工具函数库都统一存放于utils.py中。

将数据处理等功能抽离出来,统一存放在models.py代码中。

最后服务器代码专门写在server.py中。

框架就是如上所示,将各部分功能抽离开来,
然后服务器代码思想如下:

server.py
    建立host和端口
    监听请求
    接受请求
        分解请求信息
            method
            path
            query
            body
        保存请求
            临时保存,用完就丢
    处理请求
        获取路由字典
            path和响应函数的映射字典
        根据请求的path和字典处理请求并获得返回页面
            routes
                主页
                    返回页面
                登录
                    处理post请求
                        对比post数据和用户数据
                        返回登录结果
                    返回页面
                注册
                    处理post请求
                        对比post数据和注册规则
                        保存合法的注册信息
                            保存到User.txt
                        返回注册结果
                    返回页面
                留言板
                    处理post请求
                        将post的数据加入留言列表
                    返回页面
                        包含留言列表
                静态资源(图片)
                    根据query的内容返回对应的资源
        返回响应内容
    发送响应内容
    关闭请求连接

# 感觉就是把功能细化了,抽离开来了。
# 首先主程序server.py构建网络socket实例,然后接收请求,
# 然后解析网络请求,这就要求很熟悉请求的结构,然后利用字符串的方法解析出来,请求方式、主机号端口号、协议、请求body等等
# 然后根据不同的请求路径,调用对应的不同的功能,主要是构造响应的网络数据包,这就要求很熟悉响应的结构
# 最后将响应的内容,发送回请求的客户端。

关键地是大家看懂这个框架怎么清晰地分离功能的,然后看懂服务器代码,然后自己亲自写一遍代码。

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

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

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

相关文章

开发工具git分支冲突解决

在团队协作的软件开发过程中,Git是一款广泛使用的版本控制系统。然而,当多个开发者同时修改同一文件或代码段时,就会产生分支冲突。解决这些冲突需要仔细的协调和技术知识。本篇博客将介绍Git分支冲突的解决方法,以及开发工具和最…

Android 系统启动过程

当按下电源时,引导芯片代码会从预定义的地方(固化在ROM) 开始执行,加载引导程序BootLoader到RAM,然后执行。 启动内核的第一个进程idle(pid0),idle进程是Linux系统第一个进程,是init进程和kthreadd进程的父进程。 idle的主要作用 初始化进程以及内存管…

Modern C++ std::get<n>(tuple)的原理

1. 前言 前面我们讲过std::tuple的实现原理,但没有讲如何取出数据,本节着重讲讲这点。本节与之前的blog有较大关联,如果您没看,这里有链接,链接已按由浅入深排好序,您可以按顺序阅读。如果时间少可以直接看…

【新书推荐】4.2节 字符编码规则

本节内容:字符编码规则。 ■字符编码规则:ASCII码、ANSI字符集、Unicode字符集。 ■变形国标码:国标码是16位编码,高8位表示汉字符的区号,低8位表示汉字符的位号。 4.2.1 字符编码规则 计算机只能存储二进制数0和1&a…

API管理协作工具:Apipost

相信无论是前端,还是后端的测试和开发人员,都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致,导致协作低效、频繁出问题,开发测试人员痛苦不堪。 API管理的难点在哪? 开发人员在 …

【WPF.NET开发】优化性能:图形呈现层

本文内容 图形硬件呈现层定义其他资源 呈现层为运行 WPF 应用程序的设备定义图形硬件功能和性能级别。 1、图形硬件 对呈现层级别影响最大的图形硬件功能包括: 视频 RAM - 图形硬件中的视频内存量决定了可用于合成图形的缓冲区大小和数量。 像素着色器 - 像素着…

点餐APP开发需要用到的一些源代码

在数字化日益普及的今天,点餐APP已经成为人们日常生活的重要组成部分,从校园食堂到高级餐厅,从快餐外卖到定制化营养餐,点餐APP的多样性和便利性满足了不同用户的需求,本文将深入探讨在开发一款点餐APP时可能用到的源代…

24.Android中的列表--ListView

ListView 1.简单列表--ArrayAdapter <?xml version"1.0" encoding"utf-8"?> <ScrollView xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools&qu…

C++ 入门(三)— 函数

文章目录 函数简介函数返回值Void 函数&#xff08;非值返回函数&#xff09;函数参数和参数局部范围函数的声明和定义具有多个代码文件的程序 函数简介 C 程序的方式工作。当程序遇到函数调用时&#xff0c;它将在一个函数内按顺序执行语句。函数调用是告诉 CPU 中断当前函数…

责任链模式在java中的实现

1 总览 2 概念 避免请求发送者与接收者耦合在一起&#xff0c;让多个对象都有可能接收请求&#xff0c;将这些对象连接成一条链&#xff0c;并且沿着这条链传递请求&#xff0c;直到有对象处理它为止。职责链模式是一种对象行为型模式。 3 实现 公共部分&#xff0c;一个系…

法大大入选2023德勤“中国明日之星”

1月30日&#xff0c;德勤审计及鉴定合伙人、华南区上市业务合伙人、资本市场服务部王杰森莅临法大大总部&#xff0c;为法大大颁发“2023德勤中国 高科技高成长 明日之星”奖杯&#xff0c;法大大联合创始人兼首席法务官梅臻代表领奖。 &#xff08;左为王杰森&#xff0c;右为…

海外代理IP推荐:5大最佳Luminati替代方案

在跨境出海业务中&#xff0c;海外代理IP是非常高效的助力工具&#xff0c;因此也衍生了非常多的代理服务商。想必大多数都知道Brightdata&#xff08;原名Luminati&#xff09;&#xff0c;但是&#xff0c;由于代理IP的高需求&#xff0c;慢慢地我们发现除了高价的卢米&#…

Prometheus的promQL语法

时间序列 node_cpu_guest_seconds_total{cpu"0"} #{}外的是监控项(指标数据) #{}内的是标签 #node使用cpu的描述统计&#xff0c;符合标签cpu0的时间序列&#xff0c;查询出的结果 #指标项标签就是Prometheus的时间序列_address_ #双下划线标签是Prometheus系统的默…

【小白学unity记录】使用unity播放声音

1. 示例 unity中播放声音涉及到两个组件。AudioSource和AudioClip。AudioSource可以理解为播放器&#xff0c;AudioClip可以理解为音频片段文件。AudioSource可以通过.clip属性切换音频片段。 using UnityEngine;public class PlayerController : MonoBehaviour {private int…

1.迭代与递归 - JS

迭代与递归是函数进阶的第一个门槛。迭代就是对已知变量反复赋值变换&#xff1b;递归就是函数体内调用自身。 迭代 一个迭代是就是一个循环&#xff0c;根据迭代式对变量反复赋值。 求近似根&#xff08;切线法&#xff09;&#xff1b; 迭代描述&#xff1a; x 0 x_0 x0…

安装并开始设置 Windows 终端(命令提示符或Windows PowerShell或Azure Cloud Shell)

安装 安装 若要试用最新的预览功能&#xff0c;可能还需要安装 Windows 终端预览。 ‼️备注 如果你无法访问 Microsoft Store&#xff0c;GitHub 发布页上发布有内部版本。 如果从 GitHub 安装&#xff0c;Windows 终端将不会自动更新为新版本。 有关使用包管理器&#xff…

品牌如何持续发展,重点在于把握消费动机

发展周期较短的品牌可能有很多原因&#xff0c;但是长效发展的品牌却有相似的共性。所有能长效发展的品牌&#xff0c;都牢牢把握住了顾客的消费动机&#xff0c;人们会因为很多原因去消费&#xff0c;这在营销界就被称为“消费动机”&#xff0c;有的消费动机是短暂的&#xf…

MySQL中的数据类型(五)

MySQL中的数据类型&#xff08;五&#xff09; 一、整数类型 数值类型中的长度 m 是指显示长度&#xff0c;并不表示存储长度&#xff0c;只有字段指定 zerofill 时有用 例如&#xff1a; int(3) &#xff0c;如果实际值是 2 &#xff0c;如果列指定了 zerofill &#xff0c;…

【UE 材质】球形遮罩材质

效果 步骤 1. 新建一个材质&#xff0c;这里命名为“M_Mask” 打开“M_Mask”&#xff0c;混合模式设置为已遮罩&#xff0c;勾选双面显示 在材质图表中添加如下节点 此时我们将一个物体赋予材质“M_Mask”并放置在世界坐标原点&#xff0c;可以看到如下效果 2. 如果我们希望能…

C++ 类与对象(中)

本节目标 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认…