flask的基本使用1

news2024/11/18 11:08:23

【 一 】Flask介绍

  • python 界的web框架

-Django:大而全,使用率较高 :https://github.com/django/django
-FastAPI:新项目选择使用它:https://github.com/tiangolo/fastapi
-flask:公司一些小项目使用它:https://github.com/pallets/flask

​ Flask 是一个Python编写的一种轻量级的框架,只提供了web框架基本的功能,比其他的框架更加灵活、自由。

​ Flask 是 Python 社区中开发 Web 应用最火热的框架之一,不同于 Django 陡峭的学习曲线,个人感觉 Flask 非常好上手,且社区生态丰富,有很多成熟的扩展可以拿来直接安装使用。 Flask 框架自身集成了基于 Jinja 的模板语言,使其可以完成前后端的所有开发,但现在大部分的 Web 应用都是前后端分离,所以本文将使用 Flask RESTful 扩展实现一个纯后端的 API 服务。 通过本文可以学习到以下内容:

  • 使用 Flask + Flask RESTful 搭建 API 应用并使用 Blueprint(蓝图) 管理 API;
  • 使用 Flask-SQLAlchemy 扩展实现 ORM 操作 MySQL 数据库;
  • 基于 JWT 验证实现注册、登录以及登出接口;
  • 实现一个最基本的列表获取接口;
  • 解决跨域问题;
  • 使用 Docker 部署该应用。

【 1 】Django与Flask的区别:

  • Django是一个重量级的框架,为业务开发,提供了丰富的工具、组件

  • Flask是一个轻量级的框架,只提供Web框架的核心功能,自由、灵活、高度定制

  • 相同点:都python的web框架

  • 不同点:

    • django比较全面,web开发中使用到的东西,它都会内置
    • -orm
    • -forms组件,表单验证
    • -模板:dtl
    • -缓存
    • -信号
    • -admin 后台管理。。。
  • ​ flask小而精,只保留了web开发的核心功能,其他的需要借助于第三方实现

  • ​ 众多第三方,比如orm咱们会用sqlalchemy,peewee。。

  • fastapi:跟flask相似,只保留了web开发的核心功能,其他的需要借助于第三方实现
    	-异步框架
        -更方便的使用python  async 和 await 关键字来实现异步操作
    

【 2 】Flask文档

中文文档:`

[]: https://dormousehole.readthedocs.io/en/latest/

`

英文文档:`

[]: https://flask.palletsprojects.com/en/2.2.x/

`

【 3 】常用扩展包

扩展列表:`

[]: http://flask.pocoo.org/extensions/

`

Flask-SQLalchemy:操作数据库
Flask-script:插入脚本
Flask-migrate:管理迁移数据库
Flask-Session:Session存储方式指定
Flask-WTF:表单
Flask-Mail:邮件
Flask-Bable:提供国际化和本地化支持,翻译
Flask-Login:认证用户状态
Flask-OpenID:认证
Flask-RESTful:开发REST API的工具
Flask-Bootstrap:集成前端Twitter Bootstrap框架
Flask-Moment:本地化日期和时间
Flask-Admin:简单而可扩展的管理接口的框架

【 二 】flask 安装与运行

  • 直接在Python里面安装就好
pip3 install flask
from flask import Flask

# 1 实例化得到对象
app = Flask(__name__)


# 2 注册路由--》写视图函数
@app.route('/')
def index():
    # 3 返回给前端字符串
    return 'hello world'


if __name__ == '__main__':
    # 运行app,默认运行在5000
    app.run()
    
    app.run(host='0.0.0.0',port=8080)

image-20240612162232741

image-20240612162303100

【 1 】Werkzeug WSGI-(socket服务端)

Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等

Werkzeug is a comprehensive WSGI web application library. It began as a simple collection of various utilities for WSGI applications and has become one of the most advanced WSGI utility libraries.
Werkzeug 是一个综合性 WSGI Web 应用程序库。它最初是 WSGI 应用程序的各种实用程序的简单集合,现已成为最先进的 WSGI 实用程序库之一。

Werkzeug doesn’t enforce any dependencies. It is up to the developer to choose a template engine, database adapter, and even how to handle requests
Werkzeug 不强制执行任何依赖关系。由开发人员选择模板引擎、数据库适配器,甚至如何处理请求



# django--->wsgiref ,uwsgi
# flask---->Werkzeug
# django或flask--》都需要有web服务器---》web服务器需要符合 wsgi协议
	-规定了,框架是一个可调用对象,请求来了,wsgi服务器调用这个对象的时候,会传入 两个参数environ,start_response
    -flask中能找到这两个参数,django中也能找到这两个参数

  


# https://werkzeug.palletsprojects.com/en/3.0.x/

# 后期:
	测试django项目,使用wsgiref,上线djagno项目,使用uwsgi,gunicorn
    测试flask项目,使用werkzeug,上线djagno项目,使用uwsgi,gunicorn
    

在这里插入图片描述

2.1.1什么是wsgiref

wsgiref 是 Python 标准库中的一个模块,用于实现 WSGI(Web 服务器网关接口)。它包含了一些用于开发和测试 WSGI 服务器和应用程序的工具和实用程序。

2.1.2什么是uwsgi

uwsgi 是一个 Web 服务器软件,用于部署 Python 程序。它是一个快速的、纯 C 语言编写的 Web 服务器,可用于部署 Python WSGI 应用程序。uwsgi 服务器与 WSGI 应用程序之间通过通用网关接口 (uWSGI) 进行通信。

2.1.3什么是Werkzeug

Werkzeug 是一个 Python 的 WSGI 工具库,用于构建 Web 应用程序和框架。它提供了许多实用的工具和实用程序,包括路由、调试器和服务器。Werkzeug 的设计灵感来自于 Ruby 的 Rack 框架,它被广泛用于构建 Flask 框架等 Python Web 应用程序。

2.1.4什么是WSGI 协议

WSGI 协议(Web 服务器网关接口)是一种定义了 Web 服务器和 Web 应用程序之间通信的标准协议。它允许不同的 Web 服务器(比如 Nginx、Apache 等)与不同的 Web 框架(比如 Flask、Django 等)之间进行交互,使得开发者可以使用不同的工具组合来构建 Web 应用。

image-20240612162602916

2.1.5Werkzeug的使用

from wsgiref.simple_server import make_server


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()
  • 这段代码的意思就是如果访问的是127.0.0.1:8011/index 就会输出为什么在本地定义的index.html的内容,如果不是就会返回我们定义的data = b'<h1>Hello, web!</h1>'
  • image-20240612192014631

image-20240612191715324

在这里插入图片描述

  • 有了 Request和Response,路由分发,可以获取静态文件,可以返回html页面
  • 注意request.args.get 就是在请求头获取数据

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', '你是谁!!!!')}!"
    response = Response(text, mimetype='text/plain')
    return response(environ, start_response)

if __name__ == '__main__':
    run_simple('localhost', 4000, application)

在这里插入图片描述

【 2 】Jinja template engine

Jinja — Jinja Documentation (3.1.x) (palletsprojects.com)

​ Jinja 是一个快速、富有表现力、可扩展的模板引擎。模板中的特殊占位符允许编写类似于 Python 语法的代码。然后向模板传递数据以渲染最终文档。

【 3 】Click CLI

​ Click 是一个 Python 包,用于以可组合的方式使用尽可能少的代码创建漂亮的【命令行界面】。它是“命令行界面创建工具包”。它具有高度可配置性,但具有开箱即用的合理默认值。

​ 它的目的是使编写命令行工具的过程变得快速而有趣,同时也防止因无法实现预期的 CLI API 而造成的任何挫败感。

  • 命令的任意嵌套。
  • 自动生成帮助页面。
  • 支持在运行时延迟加载子命令。
import click
@click.command()
@click.option('--count', default=6, 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 {count}!")

if __name__ == '__main__':
    hello()

# python版本号 "py文件名.py" --定制名 = ?
# 1  python310 "ClickCLI.py" --count=3
# 2  python310 "ClickCLI.py" --help
# 3  python310 "ClickCLI.py" --count=3 --name=jing

image-20240612194205431

【 4 】flask使用

【 1 】基本使用

from flask import Flask

# 1 实例化得到对象
app = Flask(__name__)


# 2 注册路由--》写视图函数
@app.route('/')
def index():
    # 3 返回给前端字符串
    return 'hello world'


if __name__ == '__main__':
    # 运行app,默认运行在5000
    app.run()
    
    app.run(host='0.0.0.0',port=8080)

image-20240612201741794

【 2 】watchdog使用

  • pip3 install watchdog
# pip3 install watchdog
# 当前目录下文件修改会被监控到,打印日志
import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __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()

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

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

相关文章

12.xss之js输出

12.xss之js输出 后台源码文件 输出的源码 输入1111之后能看到心中所爱 查看页面代码元素&#xff0c;1111在js中&#xff0c;如图所示&#xff1a; 接下来将这段代码复制出来进行编辑攻击代码 <script>$msx</script><script>alert("Xss"…

电阻屏和电容屏

目录 一、电阻屏 1.欧姆定律 2.电阻屏原理 &#xff08;1&#xff09;测量 X 坐标 &#xff08;2&#xff09;测量 Y 坐标 3.电阻屏数据 二、电阻屏 1.原理 2.电容屏数据 &#xff08;1&#xff09;Type A &#xff08;2&#xff09;Type B 3.电容屏的实验数据 一、…

Vue 学习之 axios

目录 执行安装命令&#xff1a;npm install axios 使用的时候导入 axios以data&#xff0c;params&#xff0c;headers传参方式的区别 axios封装 是一个基于 promise 的 网络请求库&#xff0c;作用于浏览器和 node.js 中。使用Axios可以在前端项目中发送各种方式的HTTP请求…

【redis】redis安装

1、安装前准备 1.1环境准备 VMware安装 参考博文&#xff1a;【VMware】VMware虚拟机安装_配置_使用教程_选择虚拟机配置选项,设置dvd镜像为 点击启动虚拟机-CSDN博客 安装centOS的linux操作系统 xshell xftp 参考博文&#xff1a;【Linux】Xshell和Xftp简介_安装_VMwar…

经验分享,免费商标查询网站

有时候想快速查询商标状况&#xff0c;官方网站比较慢&#xff0c;这里分享一个免费快速的网站。 网址&#xff1a;https://www.sscha.com/ 截图&#xff1a;

《Redis设计与实现》阅读总结-3

第 12 章 事件 Redis服务器是一个事件驱动程序&#xff0c;服务器需要处理两类事件&#xff1a;文件事件和时间事件 一、文件事件 1. 文件处理器&#xff1a;Redis基于Reactor模式开发了自己的网络事件处理器被称为文件处理器 文件事件处理器使用I/O多路复用程序来同时监听多…

vue 中监听生命周期事件

vue 中监听生命周期事件 常见的添加自定义事件的写法希望在子组件挂载时通知父组件在模板上监听组件生命周期vue3 生命周期事件吗&#xff1f;jsx 中如何监听生命周期事件呢&#xff1f;通过 vNode 操作 html vue3 父子组件的生命周期的执行顺序是怎样的&#xff1f;小结 vue2 …

Swift中的二分查找:全面指南

Swift中的二分查找&#xff1a;全面指南 简介 二分查找是计算机科学中的经典算法&#xff0c;被广泛用于在已排序的数组中高效地搜索目标值。与线性查找逐个检查每个元素不同&#xff0c;二分查找不断将搜索区间减半&#xff0c;因此在处理大数据集时要快得多。 在这篇博客中…

FairyGUI框架下unity发布微信小游戏问题记录

一、unity发布微信小游戏中文字体不显示 在unity中发布WebGl项目时&#xff0c;如果使用的是默认字体就会出现中文字体丢失现象。 这个是在unity中 这个是在微信开发者工具里面显示的 解决办法&#xff1a; 打开我的电脑 C:\Windows\Fonts 随便找一个文件结尾为.ttf的字体…

如何实现系统重装和还原?电脑重装系统的详细介绍(内附系统还原教程)

我们使用电脑办公时&#xff0c;如果出现卡顿、运行缓慢、蓝屏崩溃或病毒感染时&#xff0c;可以通过重装系统的方法来解决。但是电脑系统还原和系统重装都比较麻烦&#xff0c;很多电脑小白跟小编一样&#xff0c;无从下手。 系统重装&#xff1a;重装系统则是将电脑系统完全清…

化茧成蝶 | 继HuggingFace首家落地大模型具身智能场景

关于具身智能的起源 近年来&#xff0c;大语言模型&#xff08;LLMs&#xff09;的兴起给机器人领域带来了革命性的改变&#xff0c;大模型赋予了传统机器人理解和推理的能力&#xff0c;让具身智能这一概念再度出现在大众的视角中。OpenCSG 作为国内 AI 开源社区的先锋&#…

如何快速解决验证码图像问题 | 最佳图像(OCR)验证码解决工具

你是否曾经遇到过陷入一个看似无尽的 CAPTCHA 挑战中&#xff0c;努力识别扭曲的字符或数字&#xff1f;这些令人抓狂的 CAPTCHA 是为了确保你是人类而不是机器人&#xff0c;但它们也给真正的用户带来了头痛。那么&#xff0c;有没有快速解决这些 CAPTCHA 图像的方法&#xff…

Python jsonschema库:数据验证的强大工具

更多Python学习内容&#xff1a;ipengtao.com 在处理JSON数据时&#xff0c;验证其结构和内容的正确性至关重要。jsonschema是一个用于描述和验证JSON文档结构的标准&#xff0c;Python的jsonschema库是实现这一标准的强大工具。本文将详细介绍jsonschema库的功能、安装与配置、…

安卓webview加载vue打包后的项目

<?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"ty.sql.dqwgsw"><uses-permission android:name"android.permission.INTERNET" /&g…

需求之 实现获取调试信息在h5页面,在手机端可以查看调试(二)

事实证明 chatgpt很好用&#xff0c;有不懂的问题可以问它 https://zhuanlan.zhihu.com/p/690118775 国内外9个免费的ChatGPT网站 我筛选出来的比较好用免费的网站 fchat.dykyzdh.cn/ 这个也可以 阿里云的 通义灵码 在vscode中安装使用 而且阿里云有一个产品&#xff0c;可以…

国产音频放大器工作原理以及应用领域

音频放大器是在产生声音的输出元件上重建输入的音频信号的设备&#xff0c;其重建的信号音量和功率级都要理想&#xff1a;如实、有效且失真低。音频范围为约20Hz&#xff5e;20000Hz&#xff0c;因此放大器在此范围内必须有良好的频率响应&#xff08;驱动频带受限的扬声器时要…

STM32F1+HAL库+FreeTOTS学习1——FreeRTOS入门

STM32F1HAL库FreeTOTS学习1——FreeRTOS入门 裸机开发与操作系统嵌入式操作系统简介FreeRTOS简介FreeRTOS的几个重要概念任务调度器任务状态状态列表 裸机开发与操作系统 在以往的嵌入式学习中&#xff0c;我们最常用的就是裸机开发&#xff0c;所谓裸机开发就是指在没有操作系…

AI开发Windows环境搭建

文章目录 1. GPU 支持检查2. 安装 Anaconda3. 创建 PyTorch 虚拟环境3.2 创建虚拟 PyTorchEnv 环境3.3 检查、激活、推出虚拟环境3.4 虚拟环境中python包管理3.5 虚拟环境中安装 PyTorch 框架 4. TensorFlow 安装 1. GPU 支持检查 打开 Task Manager (任务管理器&#xff09;&…

使用VMware创建Ubuntu 24.04【一】

相关链接下载地址 VMware https://www.vmware.com/content/vmware/vmware-published-sites/cn/products/workstation-pro/workstation-pro-evaluation.html.html.html Ubuntu 24.04 LTS https://cn.ubuntu.com/download/desktop 虚拟机创建 1、打开VNware软件&#xff0c;点…

Qt小项目 | 实现迅雷设置界面

文章目录 一、手写代码实现迅雷设置界面 一、手写代码实现迅雷设置界面 使用Qt控件&#xff08;如&#xff1a;QListWidget与QScrollArea等&#xff09;与布局实现腾讯会议登陆界面。设置界面除基本设置界面外&#xff0c;其他界面都是以图片的形式嵌入到项目中并没有手写代码。…