flask知识--01
flask介绍
# python 界的web框架:
Django:大而全,使用率较高 :https://github.com/django/django
-FastAPI:新项目选择使用它:https://github.com/tiangolo/fastapi
-flask:公司一些小项目使用它:https://github.com/pallets/flask
# flask:
Flask是一个用Python编写的Web应用框架。它由Armin Ronacher开发,他领导着一个名为Pocco的国际Python爱好者团队。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。两者都是Pocco项目Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器
“微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用
Werkzeug WSGI:接收请求 django 中得 wsgiref
jinja2模板: 渲染模板的 django中得dtl
Click CLI:命令定制工具 django 的 manage.py runserver/migrate...
# flask fastapi 跟django的不同:
相同点:都python的web框架
不同点:1、django比较全面,web开发中使用到的东西,它都会内置
eg.orm、forms组件,表单验证、模板:dtl、缓存、信号、admin 后台管理...
2、flask小而精,只保留了web开发的核心功能,其他的需要借助于第三方实现
eg.orm咱们会用sqlalchemy,peewee。。
3、fastapi: 跟flask相似,只保留了web开发的核心功能,其他的需要借助于第三方实现
异步框架
更方便的使用python async 和 await 关键字来实现异步操作
flask 安装和运行
# 安装:pip3 install flask
安装完成后,会在script目录下多flask.exe 命令,后期运行flask需要使用它
# 版本之间差距不大:
1.x
2.x:比较稳定
3.x版本:最新最新版本,最低支持 python3.8
# 安装flask时,会自动安装一些其他模块:
运行服务、模板、防止xss攻击、cookie加密、制定命令、信号
# 这些依赖不会自动安装,如果您安装它们,Flask 将检测并使用它们:
可以把key和value放到环境变量,使用这个模块可以操作
flask修改了代码,他会检测到并重新运行,最新代码
# 快速体验:
from flask import Flask# 1 实例化得到对象 app = Flask(__name__)# 2 注册路由--》写视图函数 @app.route('/') def index():# 3 返回给前端字符串return 'hello world'if __name__ == '__main__':# 运行app,默认运行在5000app.run(host='0.0.0.0',port=8080)
Werkzeug WSGI-(socket服务端)
# 概念:https://werkzeug.palletsprojects.com/en/3.0.x/
Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。
这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等
Werkzeug 是一个综合性 WSGI Web 应用程序库。它最初是 WSGI 应用程序的各种实用程序的简单集合,现已成为最先进的 WSGI 实用程序库之一。
Werkzeug 不强制执行任何依赖关系。由开发人员选择模板引擎、数据库适配器,甚至# # 如何处理请求:django--->wsgiref ,uwsgi
flask---->Werkzeug
# django或flask都需要有web服务器:web服务器需要符合 wsgi协议,规定了框架是一个可调用对象,请求来了,wsgi服务器调用这个对象的时候,会传入 两个参数environ,start_response
flask中能找到这两个参数,django中也能找到这两个参数
![]()
# 后期:
测试django项目,使用wsgiref,上线djagno项目,使用uwsgi,gunicorn
测试flask项目,使用werkzeug,上线djagno项目,使用uwsgi,gunicorn# 1 了解即可 # 写了一个可调用对象,可以使用符合wsig协议的web服务器来调用,执行它def application(environ, start_response):start_response('200 OK', [('Content-Type', 'text/plain')])return ['Hello World!'.encode('utf-8')]# 2 使用符合wsgi协议的web服务器调用它 from wsgiref.simple_server import make_server# 咱们这个application 函数---》它就是 django框架或flask框架 # def application(environ, start_response): # start_response('200 OK', [('Content-Type', 'text/plain')]) # return ['Hello World!'.encode('utf-8')] def application(environ, start_response):print(environ)start_response('200 OK', [('Content-Type', 'text/html')])if environ.get('PATH_INFO') == '/index':with open('index.html','rb') as f:data=f.read()elif environ.get('PATH_INFO') == '/login':with open('login.html', 'rb') as f:data = f.read()else:data=b'<h1>Hello, web!</h1>'return [data] if __name__ == '__main__':myserver = make_server('', 8011, application)print('监听8011')myserver.serve_forever()### 3 使用werkzeug 运行 application # 有了 Request和Response,路由分发,可以获取静态文件,可以返回html页面 from werkzeug.wrappers import Request, Response from werkzeug.serving import run_simple def application(environ, start_response):request = Request(environ)text = f"Hello {request.args.get('name', 'World')}!"response = Response(text, mimetype='text/plain')return response(environ, start_response)if __name__ == '__main__':run_simple('localhost', 4000, application)
Jinja template engine
# 概念:Jinja 是一个快速、富有表现力、可扩展的模板引擎。
模板中特殊占位符允许编写类似于Python语法的代码,然后向模板传递数据以渲染最终文档
# 特点:语法完全支持 dtl,但比dtl更强大
https://jinja.palletsprojects.com/en/3.1.x/
Click CLI
# 概念:https://click.palletsprojects.com/en/8.1.x/
Click 是一个Python 包,用于以可组合的方式使用尽可能少的代码创建漂亮的命令行界】,它是“命令行界面创建工具包”,具有高度可配置性,但具有开箱即用的合理默认值
# 目的:
使编写命令行工具的过程变得快速而有趣,同时也防止因无法实现预期的 CLI API 而造成的任何挫败感
# Click三点:1、命令的任意嵌套
2、自动生成帮助页面
3、支持运行时延迟加载子命令# 安装:pip3 install click
import click @click.command() @click.option('--count', default=1, help='Number of greetings.') @click.option('--name', prompt='Your name',help='The person to greet.') def hello(count, name):for x in range(count):click.echo(f"Hello {name}!")if __name__ == '__main__':hello()# 1 python3 app.py --count=3 # 2 python3 app.py --help # 3 python3 app.py --count=3 --name=lqz
watchdog使用
监控代码并打印日志:
# pip3 install watchdog # 当前目录下文件修改会被监控到,打印日志 import sys import time import logging from watchdog.observers import Observer from watchdog.events import LoggingEventHandlerif __name__ == "__main__":logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(message)s',datefmt='%Y-%m-%d %H:%M:%S')path = sys.argv[1] if len(sys.argv) > 1 else '.'event_handler = LoggingEventHandler()observer = Observer()observer.schedule(event_handler, path, recursive=True)observer.start()try:while True:time.sleep(1)except KeyboardInterrupt:observer.stop()observer.join()
python-dotenv(任何项目都可以用)
安装:pip3 install python-dotenv
import os from dotenv import load_dotenv from dotenv import dotenv_values ## 1 加载配置文件 # 必须在根路径下新建一个 .env 的文件,并写入配置才能返回True,会把.env下的配置文件设置进环境变量 # res=load_dotenv() # take environment variables from .env # print(res) # print(os.environ.get('DOMAIN')) # print(os.environ.get('NAME')) # print(os.environ.get('AGE')) # You will probably want to add .env to your .gitignore, especially if it contains secrets like a password.## 2 获取环境变量字典 config = dotenv_values(".env") print(config) print(config.get('DOMAIN')) print(config.get('NAME')) print(config.get('HOBBY'))
虚拟环境
# 概念:虚拟环境是一组独立的 Python 库,每个项目对应一个,为一个项目安装的软件包不会影响其他项目或操作系统的软件包,在开发和生产中,使用虚拟环境来管理项目的依赖关系
# 虚拟环境解决什么问题?
您拥有的 Python 项目越多,您就越有可能需要使用不同版本的 Python 库,甚至是 Python 本身。一个项目的较新版本的库可能会破坏另一项目的兼容性。
# python内置(venv)可以直接创建虚拟环境:
Mac/linux# 创建虚拟环境 mkdir myproject cd myproject python3 -m venv .venv# 激活虚拟环境 . .venv/bin/activate
Win
# 创建虚拟环境 mkdir myproject cd myproject py -3 -m venv .venv # 激活虚拟环境 .venv\Scripts\activate
运行flask 项目方式
# pip install flask# 写个py文件,写入 from flask import Flaskapp = Flask(__name__)@app.route('/') def index():return 'hello world'
# 运行项目方式:
方式一(pycharm配置):
新建一个flask-server,配置选中 script,有app的文件
方式二:命令(推荐这种)
flask --app py文件名字 run
flask --app 5-flask再体验.py run
方式三:命令
python38 -m flask --app py文件名字 run
python38 -m flask --app 5-flask再体验.py run
方式四,右键运行if __name__ == '__main__':app.run()
方式五:命令运行(跟右键运行一样)
python38 5-app.py
方式6:少用(pip install python-dotenv)
flask app run
debug 模式
flask --app 5-app.py run --debug
# 浏览器显示错误信息
# 改了代码自动重启
fastapi
# from typing import Union # python 的内置--》数据校验 import timefrom fastapi import FastAPI import asyncioapp = FastAPI()@app.get("/") async def read_root():# 如果有ioawait asyncio.sleep(2)# time.sleep(10)return {"Hello": "World"}@app.get("/items/{item_id}") def read_item(item_id, q=None):return {"item_id": item_id, "q": q}
# 天生自带接口文档,方便我们快速写前后端分离的接口
uvicorn 7-fast-api初体验:app
# 针对于io多的web后端,使用异步框架,会提高性能
咱们项目,基本都是io多,查询数据库,redis 都是io操作
使用fastapi能提高并发量
显示用户小案例
from flask import Flask, render_template, request, redirectapp = Flask(__name__)@app.route('/login',methods=['GET','POST']) def login():if request.method == 'GET':# 返回模板return render_template('login.html')else:# 取出用户名密码,判断# flask的request 没有POST,GET# request.form 就是 post# request.args 就是 GETusername = request.form.get('username')password = request.form.get('password')if username == 'zjq' and password == '123':# 重定向到百度return redirect('https://www.baidu.com')else:return render_template('login.html', error= '用户名密码错误')# 右键运行 if __name__ == '__main__':app.run(debug=True)
# templates/login.html <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css"><title>登录</title> </head> <body> <div class="container col-xl-10 col-xxl-8 px-4 py-5"><div class="row align-items-center g-lg-5 py-5"><div class="col-lg-7 text-center text-lg-start"><h1 class="display-4 fw-bold lh-1 mb-3">亚洲最大交友平台</h1><p class="col-lg-10 fs-4">Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师MarkOtto和Jacob Thornton合作开发,是一个CSS/HTML框架。目前,Bootstrap最新版本为5.0</p></div><div class="col-md-10 mx-auto col-lg-5"><form class="p-4 p-md-5 border rounded-3 bg-light" method="post"><div class="form-floating mb-3"><input type="text" class="form-control" id="floatingInput" placeholder="name@example.com" name="username"><label for="floatingInput">用户名</label></div><div class="form-floating mb-3"><input type="password" class="form-control" id="floatingPassword" placeholder="Password" name="password"><label for="floatingPassword">密码</label></div><div class="checkbox mb-3"><label><input type="checkbox" value="remember-me"> 记住密码</label></div><button class="w-100 btn btn-lg btn-primary" type="submit">登录</button><hr class="my-4"><small class="text-muted">{{error}}</small></form></div></div> </div> </body> </html>
今日思维导图:
相关文章:

flask知识--01
flask介绍 # python 界的web框架: Django:大而全,使用率较高 :https://github.com/django/django -FastAPI:新项目选择使用它:https://github.com/tiangolo/fastapi -flask:公司一些…...

软考52-上午题-【数据库】-关系模式2
一、关系模式的回顾 见:软考38-上午题-【数据库】-关系模式 二、关系模式 2-1、关系模式的定义 示例: 念法:A——>B A决定B,或者,B依赖于A。 2-2、函数依赖 1、非平凡的函数依赖 如果X——>Y,&a…...
devc++跑酷小游戏3.5.0
本来想搞存档的,失败了,要再学学文件操作的函数。还有一个打印地图的函数,更失败,彻底放弃。最近开学了,游戏不会经常更新,要写作业。昨天写到10点T_T #include<bits/stdc.h> #include<windows.h…...

Redisson限流算法
引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.12.3</version> </dependency>建议版本使用3.15.5以上 使用 这边写了一个demo示例,定…...
GPT与MBR:硬盘分区表格式的革新与区别
概述 在计算机存储领域,硬盘分区是管理数据和操作系统部署的基础。两种广泛使用的分区表格式——MBR(Master Boot Record)和GPT(GUID Partition Table),各自代表了不同的技术阶段和发展需求。本文将详细介…...
机器学习-1
文章目录 前言机器学习基本定义 练习题 前言 在本片开始将为大家介绍机器学习相关的知识点。 机器学习基本定义 夏天,我们通常会去水果店里买西瓜,我们看到一个根蒂蜷缩、敲起来声音浑浊的青绿色的西瓜,我们提着西瓜就去结账了,…...
Stream流详解
当我们对一个集合中的元素进行多次过滤应该怎样做? 下面看一个案例 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新…...

javaweb学习(day05-TomCat)
一、介绍 1 官方文档 地址: https://tomcat.apache.org/tomcat-8.0-doc/ 2 WEB 开发介绍 2.1 WEB 在英语中 web 表示网/网络资源(页面,图片,css,js)意思,它用于表示 WEB 服务器(主机)供浏览器访问的资源 2.2 Web 资源 WEB 服务器 ( 主机 ) 上供外界访问的 …...

【Unity】构建简单实用的年份选择器(简单原理示范)
在许多应用程序和游戏中,年份选择是一个常见的需求。无论是在日历应用程序中查看事件,还是在历史类游戏中选择时间段,年份选择器都是用户体验的重要组成部分,下面实现一个简易的年份选择器。 一、效果预览: 目录 一、…...

LeetCode 2120.执行所有后缀指令
现有一个 n x n 大小的网格,左上角单元格坐标 (0, 0) ,右下角单元格坐标 (n - 1, n - 1) 。给你整数 n 和一个整数数组 startPos ,其中 startPos [startrow, startcol] 表示机器人最开始在坐标为 (startrow, startcol) 的单元格上。 另给你…...

租赁小程序|租赁系统|租赁软件开发带来高效运营
随着社会的不断发展和科技的不断进步,越来越多的企业开始关注设备租赁业务。设备租赁作为一种短期使用设备的方式,为企业提供了灵活和成本节约的优势。针对设备租赁业务的管理和提升企业竞争力的需求,很多企业选择定制开发设备租赁系统。本文…...

大数据集群管理软件 CDH、Ambari、DataSophon 对比
文章目录 引言工具介绍CDHAmbariDataSophon 对比分析 引言 大数据集群管理方式分为手工方式和工具方式,手工方式一般指的是手动维护平台各个组件,工具方式是靠大数据集群管理软件对集群进行管理维护。本文针对于常见的方法和工具进行比较,帮助…...

插值、逼近、拟合、光顺
插值 插值(Interpolation)是数学和计算科学中的一个重要概念,它指的是通过已知的一系列数据点,构造一个函数或曲线,并据此估计未知数据点的值。这个过程通常发生在已知数据点之间,用于预测或估算在这些已知…...
Java单元测试 - mock静态方法
文章目录 1. mock 静态方法2. 升级 maven 依赖3. 示例 1. mock 静态方法 mockito 在 3.4.0 版本之后,开始支持 mock static method。 2. 升级 maven 依赖 <dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artif…...
Unity使用PlayableAPI 动态播放动画
1.初始化animator,创建Playable图,创建动画Playable private void InitAnimator(GameObject headGo) {if (headGo){_headAnimator headGo.GetComponent<Animator>();if (_headAnimator){_headAnimator.cullingMode AnimatorCullingMode.AlwaysA…...

unity使用Registry类将指定内容写入注册表
遇到一个新需求,在exe执行初期把指定内容写入注册表,Playerprefs固然可以写入,但是小白不知道怎么利用Playerprefs写入DWORD类型的数据,因此使用了Registry类 一. 对注册表中键的访问 注册表中共可分为五类 一般在操作时&#…...

Python进阶学习:Pandas--将一种的数据类型转换为另一种类型(astype())
Python进阶学习:Pandas–将一种的数据类型转换为另一种类型(astype()) 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&…...

OpenCV开发笔记(七十五):相机标定矫正中使用remap重映射进行畸变矫正
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/136293833 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模仿…...

光伏预测 | Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测
光伏预测 | Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测 目录 光伏预测 | Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测预测效果基本描述模型简介程序设计参考资料 预测效果 基本描述 Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测 运行环境: Matla…...

k8s学习笔记-基础概念
(作者:陈玓玏) deployment特别的地方在于replica和selector,docker根据镜像起容器,pod控制容器,job、cronjob、deployment控制pod,job做离线任务,pod大多一次性的,cronj…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...