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.rhkb.cn/news/347070.html

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

相关文章

笨蛋学算法之LeetCodeHot100_1_两数之和(Java)

package com.lsy.leetcodehot100;public class _Hot1_两数之和 {//自写方法public static int[] twoSum1(int[] nums, int target) {//定义存放返回变量的数组int[] arr new int[2];//遍历整个数组for (int i 0; i < nums.length; i) {//从第二个数开始相加判断for (int j…

LeetCode:419. 甲板上的战舰(遍历 Java)

目录 419. 甲板上的战舰 题目描述&#xff1a; 实现代码与解析&#xff1a; 遍历 原理思路&#xff1a; 419. 甲板上的战舰 题目描述&#xff1a; 给你一个大小为 m x n 的矩阵 board 表示甲板&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 X 或者是一个空位 . &…

websocket php workerman 服务器nginx配置wss协议

首先 Nginx的版本要高&#xff0c;尽量用当前最新稳定版本。 其次 WSS协议&#xff0c;是在HTTPS协议的基础上&#xff0c;进行协议升级&#xff0c;进行通讯的&#xff0c;所以先要保证你有一个 HTTPS正常的WEB站点。 所以&#xff0c;通过Nginx -V 请保证 一定有 --with-ht…

【技巧】让xorg和gnome不要使用GPU

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 默认xorg会使用GPU加速&#xff1a; 现在取消他对GPU的占用&#xff1a; sudo vim /etc/X11/xorg.conf修改或添加以下内容&#xff1a; Section &quo…

VMware导入小白分享的MacOS版本之后,无法开机的解决方案

前言 这段时间陆续有小伙伴找到小白&#xff0c;说&#xff1a;导入小白分享的MacOS版本之后&#xff0c;出现无法开机的问题。 遇到这个问题&#xff0c;并不是说明分享版本有问题&#xff0c;因为大部分小伙伴导入之后都没有出现类似的问题&#xff0c;都是导入之后开机&…

【AI大模型】Transformers大模型库(七):单机多卡推理之device_map

目录​​​​​​​ 一、引言 二、单机多卡推理之device_map 2.1 概述 2.2 自动配置&#xff0c;如device_map"auto" 2.3 手动配置&#xff0c;如device_map"cuda:1" 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库&#x…

【机器学习300问】111、解释目标检测的基本概念?

一、目标检测基本概念 &#xff08;1&#xff09;目标检测的定义 目标检测是计算机视觉领域的一项关键任务&#xff0c;它旨在识别图像或视频帧中出现的所有感兴趣目标&#xff08;物体&#xff09;的位置和类别。简而言之&#xff0c;目标检测不仅需要判断图像中存在哪些类型…

用于每个平台的最佳WordPress LMS主题

你已选择在 WordPress 上构建学习管理系统 (LMS)了。恭喜&#xff01; 你甚至可能已经选择了要使用的 LMS 插件&#xff0c;这已经是成功的一半了。 现在是时候弄清楚哪个 WordPress LMS 主题要与你的插件配对。 我将解释 LMS 主题和插件之间的区别&#xff0c;以便你了解要…

隐私计算(1)数据可信流通

目录 1. 数据可信流通体系 2. 信任的基石 3.数据流通中的不可信风险 可信链条的级联失效&#xff0c;以至于崩塌 4.数据内循环与外循环&#xff1a;传统数据安全的信任基础 4.1内循环 4.2外循环 5. 技术信任 6. 密态计算 7.技术信任 7.1可信数字身份 7.2 使用权跨域…

react 中使用 swiper

最近项目中需要用到轮播图&#xff0c;我立马想起了 swiper &#xff0c;那么本文就来带大家体验一下如何在 React 中使用这个插件&#xff0c;使用的是 函数组 hooks 的形式。 需求非常简单&#xff0c;就是一个可以自动播放、点击切换的轮播图&#xff08;跑马灯&#xff0…

人工智能在医学领域的应用及技术实现

欢迎来到 Papicatch的博客 目录 &#x1f349;引言 &#x1f349; 医学影像分析 &#x1f348;技术实现 &#x1f34d;数据准备 &#x1f34d;模型构建 &#x1f34d;模型训练 &#x1f34d;模型评估 &#x1f34d;应用部署 &#x1f348;示例代码 &#x1f349; 基因…

【stm32】——基于I2C协议的OLED显示

目录 一、I2C通讯 二、U8G2 1.U8g2简介 2.CubexMX配置 3.移植U8g2 4.编写移植代码 三、显示汉字 四、字体滚动 五、图片显示 总结 一、I2C通讯 IIC(Inter&#xff0d;Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设…

用爬虫实现---模拟填志愿

先来说实现逻辑&#xff0c;首先我要获取到这个网站上所有的信息&#xff0c;那么我们就可以开始对元素进行检查 我们发现他的每一个学校信息都有一个对应的属性&#xff0c;并且是相同的&#xff0c;那么我们就可以遍历这个网页中的所有属性一样的开始爬取 在来分析&#xff0…

添加L1/L2损失函数,以及AttributeError: ‘NoneType‘ object has no attribute ‘data‘

添加L1/L2损失函数&#xff0c;以及解决报错 1.添加L1 loss2.添加L2 loss3.代码报错&#xff1a;AttributeError: NoneType object has no attribute data 1.添加L1 loss # 方式1&#xff1a;添加到损失函数中 def l1_regularization(model, l1_alpha):l1_loss []for module …

R语言:str_view函数和writeLines函数的区别

str_view和writeLines都是R语言中用于处理和查看字符串的函数&#xff0c;但它们有不同的功能和用途。 str_view str_view 是 stringr 包中的一个函数&#xff0c;用于直观地显示字符串中模式的匹配情况。它会在RStudio Viewer窗格中生成一个HTML小部件&#xff0c;突出显示字…

UPerNet 统一感知解析:场景理解的新视角 Unified Perceptual Parsing for Scene Understanding

论文题目&#xff1a;统一感知解析&#xff1a;场景理解的新视角 Unified Perceptual Parsing for Scene Understanding 论文链接&#xff1a;http://arxiv.org/abs/1807.10221(ECCV 2018) 代码链接&#xff1a;https://github.com/CSAILVision/unifiedparsing 一、摘要 研究…

2024年6月8日 每周新增游戏

中医百科中药: 中医百科中药是一款非常强大的中药知识科普软件&#xff0c;该应用提供500多味中草药的文献资料&#xff0c;强大的搜索功能可根据功效、特点和关键词来快速查找中药&#xff0c;而且每味中药的图片、功效、主治、炮制方法等百科知识&#xff0c;可以很好的帮助你…

易舟云财务软件:数字化时代的财务管家

在数字化浪潮的推动下&#xff0c;财务软件成为了企业提升财务管理效率、实现数字化转型的关键工具。易舟云财务软件&#xff0c;正是这样一款深受企业喜爱的财务管理系统。本文将带你详细了解易舟云财务软件的特点、版本区别以及如何使用它来优化财务工作。 易舟云财务软件的特…

面试题:缓存穿透,缓存击穿,缓存雪崩

1 穿透: 两边都不存在&#xff08;皇帝的新装&#xff09; ——简介&#xff1a;缓存穿透指的是恶意用户或攻击者通过请求不存在于缓存和后端存储中的数据来使得所有请求都落到后端存储上&#xff0c;导致系统瘫痪。 ——详述&#xff1a;(缓存穿透是指查询一个一定不存在的数…

NSSCTF-Web题目7

目录 [SWPUCTF 2022 新生赛]ez_rce 1、题目 2、知识点 3、思路 ​编辑 [MoeCTF 2022]baby_file 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]ez_rce 1、题目 2、知识点 ThinkPHP V5 框架漏洞的利用&#xff0c;命令执行 由于ThinkPHP5在处理控制器传参时&#xff…