欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Flask

Flask

2024/10/25 12:23:32 来源:https://blog.csdn.net/weixin_46432131/article/details/141222775  浏览:    关键词:Flask

简介

flask是一个轻量级框架基于Python的web框架,封装能力不如Django的完善,性能不及Tornado,唯一性价比高的就是拥有大量的第三方开源组件比(http://flask.pocoo.org/extensions/)其wsgi采用werkzeug,模板引起则采用jinja2,flask也被称为microframework

安装 

pip install Flask - i 国内镜像源地址 i 代表image镜像意思

  • 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
  • 中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple
  • 阿里云:https://mirrors.aliyun.com/pypi/simple

 认识flask

from flask import Flaskapp = Flask(__name__)  # 创建一个实例#该代码只是创建个Flask实例,把文件的根地址传递了过去,旨在加载后面会说的静态资源和模板
#该实例有很多属性和方法,用于配置和运行web应用,可以设置路由,配置环境变量,注册蓝图@app.route('/')
def hello_world():return 'Hello World!'# 这时,Flask会启动一个内置的开发服务器,并开始监听来自客户端的HTTP请求。
if __name__ == '__main__':app.run()

运行代码的命令为python 文件名

  • @app.route('/')装饰器将根URL(/)映射到index函数。
  • 当用户访问应用的根URL时,Flask会调用index函数,并将该函数的返回值发送给客户端。

不明白装饰器的可以专门学习一下装饰器很重要

这里面想讲解一下wsgi如何起作用的

  1. 路由注册:当您使用 @app.route("/") 装饰器时,您实际上是在告诉 Flask 应用,当接收到根路径(“/”)的 HTTP 请求时,应该调用哪个视图函数。

  2. WSGI 服务器:Flask 自带了一个简单的 WSGI 服务器,用于开发环境。当您调用 app.run() 时,Flask 会启动这个内置服务器。

  3. 请求处理:当客户端向 Flask 应用发送请求时,这个请求首先会被 WSGI 服务器接收。

  4. 请求分发:WSGI 服务器会将请求传递给 Flask 应用对象。Flask 应用对象会根据请求的 URL 来查找匹配的路由,并调用相应的视图函数。

  5. 视图函数响应:视图函数执行业务逻辑,并返回响应数据。

  6. 响应返回:Flask 应用对象将视图函数返回的数据封装成 HTTP 响应,然后通过 WSGI 服务器发送回客户端。

  • 协议适配:WSGI 是一种协议,它定义了 Web 服务器和 Web 应用程序之间通信的标准接口。通过遵循这个接口,Flask 应用可以与多种 WSGI 服务器兼容,例如 Gunicorn、uWSGI 等。

  • 请求处理:WSGI 服务器负责处理 HTTP 请求,并将它们转换为 Flask 应用可以理解的格式。然后,它会处理 Flask 应用的响应,并将其转换为 HTTP 响应发送给客户端。

  • 环境设置:WSGI 服务器为 Flask 应用提供了一个环境字典,其中包含了请求的所有信息,如请求方法、路径、查询字符串、表头等。

Flask的配置 

app = Flask(__name__)

上面的代码中,python内置变量__name__的值是字符串"__main__" 。Flask类将这个参数作为程序名称。当然这个是可以自定义的,比如app = Flask("my-app")

2. 静态资源,模板,参考文档

app = Flask("my-app", static_folder="path1", template_folder="path2")
 mkdir HelloWorldmkdir HelloWorld/staticmkdir HelloWorld/templatestouch HelloWorld/server.py

路由系统

# 1.动态参数(url传参)
# @app.routr('/user/<name>')from flask import Flaskapp=Flask(__name__)@app.route('/<name>')  #设置url传参数 http://127.0.0.1:5000/zhanggen
def first_flask(name):  #视图必须有对应接收参数print(name)return 'Hello World'  #responseif __name__ == '__main__':app.run()
# 接收字符串类型参数# 2.@app.route('/post/<int:age>')#接收整型数字参数
app=Flask(__name__)
@app.route('/<int:age>/')  #设置url传参数 http://127.0.0.1:5000/18/
def first_flask(age):  #视图必须有对应接收参数print(age)return 'Hello World'  #responseif __name__ == '__main__':app.run()# 接收整型数字参数# 3. @app.route('/post/<float:salary/>')#接收浮点型型数字参数
app=Flask(__name__)
@app.route('/<float:salary>/')  #设置url传参数http://127.0.0.1:5000/2345555.8889/
def first_flask(salary):  #视图必须有对应接收参数print(salary)return 'Hello World'  #responseif __name__ == '__main__':app.run()# 接收浮点型数字参数# 4.@app.route('/post/<path:path>')# 接收URL链接类型参数
app=Flask(__name__)
@app.route('/<path:url>/')  #设置url传参数:http://127.0.0.1:5000/http://www.baiu.com/
def first_flask(url):  #视图必须有对应接收参数print(url)return 'Hello World'  #responseif __name__ == '__main__':app.run()# 接收URL链接类型参数

指定允许的请求方法

# @app.route("/login",methods=['Get','Post'])# 指定允许的请求方法
app=Flask(__name__)
@app.route('/<path:url>/',methods=['get']) #只允许get请求
def first_flask(url):print(url)return 'Hello World'  #responseif __name__ == '__main__':app.run()#指定允许的请求方法

通过别名反向生成url

# 反向生成urlfrom flask import Flask, url_forapp = Flask(__name__)@app.route('/path:url', endpoint="name1")
def first_flask(url):print(url_for('name1',url=url)) #如果设置了url参数,url_for(别名,加参数)return 'Hello World'if __name__ == '__main__':app.run()

通过app.add_url_rule()调用路由 

#方式2通过app.add_url_rule()方法的方式调用路由
app=Flask(__name__)def first_flask():return 'Hello World' app.add_url_rule(rule='/index/',endpoint='name1',view_func=first_flask,methods=['GET'])
#app.add_url_rule(rule=访问的url,endpoint=路由别名,view_func=视图名称,methods=[允许访问的方法])
if __name__ == '__main__':app.run()# app.add_url_rule()方法调用路由

 扩展路由功能:正则匹配url

from flask import Flask, views, url_forfrom werkzeug.routing import BaseConverterapp = Flask(import_name=__name__)class RegexConverter(BaseConverter):"""自定义URL匹配正则表达式"""def __init__(self, map, regex):super(RegexConverter, self).__init__(map)self.regex = regexdef to_python(self, value):"""路由匹配时,匹配成功后传递给视图函数中参数的值:param value: :return: """return int(value)def to_url(self, value):"""使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数:param value: :return: """val = super(RegexConverter, self).to_url(value)return val# 添加到flask中app.url_map.converters['regex'] = RegexConverter@app.route('/index/<regex("\d+"):nid>')def index(nid):print(url_for('index', nid='888'))return 'Index'if __name__ == '__main__':app.run()自定义正则表达式匹配路由

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com