flask基础知识1

devtools/2024/11/14 6:11:49/

目录

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

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

 3.配置参数:

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

1以对象的方式配置

python">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'形式的配置信息

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

3.从环境变量中加载:

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

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

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

python">export PROJECT_SETTING='~/setting.py'
python">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应用的路由映射信息,可以通过整个读取路由信息

python">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直接在定义路由时编写正则表达式的方式,而是采用转换器语法:

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

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

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

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

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

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

自定义转换器:

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

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

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

python">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.使用自定义转换器

python">@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 的后面作为查询参数。

python">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: 表单提交,并且采用字节流的方式传递数据

python">@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 的参数,可以按如下方式使用:

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

7.处理响应:

1.重定向:

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

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

2.返回json数据:

python">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

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

flask代码:

python">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.ppmy.cn/devtools/47171.html

相关文章

vuInhub靶场实战系列--prime:1

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 nmap主机扫描2.1.3 arp-scan主机扫描 2.2 端口扫描…

TinyHttpd源码精读(三)

在上一章中我们一起看了如何实现静态的网页&#xff0c;在这里我们一起看Tinyhttpd最后的一部分&#xff0c;动态网页的实现&#xff1a;在这里首先声明下因为cgi脚本的支持问题&#xff0c;所以我会新建一个简单的cgi脚本然后将路径导向到这个脚本&#xff1a; 0.perl的配置&…

LeetCode刷题之HOT100之合并区间

雨下了一整天&#xff0c;中午早早就回去吃饭拿快递了&#xff0c;今天拿了很多快递。我的书回来啦哈哈&#xff0c;还有好多零食&#xff0c;爽歪歪啊&#xff0c;放在下面了&#xff0c;然后准备开始做题啦&#xff01; 图一&#xff1a;左一是xh送我的&#xff0c;非常精彩…

流批一体计算引擎-10-[Flink]中的常用算子和DataStream转换

pyflink 处理 kafka数据 1 DataStream API 示例代码 从非空集合中读取数据&#xff0c;并将结果写入本地文件系统。 from pyflink.common.serialization import Encoder from pyflink.common.typeinfo import Types from pyflink.datastream import StreamExecutionEnviron…

QT 信号和槽 多对一关联示例,多个信号,一个槽函数响应,多个信号源如何绑定一个槽函数

三个顾客 Anderson、Bruce、Castiel 都要订饭&#xff0c;分别对应三个按钮&#xff0c;点击一个按钮&#xff0c;就会弹出给该顾客送饭的消息。注意这个例子只使用一个槽函数&#xff0c;而三个顾客名称是不一样的&#xff0c;弹窗时显示的消息不一样&#xff0c;这需要一些 技…

golang协程(go)与信道(chan)使用示例

函数定义 // 普通函数 func f(from string) {//输出三次传入的字符串for i : 0; i < 50; i {fmt.Println(from, ":", i)} } 协程调用 //使用go协程调用函数go f("go routines > Hello World") 局部函数go协程使用 //使用协和调用临时函数go fun…

内存池(Memory Pool)

内存池&#xff08;Memory Pool&#xff09; 内存池&#xff08;Memory Pool&#xff09;是一种内存管理技术&#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…