当前位置: 首页 > news >正文

flask web开发学习之初识flask(三)

文章目录

      • 一、flask扩展
      • 二、项目配置
        • 1. 直接配置
        • 2. 使用配置文件
        • 3. 使用环境变量
        • 4. 实例文件夹
      • 三、flask命令
      • 四、模版和静态文件
      • 五、flask和mvc架构


一、flask扩展

flask扩展是指那些为Flask框架提供额外功能和特性的库。这些扩展通常遵循Flask的设计原则,易于集成到flask应用中,并且可以大大加快开发速度。
常用flask扩展:
Flask-SQLAlchemy:操作SQLAlchemy,它是一个强大的关系型数据库框架。
Flask-Migrate:基于Alembic的Flask扩展,用于处理SQLAlchemy数据库迁移。
Flask-WTF:整合了WTForms的Flask扩展,提供表单类和验证功能。
Flask-Login:提供用户会话管理,处理用户登录、登出和记住我功能。
Flask-Mail:提供邮件发送支持。
Flask-RESTful:用于快速开发REST API的Flask扩展。
Flask-HTTPAuth:用于HTTP认证的简单扩展。
Flask-Caching:提供缓存支持,可以与多种后端如Redis、Memcached等配合使用。
Flask-Session:一个Flask扩展,用于服务器端会话管理。
Flask-Admin:提供一个简单的界面来管理数据模型。
Flask-SocketIO:为Flask应用添加WebSocket支持。
Flask-CORS:处理跨源资源共享(CORS),使得你可以在Flask应用中轻松地处理跨域请求。

二、项目配置

1. 直接配置

可以直接在创建 Flask 应用实例后,通过字典的方式对其进行配置:

app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'your_secret_key'
2. 使用配置文件

在项目目录下创建config.py文件,将配置进行集中管理。

DEBUG = True
SECRET_KEY = 'your_secret_key'
SQLALCHEMY_DATABASE_URI = 'sqlite:///your-database.db'

然后在应用中加载此文件

import configapp = Flask(__name__)
app.config.from_object('config')
3. 使用环境变量

使用环境变量来配置Flask应用,能够让你的应用根据运行的环境(如开发环境、测试环境和生产环境)加载不同的配置,而无需更改代码。这样做有助于保护敏感信息,比如数据库的用户名和密码,不被直接存储在源代码中,同时也便于在不同的环境之间迁移应用。
在Unix-like系统(包括Linux和Mac OS X)中,你可以在命令行中设置环境变量,如下:

export YOURAPPLICATION_SETTINGS=/path/to/settings.cfg

在Windows系统中,你可以使用以下命令:

set YOURAPPLICATION_SETTINGS=/path/to/settings.cfg

假设setting.cfg文件中内容为:

DEBUG=False
SECRET_KEY='production_secret_key'
SQLALCHEMY_DATABASE_URI='mysql://user:password@localhost/dbname'

在Flask中,你可以使用app.config.from_envvar()函数来加载一个指向配置文件的环境变量。例如:

app = Flask(__name__)
app.config.from_envvar('YOURAPPLICATION_SETTINGS')

当你运行你的Flask应用时,它会读取YOURAPPLICATION_SETTINGS环境变量指定的配置文件,并加载其中的配置项。
在开发过程中,手动设置环境变量可能会有些不方便。为了解决这个问题,你可以使用Python-dotenv这样的库来自动地从.env文件中加载环境变量。
在.env文件中写入(.env文件的使用在flask web开发学习之初识flask(二)已提到过:

YOURAPPLICATION_SETTINGS=/path/to/settings.cfg
4. 实例文件夹

Flask允许你定义一个实例文件夹来存放私密配置信息。实例文件夹通常位于应用的根路径,与 static 和 templates 文件夹同级,并且不应该被版本控制系统跟踪(如.gitignore中应包含instance/)。

app = Flask(__name__, instance_relative_config=True)
app.config.from_pyfile('config.py', silent=True)

三、flask命令

除了flask内置的flask run等命令,我们也可以自定义命令。
通过创建任意一个函数,并为其添加app.cli.command()装饰器,我们就可以注册一个flask命令。

import click@app.cli.command()
def hello():click.echo('Hello, zly!')

函数的名称即为命令名称,这里注册的命令为hello,你可以使用flask hello命令来触发,也可以在app.cli.command()装饰器中传入参数来设置命令名称,比如传入"hello1",就可以使用flask hello1来触发。
在这里插入图片描述

四、模版和静态文件

在Flask中,模版和静态文件是构建动态网站的重要组成部分。它们通常用于呈现内容和提供客户端所需的样式和脚本。
模版(Templates):
模版是包含响应文本的文件,它们通常包含变量和表达式,这些变量和表达式在渲染时会被实际的值替换。这样,你就可以生成动态的HTML页面,其中的内容可以根据服务器端的数据来变化。

Flask默认使用Jinja2模版引擎来渲染模版。Jinja2是一个强大的模版引擎,它允许你使用类似Python的语法在模版中插入逻辑。

模版文件通常放置在Flask项目的 templates 文件夹中。以下是一个简单的模版示例:

<!-- templates/hello.html -->
<html>
<head><title>Hello Template</title>
</head>
<body><h1>Hello, {{ name }}!</h1>
</body>
</html>

在这个模版中,{{ name }} 是一个变量,它将在渲染模版时被传递到模版的值所替换。在Flask视图函数中,你可以使用 render_template 函数来渲染模版,并传递需要的变量:

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

静态文件(Static Files)
静态文件包括通常不会改变的文件,如CSS样式表、JavaScript脚本、图片等。这些文件直接由浏览器请求和加载,不需要经过服务器端的处理。
在Flask项目中,静态文件默认放在 static 文件夹中。

在HTML模版中引用这个静态文件,你可以使用Jinja2提供的 url_for 函数:

<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

这里的 url_for(‘static’, filename=‘style.css’) 调用会生成指向静态文件 style.css 的URL。

五、flask和mvc架构

Flask是一个轻量级的Web应用框架,它提供了构建Web应用所需的基本工具和功能。虽然Flask本身并不强制使用任何特定的架构模式,但它非常灵活,可以很容易地用来实现MVC(Model-View-Controller)架构模式。

在mvc架构中,程序被分为三个组件:数据处理(Model),用户界面(View),交互逻辑(Controller)。

严格来说,flask并不是mvc架构的框架,因为他没有内置数据模型支持。在flask中,我们可以这样实现mvc框架,模板文件=>View,视图函数=>Controller,ORM工具定义数据模型=>Model。

相关文章:

flask web开发学习之初识flask(三)

文章目录 一、flask扩展二、项目配置1. 直接配置2. 使用配置文件3. 使用环境变量4. 实例文件夹 三、flask命令四、模版和静态文件五、flask和mvc架构 一、flask扩展 flask扩展是指那些为Flask框架提供额外功能和特性的库。这些扩展通常遵循Flask的设计原则&#xff0c;易于集成…...

【设计模式-3.1】结构型——外观模式

说明&#xff1a;本文介绍设计模式中结构型设计模式中的&#xff0c;外观模式&#xff1b; 亲手下厨还是点外卖&#xff1f; 外观模式属于结构型的设计模式&#xff0c;关注类或对象的组合&#xff0c;所呈现出来的结构。以吃饭为例&#xff0c;在介绍外观模式之前&#xff0…...

flutter学习-day2-认识flutter

&#x1f4da; 目录 简介特点架构 框架层引擎层嵌入层 本文学习和引用自《Flutter实战第二版》&#xff1a;作者&#xff1a;杜文 1. 简介 Flutter 是 Google 推出并开源的移动应用开发框架&#xff0c;主打跨平台、高保真、高性能。开发者可以通过 Dart 语言开发 App&#…...

解决selenium使用.get()报错:unknown error: unsupported protocol

解决方法 将原来的&#xff1a; url "https://www.baidu.com" browser.get(url)替换为&#xff1a; url "https://www.baidu.com" browser.execute_script(f"window.location.replace({url});") # 直接平替 .get()问题解析 之前运行都是正…...

关于加密解密,加签验签那些事

面对MD5、SHA、DES、AES、RSA等等这些名词你是否有很多问号&#xff1f;这些名词都是什么&#xff1f;还有什么公钥加密、私钥解密、私钥加签、公钥验签。这些都什么鬼&#xff1f;或许在你日常工作没有听说过这些名词&#xff0c;但是一旦你要设计一个对外访问的接口&#xff…...

容器重启后,Conda文件完整保存(虚拟环境、库包),如何重新安装conda并迁移之前的虚拟环境

Vim安装 容器重启后默认是vi&#xff0c;升级vim&#xff0c;执行命令 apt install -y vim安装 Anaconda 1. 下载Anaconda 其他版本请查看Anaconda官方库 wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2023.03-1-Linux-x86_64.sh --no-check-certificate…...

gitee对接使用

1.创建一个文件夹 2.进入Gitee接受对方项目编辑 3.打开终端初始化一开始创建的文件夹 git init 3.1打开终端 3.2输入git.init 4.克隆对方的项目 4.1进入Gitee复制对方项目的路径 4.2在编辑器终端内克隆对方项目 git clone 网址 如此你的编辑器就会出现对方的项目 …...

C语言中的一维数组与二维数组

目录 一维数组数组的创建初始化使用在内存中的存储 二维数组创建初始化使用在内存中的存储 数组越界 一维数组 数组的创建 数组是一组相同类型元素的集合。 int arr1[10]; char arr3[10]; float arr4[10]; double arr5[10];下面这个数组能否成功创建&#xff1f; int count…...

【Linux】地址空间

本片博客将重点回答三个问题 什么是地址空间&#xff1f; 地址空间是如何设计的&#xff1f; 为什么要有地址空间&#xff1f; 程序地址空间排布图 在32位下&#xff0c;一个进程的地址空间&#xff0c;取值范围是0x0000 0000~ 0xFFFF FFFF 回答三个问题之前我们先来证明地址空…...

作为一个产品经理带你了解Axure的安装和基本使用

1.Axure的简介 Axure是一种强大的原型设计工具&#xff0c;它允许用户创建交互式的、高保真度的原型&#xff0c;以及进行用户体验设计和界面设计。Axure可以帮助设计师和产品经理快速创建和共享原型&#xff0c;以便团队成员之间进行沟通和反馈。Axure提供了丰富的交互组件和功…...

接口测试总结及其用例设计方法

接口测试的总结文档   第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f; 第二部分&#xff1a;主要介绍…...

2023团体程序设计天梯赛——模拟赛和总决赛题

M-L1-1 嫑废话上代码 Linux 之父 Linus Torvalds 的名言是&#xff1a;“Talk is cheap. Show me the code.”&#xff08;嫑废话&#xff0c;上代码&#xff09;。本题就请你直接在屏幕上输出这句话。 输入格式&#xff1a; 本题没有输入。 输出格式&#xff1a; 在一行中输出…...

智能优化算法应用:基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂鸟算法4.实验参数设定5.算法结果6.参考…...

视频中自监督学习:「我的世界」下指令理解与跟随

本文介绍了北京大学人工智能研究院梁一韬助理教授所带领的 CraftJarvis 团队在「我的世界」环境下探索通用智能体设计的新进展&#xff0c;题为“GROOT: Learning to Follow Instructions by Watching Gameplay Videos”。 ​ GROOT 该研究的核心目标是探索能否摆脱文本数据的标…...

Spring基于xml半注解开发

目录 Component的使用 依赖注解的使用 非自定义Bean的注解开发 Component的使用 基本Bean注解&#xff0c;主要是使用注解的方式替代原有的xml的<bean>标签及其标签属性的配置&#xff0c;使用Component注解替代<bean>标签中的id以及class属性&#xff0c;而对…...

功能测试,接口测试,自动化测试,压力测试,性能测试,渗透测试,安全测试,具体是干嘛的?

软件测试是一个广义的概念&#xff0c;他包括了多领域的测试内容&#xff0c;比如&#xff0c;很多新手可能都听说&#xff1a;功能测试&#xff0c;接口测试&#xff0c;自动化测试&#xff0c;压力测试&#xff0c;性能测试&#xff0c;渗透测试&#xff0c;安全测试等&#…...

oracle 下载java之前版本

登录oracle官网&#xff1a;Oracle | Cloud Applications and Cloud Platform 点击resource 进入该页面 点击这个 出现之前版本...

LLM之Agent(四)| AgentGPT:一个在浏览器运行的Agent

AgentGPT是一个自主人工智能Agent平台&#xff0c;用户只需要为Agent指定一个名称和目标&#xff0c;就可以在浏览器中链接大型语言模型&#xff08;如GPT-4&#xff09;来创建和部署Agent平台。 PS&#xff1a;目前agentGPT仅支持chatgpt模型&#xff0c;暂时不支持本地llm模…...

AGM离线下载器使用说明

AGM专用离线下载器示意图&#xff1a; 供电方式&#xff1a; 通过 USB 接口给下载器供电&#xff0c;跳线 JP 断开。如果客户 PCB 的 JTAG 口不能提供 3.3V 电源&#xff0c;或仅需烧写下载器&#xff0c;尚未连接用户 PCB 时&#xff0c;采用此种方式供电。 或者&#xff1a…...

viple与物理机器人(一):线控模拟

为了检测viple程序与物理机器人是否能顺利连接上 如果能顺利连接上&#xff0c;那么&#xff0c;可以通过内建事件从而控制物理机器人的前进、后退、左转、右转以及暂停。 如果不能连接上&#xff0c;首先&#xff0c;程序无法控制物理机器人&#xff0c;其次&#xff0c;当vip…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...

STL 2迭代器

文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器&#xff1f; 1.迭代器…...

vue3 手动封装城市三级联动

要做的功能 示意图是这样的&#xff0c;因为后端给的数据结构 不足以使用ant-design组件 的联动查询组件 所以只能自己分装 组件 当然 这个数据后端给的不一样的情况下 可能组件内对应的 逻辑方式就不一样 毕竟是 三个 数组 省份 城市 区域 我直接粘贴组件代码了 <temp…...