【Python】flask框架学习 flask框架的基本使用

news2024/10/1 23:37:32

flask框架是什么?

Flask 是一个轻量级的 Web 框架,用于构建 Web 应用程序。它基于 Python 编程语言和 Werkzeug 工具包,提供了简单易用的 API,可以轻松地创建 RESTful API 和 Web 应用程序。

flask的特点

  • 轻量级:Flask 框架非常轻量级,代码库小巧,易于学习和使用。
  • 灵活:Flask 提供了许多插件和扩展,可以根据需要灵活地构建 Web 应用程序。
  • 易扩展:Flask 框架易于扩展,可以添加许多自定义功能。
  • 模板引擎:Flask 提供了 Jinja2 模板引擎,可以轻松地构建动态页面。
  • ORM:Flask 提供了 SQLAlchemy ORM,可以轻松地与数据库进行交互。
  • RESTful API:Flask 框架提供了 Flask-RESTful 扩展,可以轻松地构建 RESTful API。
  • 插件机制:Flask 提供了丰富的插件机制,可以根据需要添加自定义功能。

flask框架的优点

  • 简单易用:Flask 框架简单易用,学习成本低,适合快速构建 Web 应用程序。
  • 灵活性强:Flask 提供了许多扩展和插件,可以根据需要灵活地构建 Web 应用程序。
  • 易于扩展:Flask 框架易于扩展,可以添加许多自定义功能。
  • 模板引擎强大:Flask 提供了 Jinja2 模板引擎,可以轻松地构建动态页面。
  • ORM 强大:Flask 提供了 SQLAlchemy ORM,可以轻松地与数据库进行交互。
  • 支持 RESTful API:Flask 框架提供了 Flask-RESTful 扩展,可以轻松地构建 RESTful API。
  • 插件丰富:Flask 提供了丰富的插件机制,可以根据需要添加自定义功能。

总之,Flask 框架是一个轻量级、灵活、易扩展、模板引擎强大、ORM 强大、支持 RESTful API 和丰富的插件机制的 Web 框架,可以帮助开发者快速地构建高质量的 Web 应用程序。

flask框架的基本使用

flask框架可以轻松的构建最基础的服务器程序,只需要运行以下代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "hello world"

if __name__ == '__main__':
    app.run(debug=True)

该段代码首先导入了flask库中的 Flask类,该类的实例将会成为我们的 WSGI 应用,app就是实例化出来的应用,再使用装饰类使该web应用处理请求信息为"/"的请求。

运行结果:
在这里插入图片描述
打开给出的链接:
在这里插入图片描述
会发现在该url下页面返回hello world的字符串,说明最简单的flask框架的web应用以及搭建完成。

注意:127.0.0.1 以及0.0.0.0 是本地地址,5000是端口号

路由、变量、及url规则

路由

路由是指在 Web 应用程序中跳转到的页面或 URL。在 Flask 中,路由是使用 route() 函数定义的。

比如如下代码:

from flask import Flask
app = Flask(__name__)
# 路由

@app.route('/')
def index():
    return "hello world!"

@app.route('/hello/<name>')
def home(name):
    return "hello " + name

@app.route('/blg/<int:postID>')
def postid(postID):
    return postID

if __name__ == '__main__':
    app.run()

如果访问5000端口的根目录:
在这里插入图片描述

如果访问hello/xiaoming:
在这里插入图片描述

变量

变量是在路由中使用的一种特殊的数据。它们可以在路由的参数中传递给视图函数。Flask 框架中有几种变量类型,包括:

  • request:用于处理客户端请求的对象。
  • session:用于存储会话数据的对象。
  • route:用于标识特定路由的变量。

要在 Flask 路由中使用变量,只需将它们放在变量字符串中,并在视图函数中引用它们。例如,要在 URL 中定义一个名为 /users/ 的变量,可以使用以下代码:

from flask import Flask, render_template  
  
app = Flask(__name__)  
  
@app.route('/users/<name>')  
def users(name):  
    return render_template('users.html', users=[name])

上面的代码首先导入 Flask 库,创建一个应用程序实例,并在 app.route() 函数中定义了一个名为 /users/ 的变量。这个变量有一个名为 name 的变量。在 users.html 模板中,可以使用 {{ name }} 来引用这个变量。

URL 规则

URL 规则是指在 URL 中使用的一些特殊字符。它们可以用来指定请求的处理方式,例如:

  • /users:处理所有 URL 以 /users 开头的请求。
  • /users/:处理所有 URL 以 /users/ 开头的请求。
  • /users//:处理所有 URL 以 /users// 开头的请求。

要在 Flask 路由中使用 URL 规则,只需在路由的参数中使用相应的前缀和后缀。例如,要在 URL 中定义一个名为 /users// 的变量,可以使用以下代码:

from flask import Flask, render_template  
  
app = Flask(__name__)  
  
@app.route('/users/<name>/<sub-path>')  
def users(name, sub_path):  
    return render_template('users.html', users=[name], sub_path=sub_path)

上面的代码首先导入 Flask 库,创建一个应用程序实例,并在 app.route() 函数中定义了一个名为 /users/ < name >/ < sub-path> 的变量。这个变量有一个名为 name 的变量和一个名为 sub_path 的变量。在 users.html 模板中,可以使用 {{ sub_path }} 来引用这个变量。注意,要使用不同的变量类型和路由参数来区分不同的请求。

flask的模板

from flask import Flask,render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True,threaded=True)

运行这段代码,服务器就会从该文件中平级的templates目录下寻找index.html文件,并且把它显示在页面中。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <h1>Nihao</h1>
</body>
</html>

这是index.html

运行结果:
在这里插入图片描述

Flask.render_template 是 Flask 中用于渲染模板的核心函数。该函数接收一个模板字符串作为参数,并将其渲染为HTML。

以下是 Flask.render_template 的基本用法:

from flask import Flask, render_template  
  
app = Flask(__name__)  
  
@app.route('/')  
def index():  
    return render_template('index.html', name='World')  
  
@app.route('/hello')  
def hello():  
    name = 'John'  
    return render_template('hello.html', name=name)

我们定义了两个路由函数 index 和 hello,它们都接收一个模板字符串作为参数。在 index 函数中,我们将 name 变量设置为 ‘World’,并将其作为参数传递给 render_template 函数来渲染模板。在 hello 函数中,我们将 name 变量设置为 ‘John’,并将其作为参数传递给 render_template 函数来渲染模板。

当我们运行 Flask 应用程序时,它将加载 index.html 和 hello.html 模板,并将它们渲染为相应的HTML。

在渲染模板时,Flask 会将变量插入到模板字符串中,并将其作为参数传递给 render_template 函数。在模板渲染时,Flask 会将这些变量作为参数插入到HTML中,并返回生成的HTML字符串。

静态文件、重定向和错误

在 Flask 中,静态文件、重定向和错误处理是非常重要的概念,它们在应用程序的正常运行中起着至关重要的作用。下面将详细讨论它们在 Flask 中的实现及应用场景。

  • 静态文件
    静态文件是存储在服务器上的文件,通常用于存储数据和资源。在 Flask 中,静态文件通常用于存储应用程序的配置信息、日志、样式表等。

要使用静态文件,需要在 Flask 应用程序中创建一个文件夹来存储静态文件。然后,在应用程序的主文件中,使用 url_for() 函数来引用静态文件。例如:

from flask import Flask, render_template  
  
app = Flask(__name__)  
  
@app.route('/')  
def index():  
    return render_template('index.html', name='World')  
  
if __name__ == '__main__':  
    # 创建静态文件夹  
    app.config['UPLOAD_FOLDER'] = 'static'  
  
    # 引用静态文件  
    static_folder = '../static'  
    app.url_for('static', filename=static_folder)

在这段代码中,我们在应用程序的主文件夹中创建了一个名为 static 的文件夹,然后在应用程序的 index 函数中使用 url_for() 函数来引用该静态文件。这样,在应用程序运行时,静态文件就会被自动加载并显示在浏览器中。

  • 重定向
    重定向是指将用户重定向到另一个位置的过程。在 Flask 中,重定向主要分为两种类型:①静态重定向(URL redir):将用户重定向到另一个静态文件夹;②动态重定向(URL redirect):将用户重定向到另一个页面。

对于静态重定向,只需在静态文件夹中创建相应的文件即可。而对于动态重定向,则需要使用 Flask 路由器来实现。以下是一个动态重定向的示例:

from flask import Flask, render_template, redirect, url_for, request, send_from_directory  
  
app = Flask(__name__)  
app.config['UPLOAD_FOLDER'] = 'static'  
  
@app.route('/users', methods=['GET', 'POST'])  
def users():  
    if request.method == 'POST':  
        # 获取新用户信息并进行处理  
        new_user = request.form['new_user']  
        # 进行重定向操作  
        url = url_for('user', username=new_user)  
        return redirect(url)  
    else:  
        # 显示列表页面  
        return render_template('users.html')

cookies及会话

在 Flask 框架中,cookies 和 session 是用来存储和管理用户数据的。

cookies 是一种常见的用户数据存储方式,通常用于在用户会话中存储一些简单的数据,如用户的偏好设置、登录状态等。Flask 默认使用 SessionCookieJar 来管理 cookies。

当用户在浏览器中访问一个 Flask 应用时,浏览器会将 cookies 存储在本地计算机上。当用户关闭浏览器并重新打开时,浏览器会将 cookies 重新加载到用户的计算机中,以便用户能够访问之前保存的数据。

要在 Flask 中使用 cookies,你需要在路由处理程序中添加 secret_key 参数,这个参数用于指定 cookie 的安全密钥。

from flask import Flask, render_template, request, redirect,session

app = Flask(__name__)
app.secret_key = 'my_secret_key'


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 获取用户输入的用户名和密码  
        username = request.form['username']
        password = request.form['password']

        # 在数据库中添加登录记录  
        if username == 'my_username' and password == 'my_password':
            session['username'] = username
            return redirect('/')
        else:
            return render_template('login.html', error='Invalid username or password')

    return render_template('index.html')

if __name__ == '__main__':
    app.run()

我们在 /login 路由处理程序中使用了 secret_key 参数来指定 cookie 的安全密钥。这样,当用户重新访问应用时,浏览器会将 cookie 重新加载到用户的计算机中,以便用户能够访问之前保存的数据。

另外,Flask 还提供了会话(session)的概念,用于在用户会话中存储更复杂的数据,如用户的偏好设置、登录状态等。会话通常是通过在服务器端存储数据来实现的,而不是在客户端存储数据。

会话

在 Flask 中,会话是通过使用 Flask-Session 模块来实现的。要在 Flask 中使用会话,你需要在路由处理程序中添加 secret_key 参数,这个参数用于指定会话的安全密钥。

from flask import Flask, render_template, request, redirect, url_for  
from flask_session import Session  
  
app = Flask(__name__)  
app.secret_key = 'my_secret_key'  
  
@app.route('/')  
def index():  
    return render_template('index.html')  
  
@app.route('/login', methods=['GET', 'POST'])  
def login():  
    if request.method == 'POST':  
        # 获取用户输入的用户名和密码  
        username = request.form['username']  
        password = request.form['password']  
  
        # 在数据库中添加登录记录  
        if username == 'my_username' and password

消息闪现

Flask 框架中的消息闪现(Flash)是一种用于在 Web 应用程序中显示简短提示信息的技术。当用户与应用程序交互时,如果有一些非常重要的信息需要立即告知用户,则可以使用 Flash。

要使用 Flask Flash,你需要在视图函数中使用 flash 参数来存储需要显示的提示信息。然后,在提示信息显示之前,使用 flash.get() 方法来检查是否已经显示了提示信息。如果提示信息已经存在,则将其替换为新的提示信息;否则,将提示信息添加到 Flash 对象中。

from flask import Flask, flash  
  
app = Flask(__name__)  
  
@app.route('/')  
def index():  
    flash('This is a flash message!')  
    return 'Hello, World!'

这就是一段消息闪现的代码,当用户与应用程序交互时,flash 对象中存储的提示信息将被显示。在这种情况下,提示信息是“This is a flash message!”。在用户与应用程序交互后,flash 对象中的提示信息将被自动删除。

文件上传

在 Flask 中处理文件上传非常简单。它需要一个 HTML 表单,其 enctype 属性设置为“multipart/form-data”,将文件发布到 URL。

URL 处理程序从 request.files[] 对象中提取文件,并将其保存到所需的位置。每个上传的文件首先会保存在服务器上的临时位置,然后将其实际保存到它的最终位置。目标文件的名称可以是硬编码的,也可以从 request.files[file] 对象的 filename 属性中获取。

from flask import Flask, request, jsonify  
  
app = Flask(__name__)  
  
@app.route('/upload', methods=['POST'])  
def upload_file():  
    # 检查是否有文件被上传  
    if 'file' not in request.files:  
        return jsonify({'error': 'No file uploaded.'}), 400  
  
    file = request.files['file']  
  
    # 安全保存文件到磁盘  
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))  
  
    return jsonify({'success': True}), 200

当用户上传文件时,request.files[‘file’] 对象将被创建并保存到指定的文件路径中。然后,文件将被安全地保存到服务器上的指定位置。最后,响应将包含一个成功的消息,其中包含一个键值“success”,表示上传成功。

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

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

相关文章

学会这些常用调试技巧,让你的C/C++代码调试起来如虎添翼

本篇博客主要讲解程序员最应该掌握的技能之一——调试。我个人认为&#xff0c;学习编程&#xff0c;有2件事情非常重要&#xff0c;一是画图&#xff0c;一是调试。下面我会以Visual Studio 2022为例&#xff08;VS的其他版本大同小异&#xff09;&#xff0c;演示如何调试一个…

怎么体验gpt4-国内怎么使用chatGPT

gpt4api要等多久 目前&#xff0c;OpenAI尚未公布GPT-4 API的发布计划和时间表。GPT-4 将是前置还增加强大的自然语言处理能力和推理能力&#xff0c;OpenAI正在为其开发和研究&#xff0c;以使其更加流畅、准确和智能。因此&#xff0c;GPT-4 API的发布时间尚未确定。但是&am…

云原生Istio安装和使用

目录 1 Kubernetes集群环境2 安装Istio2.1 快速部署Istio2.2 回顾K8S组件以及使用2.2.1 Deployment2.2.2 Labels and Selectors2.2.3 Namespace2.2.4 Service2.2.5 Ingress 2.3 初步感受istio2.4 手动注入2.5 自动注入sidecar 1 Kubernetes集群环境 Istio支持在不同的平台下安装…

华为OD机试真题(Java),计算字符串的编辑距离(100%通过+复盘思路)

一、题目描述 Levenshtein 距离&#xff0c;又称编辑距离&#xff0c;指的是两个字符串之间&#xff0c;由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符&#xff0c;插入一个字符&#xff0c;删除一个字符。编辑距离的算法是首先由…

STM32CubeMX时钟树配置详解(F103)

外部时钟配置 学习时使用的是stm32f103系列芯片&#xff0c;文档的时钟树属实不适合新手阅读&#xff0c;STM32cube的功能很强大&#xff0c;时钟树清晰明了&#xff1a; 首先我们要知道&#xff0c;芯片需要一个频率来进行工作&#xff0c;通常选用的是晶振来提供工作频率&a…

数据存储系统概要

可靠、可扩展与可维护性 现在有很多都属于数据密集型&#xff0c;而不是计算密集型。对于这些类型应用&#xff0c;CPU的处理能力往往不是第一限制性因素&#xff0c;关键在于数据量、数据的复杂度及数据的快速多边形。 数据密集型应用模块&#xff1a; 数据库&#xff1a;存…

不会JVM调优怎么进互联网大厂

&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3; &#x1f38d;大家好&#xff0c;我是慕枫 &#x1f38d;前阿里巴巴高级工程师&#xff0c;InfoQ签约作者、阿里云专家博主&#xff0c;一直致力于用大白话讲解技术知识 &#x…

设计模式七大设计原则

文章目录 1、什么是设计模式2、单一职责原则3、开闭原则4、接口隔离原则5、依赖倒置原则6、迪米特法则&#xff08;最少知道原则&#xff09;7、里式替换原则8、组合优于继承 设计模式主要是为了满足一个字 变&#xff0c;这个字&#xff0c;可能是需求变更、可能是场景变更&a…

【VAR | 时间序列】以美国 GDP 和通货膨胀数据为例的VAR模型简单实战(含Python源代码)

以美国 GDP 和通货膨胀数据为例&#xff1a; 1. 数据集 下载数据我们需要从 FRED 数据库下载美国 GDP 和通货膨胀数据&#xff0c;并将它们存储在 CSV 文件中。可以在 FRED 网站&#xff08;https://fred.stlouisfed.org/&#xff09;搜索并下载需要的数据。在这里&#xff0…

非静压模型SWASH学习(7)——自制算例Lock-Exchange

自制算例Lock-Exchange 算例简介模型配置网格及参数设置网格与地形初始条件与边界条件物理参数设置数值求解方法模型输出计算时间 模拟结果 SWASH是由Delft大学开发&#xff0c;用于模拟非静压条件下的水动力/波浪运动的数值模型。 与模型原理相关的内容详见以下论文&#xff1…

Centos系统安装RabbitMQ消息中间件

记录一下在centos7.x下面安装RabbitMQ消息中间件 RabbitMQ是一个开源而且遵循 AMQP协议实现的基于 Erlang语言编写&#xff0c;因此安装RabbitMQ之前是需要部署安装Erlang环境的 先安装Erlang https://packagecloud.io/rabbitmq/ 点进去可以看到 因为使用的centos是7.x版本的…

内网渗透(六十二)之 NTLM Realy 攻击

NTLM Realy 攻击 NTLM Realy 攻击其实应该称为Net-NTLM Realy 攻击,它发生在NTLM认证的第三步,在Response 消息中存在Net-NTLM Hash,当攻击者获得了 Net-NTLM Hash 后,可以重放Net-NTLM Hash 进行中间人攻击。 NTLM Realy 流程如图所示,攻击者作为中间人在客户端和服务器…

asp.net基于web的音乐管理网站dzkf17A9程序

本系统主要包含了等系统用户管理、公告信息管理、音乐资讯管理、音乐类型管理多个功能模块。下面分别简单阐述一下这几个功能模块需求。 管理员的登录模块&#xff1a;管理员登录系统对本系统其他管理模块进行管理。 用户的登录模块&#xff1a;用户登录本系统&#xff0c;对个…

如何免费使用ChatGPT进行学术润色?你需要这些指令...

目录 1 ChatGPT4.0上线2 中科院ChatGPT学术版3 学术润色Prompts 1 ChatGPT4.0上线 2023年3月14日&#xff0c;OpenAI发布ChatGPT4.0。ChatGPT4.0比3.5更大&#xff0c;拥有更多的参数。这意味着它可以更好地捕捉和理解语言的复杂性和细微差别&#xff0c;而且ChatGPT4.0是多模…

【五一创作】《嵌入式系统》知识总结6:GPIO的结构和功能

GPIO的结构和功能 1.STM32提供通用的输入输出引脚&#xff08;GPIO&#xff09; • 输出高低电平控制外设 • 输入0、1检测外设状态 2.可配置为复用的输入输出引脚&#xff08;AFIO&#xff09; • 大多数GPIO都有默认的复用功能&#xff1a; 可作为片上外设&#xff08;如…

基于MobileNet的人脸表情识别系统(MATLAB GUI版+原理详解)

摘要&#xff1a;本篇博客介绍了基于MobileNet的人脸表情识别系统&#xff0c;支持图片识别、视频识别、摄像头识别等多种形式&#xff0c;通过GUI界面实现表情识别可视化展示。首先介绍了表情识别任务的背景与意义&#xff0c;总结近年来利用深度学习进行表情识别的相关技术和…

android基础知识

架构&#xff1a; 应用框架层&#xff08;Java API Framework&#xff09;所提供的主要组件&#xff1a; 名称功能描述Activity Manager&#xff08;活动管理器&#xff09;管理各个应用程序生命周期&#xff0c;以及常用的导航回退功能Location Manager&#xff08;位置管理器…

智能是逻辑吗?

智能是指人或机器能够理解、学习、推理、解决问题和适应环境的能力。而逻辑是一种推理方式&#xff0c;它是智能中的一部分&#xff0c;帮助我们正确地推理和理解信息。逻辑能够提高我们的思考能力、解决问题的能力和决策能力&#xff0c;但智能还包括其他方面&#xff0c;如感…

数据结构课程——第一次作业

T1:Gram_ham实现凸包算法&#xff1a; &#xff08;1&#xff09;思路&#xff1a; &#xff08;2&#xff09;代码&#xff1a; #include<iostream> #include<string> #include<vector> #include<algorithm> #include<stack>using namespace …

存储网络架构——DAS、NAS、SAN、分布式组网架构

目录 DAS直连式存储 NAS网络附加存储 SAN存储 存储区域网络 分布式存储组网 DAS直连式存储 DAS遇到的挑战 NAS网络附加存储 向主机提供文件服务&#xff1b;文件系统由存储设备维护&#xff0c;用户访问文件系统&#xff0c;不直接访问底层存储 拥有所有主机上文件与底层存储空…