flask基础知识1

目录

1.介绍

2.体验一下

 3.配置参数:

4.路由和URL

1.路由

2.动态路由:

自定义转换器:

 3.使用自定义转换器

 5.url_for函数

6.request参数

7.处理响应:

1.重定向:

2.返回json数据:

 3.返回模板:




flask中文文档


 

1.介绍

Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数 据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文 件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。 其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。

2.体验一下

1.导入flask,没有安装flask包的先安装一下,pip install flask

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():  return 'Hello World!'if __name__ == '__main__':app.run()

 3.配置参数:

主要配置的有:数据库连接信息,日志的配置信息,自定义配置信息

1以对象的方式配置

from flask import Flaskapp = Flask(__name__)class DefaultConfig(object):"""默认配置"""USER = 'ROOT'app.config.from_object(DefaultConfig)@app.route('/')
def hello_world():return 'Hello World!'if __name__ == '__main__':app.run()

2.新建一个配置文件来配置:新建一个文件setting.py,里面写:USER=‘root'形式的配置信息


app = Flask(__name__)app.config.from_pyfile('setting.py')@app.route("/")
def index():return "hello world"if __name__ == '__main__':app.run()

3.从环境变量中加载:

 Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为

app.config.from_envvar('环境变量名')

环境变量的值位配置文件的绝对路径,先在终端中执行

export PROJECT_SETTING='~/setting.py'
app = Flask(__name__)# silent参数:True时表示环境变量中有没有值都不报错通知,False表示没有值的时候报错通知
app.config.from_envvar('PROJECT_SETTING', silent=True)@app.route("/")
def index():return "hello world"

4.路由和URL

1.路由

就是上面的@app.route('访问路径'),在应用中url_map属性保存着整个Flask应用的路由映射信息,可以通过整个读取路由信息

from flask import Flaskapp = Flask(__name__)class DefaultConfig(object):"""默认配置"""USER = 'ROOT'app.config.from_object(DefaultConfig)@app.route('/')
def hello_world():print(app.url_map)# 遍历所有路由信息for rule in app.url_map.iter_rules():print('name={} path={}'.format(rule.endpoint, rule.rule))return 'Hello World!'if __name__ == '__main__':print(app.url_map)app.run()

 

2.动态路由:

例如,有一个请求访问的接口地址为 /users/123 ,其中123实际上为具体的请求参数,表明请求123号用户的信 息。此时如何从url中提取出123的数据? Flask不同于Django直接在定义路由时编写正则表达式的方式,而是采用转换器语法:

@app.route('/users/<user_id>')
def user_info(user_id):return 'hello user {}'.format(user_id)

这里的<>就是一个转换器,默认位字符串类型,也就是整个括号里面的数据以字符串格式进行匹配,并以字符串位数据类型,user_id为参数名传入视图函数(def user_info)

那不是字符串格式的怎么进行匹配呢?flask中提供了常用的有:

DEFAULT_CONVERTERS = {'default': UnicodeConverter,'string': UnicodeConverter,'any': AnyConverter,'path': PathConverter,'int': IntegerConverter,'float': FloatConverter,'uuid': UUIDConverter,
}

 语法:<匹配类型:匹配参数>

@app.route('/users/<int:user_id>')
def user_info(user_id):return 'hello user {}'.format(user_id)

自定义转换器:

比如需要匹配邮箱,手机号等这些Flask中没有提供的转换器,那么就需要自定义一个了

1.创建转换器类,保存匹配时的正则表达式

2.将自定义的转换器保存到Flask中

from werkzeug.routing import BaseConverter
from flask import Flaskapp=Flask(__name__)# 自定义转换器的时候需要继承BaseConverter
class MobileConverter(BaseConverter):regex = r'1[3-9]\d{9}'# 将自定义的转换器加入到Flask应用中:Flask应用保存转换器的地方在app.url_map.converters中
app.url_map.converters['monbile']=MobileConverter

 3.使用自定义转换器

@app.route('/index/<mobile:mobile_num>')
def Mobile_data(mobile_num):return '受到一个手机号路由地址:{}'.format(mobile_num)

 5.url_for函数

一般我们通过一个 URL 就可以执行到某一个函数。如果反过来,我们知道一个函数,怎么去获得 这个 URL 呢? url_for 函数就可以帮我们实现这个功能。 url_for() :函数接收两个及以上的参数,他接收函数名作为第一个参数,接收对应URL规则的命名参数,如果还出 现其他的参数,则会添加到 URL 的后面作为查询参数。

from flask import Flask
from flask import url_forapp=Flask(__name__)# 自定义转换器的时候需要继承BaseConverter
class MobileConverter(BaseConverter):regex = r'1[3-9]\d{9}'# 将自定义的转换器加入到Flask应用中:Flask应用保存转换器的地方在app.url_map.converters中
app.url_map.converters['monbile']=MobileConverter@app.route('/index/<mobile:mobile_num>')
def Mobile_data(mobile_num):return '受到一个手机号路由地址:{}'.format(mobile_num)@app.route('/')
def hello():return url_for('Mobile_data',mobile_num='17888888888')# return "/index/1788888888?"

6.request参数

 我们都知道,在请求网页的时候会有许多的请求方式,比如get,post等等

在Flask中我们可以利用methods参数来指定接口的请求方式,在定义路由的时候加入中国参数就可以了

 get方式:把请求参数放到为url的?后面,每个请求参数格式为:参数名=参数值。参数之间采用&符号隔开。采用 的字符数据传输,所以也叫明文的请求

post: 表单提交,并且采用字节流的方式传递数据

@app.route('/index/',methods=['POST'])
def index():return '主页'@app.route('/user_info/',methods=['GET'])
def index():return '展示页面'

其他参数:

如果想要获取其他地方传递的参数,可以通过Flask提供的request对象来读取。 不同位置的参数都存放在request的不同属性中

 例如 想要获取请求 /find?user_id=1 中 user_id 的参数,可以按如下方式使用:

from flask import request@app.route('/index/')
def index():get_id=request.args.get('user_id')return '你传入的用户id为:{}'.format(get_id)

7.处理响应:

1.重定向:

就像你给一个链接,我点击了后就跳转到那个链接地址了,在这里你访问这个路由地址就跳转到百度去了

from flask import redirect@app.route('/index')
def index():return redirect('https://www.baoidu.com')

2.返回json数据:

from flask import jsonify@app.route('/index')
def index():json_data={'user_name':'张三','user_age':18}return jsonify(json_data)

 3.返回模板:

使用render_template方法渲染模板并返回

示例:先写一个简单的html页面,index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>index</title>
</head>
<body>
你好啊,世界
<br/>{{ user_name }}
<br/>{{ user_age }}
</body>
</html>

flask代码:

from flask import render_template@app.route('/')
def index():user_name='张三'user_age=18return render_template('index.html', user_name=user_name,user_age=user_age)

持续更新:点个赞呗!!!

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

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

相关文章

el-table 多选回显,分页回显

实现el-table多选分页回显功能&#xff0c;左侧是分页的数据源&#xff0c;右侧是选择后的人员数据&#xff0c;切换下一页&#xff0c;选中的数据会在左侧表格回显。 实现&#xff1a; <template><el-dialog :title"title" :visible.sync"show"…

java:spring使用【@ImportResource】导入一个xml里面定义的bean

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89434148 # 项目代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…

长亭培训加复习安全产品类别

下面这个很重要参加hw时要问你用的安全产品就有这个 检测类型产品 偏审计 安全防御类型 EDR类似于杀毒软件 安全评估 任何东西都要经过这个机械勘察才能上线 安全管理平台 比较杂 比较集成 审计 漏扫 评估 合在这一个平台 也有可能只是管理 主机理解为一个电脑 安了终端插件…

Vue39-组件的嵌套

一、嵌套的定义 二、嵌套示例 school组件中&#xff0c;嵌套student组件 局部注册&#xff0c;注册给谁&#xff0c;就在谁的结构里面写&#xff01; vue拿不到<student>组件标签&#xff01;&#xff01;&#xff01; 三、一人之下万人之上的app组件 或者容器里面不用…

6.14作业

使用手动连接&#xff0c;将登录框中的取消按钮使用第二中连接方式&#xff0c;右击转到槽&#xff0c;在该槽函数中&#xff0c;调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0…

探索Napier:Kotlin Multiplatform的日志记录库

探索Napier&#xff1a;Kotlin Multiplatform的日志记录库 在现代软件开发中&#xff0c;日志记录是不可或缺的部分&#xff0c;它帮助开发者追踪应用的行为和调试问题。对于Kotlin Multiplatform项目而言&#xff0c;能够在多个平台上统一日志记录的方法显得尤为重要。Napier…

WordPress实时搜索插件Ajax Search Lite,轻松替代默认搜索功能

WordPress自带的默认搜索功能是跳转到搜索结果页&#xff0c;如果你想要实时搜索功能&#xff0c;特别是在问答中心显示搜索功能&#xff0c;那么建议使用这个WordPress实时搜索插件Ajax Search Lite&#xff0c;它可以在文章、页面、自定义类型文章中搜索标题、内容、摘要、自…

XP系统安装Node.js v8.6.0并搭建Vue2开发环境(项目兼容到Vista的IE9浏览器)

下载并安装Node.js v8.6.0 通常我们开发Vue2项目&#xff0c;是通过vue create命令建立Vue2工程&#xff0c;用npm run serve命令启动Vue2网站的。 vue命令是用JavaScript写的&#xff0c;不是用C语言写的&#xff0c;必须要Node.js环境才能运行&#xff0c;由Node.js自带的np…

【Redis】String的常用命令及图解String使用场景

本文将详细介绍 Redis String 类型的常见命令及其使用场景&#xff0c;包括缓存、计数器、共享会话、手机验证码、分布式锁等场景&#xff0c;并且配图和伪代码进一步方便理解和使用。 命令执行效果时间复杂度set key value [key value…]设置key的值是valueO(k),k是键个数get…

『大模型笔记』主成分分析(PCA)解释:简化机器学习中的复杂数据!

主成分分析(PCA)解释:简化机器学习中的复杂数据 文章目录 一. 主成分分析(PCA)解释:简化机器学习中的复杂数据!二. 参考文献一. 主成分分析(PCA)解释:简化机器学习中的复杂数据! 主成分分析(Principal Component Analysis,简称PCA)通过 将大型数据集中的维度减少…

C#开发-集合使用和技巧(二)Lambda 表达式介绍和应用

C#开发-集合使用和技巧 Lambda 表达式介绍和应用 C#开发-集合使用和技巧介绍简单的示例&#xff1a;集合查询示例&#xff1a; 1. 基本语法从主体语句上区分&#xff1a;1. 主体为单一表达式2. 主体是代码块&#xff08;多个表达式语句&#xff09; 从参数上区分1. 带输入参数的…

【数据结构初阶】 --- 单链表

关于链表你应该先了解这些 下图描述了物理模型和逻辑模型&#xff0c;大多数常见的其实是逻辑模型&#xff0c;但这对初学者或者掌握不扎实的同学不太友好&#xff0c;所以这里我重点讲解物理模型&#xff0c;当了解了这些细节&#xff0c;以后做题或是什么就直接画逻辑模型就…

Java优雅统计耗时【工具类】

任务耗时如何优雅的打印&#xff0c;看完本文你就明白了&#xff01;~ import cn.hutool.core.date.StopWatch; import cn.hutool.core.lang.Console;/*** 优雅打印出任务耗时*/ public class Main {public static void main(String[] args) throws Exception{StopWatch stopW…

macOS Sequoia 开发者测试版下载和安装教程

macOS Sequoia 于 2024年6月10日在WWDC 2024 上发布&#xff0c;里面添加了AI、窗口排列、操控iPhone等功能&#xff0c;目前发布的为测试版本&#xff0c;可能很多人不知道怎么去下载安装&#xff0c;现在小编教一下大家怎么安装最新的 macOS Sequoia 开发者测试版。 下载 mac…

2024 年最新使用 Node 搭建QQ开放平台官方 QQ 频道机器人详细教程(更新中)

注册 QQ 开放平台账号 QQ 开放平台是腾讯应用综合开放类平台&#xff0c;包含 QQ 机器人、QQ 小程序、QQ 小游戏 等集成化管理&#xff0c;也就是说你注册了QQ 开放平台&#xff0c;你开发 QQ 机器人还是 QQ 小程序都是在这个平台进行部署上线和管理。 如何注册 QQ 开放平台账…

JAVAEE值之网络原理(1)_用户数据报协议(UDP)、概念、特点、结构、代码实例

前言 在前两节中我们介绍了UDP数据报套接字编程&#xff0c;但是并没有对UDP进行详细介绍&#xff0c;本节中我们将会详细介绍传输层中的UDP协议。 一、什么是UDP&#xff1f; UDP工作在传输层&#xff0c;用于程序之间传输数据的。数据一般包含&#xff1a;文件类型&#xff0…

超图制作栅格数据集专题图示例

之前写过一两篇专题图的博文&#xff0c;是制作的矢量数据集的专题图&#xff1b; 有一个栅格数据集如下&#xff0c;不知是干嘛的&#xff0c;可能是一个地形&#xff0c;或水系&#xff1b; 看一下对栅格数据集制作专题图&#xff1b;能制作的专题图类型少些&#xff0c; 先…

R 文件优化插件:Binary XML file in layout Error inflating class

场景一&#xff1a;构造函数缺失 问题 自定义布局&#xff08;FlagmentLayout&#xff09;加载自定义属性失败&#xff0c;导致广告显示异常&#xff0c;甚至是闪退&#xff5e; InflateException 在 Android 中我们遇到的通常发生在自定义 View 创建中&#xff0c;动态加载…

探索交互设计:五大关键维度全面剖析

交互式设计是用户体验&#xff08;UX&#xff09;设计的重要组成部分。在本文中&#xff0c;我将向大家解释什么是交互设计并简要描述交互设计师通常每天都做什么。 一、什么是交互设计 交互式设计用简单的术语来理解就是用户和产品之间的交互。在大多数情况下&#xff0c;当…

大白菜PE系统进入时一直 ACPI_BIOS_ERROR

安装系统PE不支持&#xff0c;主板不兼容&#xff0c;换个WIN10的PE就解决了&#xff0c;跟之前部分电脑需要WIN8的PE同理 WIN10PE教程 WIN8PE教程