首页 > 其他分享 >Flask基础使用

Flask基础使用

时间:2024-04-20 21:00:12浏览次数:22  
标签:__ name Flask app 蓝图 基础 static 使用

Flask基础使用

目录

简介说明

Flask属于轻量级框架,它只提供最核心的功能,其余的功能需要用自己手写或者用第三方来支持。

中文文档:https://docs.jinkan.org/docs/flask/index.html

pip install flask

开始

from flask import Flask

'''
__name__:表示当前的模块名字
创建Flask对象,Flask会以传入模块的位置当做家目录
'''
app = Flask(__name__)


@app.route('/')  # 代表首页
def hello_world():  # 视图函数
    return 'Hello World!'  # 返回内容


if __name__ == '__main__':
    app.run()  # 运行程序

python helloworld.py
http://127.0.0.1:5000

目录结构

flask-demo/
  ├ run.py           # 应用启动程序
  ├ config.py        # 环境配置
  ├ requirements.txt # 列出应用程序依赖的所有Python包
  ├ tests/           # 测试代码包
  │   ├ __init__.py 
  │   └ test_*.py    # 测试用例
  └ myapp/
      ├ admin/       # 蓝图目录
      ├ static/
      │   ├ css/     # css文件目录
      │   ├ img/     # 图片文件目录
      │   └ js/      # js文件目录
      ├ templates/   # 模板文件目录
      ├ __init__.py    
      ├ forms.py     # 存放所有表单,如果多,将其变为一个包
      ├ models.py    # 存放所有数据模型,如果多,将其变为一个包
      └ views.py     # 存放所有视图函数,如果多,将其变为一个包

参数配置

Flask可以通过传递不同的参数来初始化创建(app = Flask(__name__))程序实例,
app = Flask(__name__)
    def __init__(
        self,
        import_name: str,
        static_url_path: str | None = None,
        static_folder: str | os.PathLike | None = "static",
        static_host: str | None = None,
        host_matching: bool = False,
        subdomain_matching: bool = False,
        template_folder: str | os.PathLike | None = "templates",
        instance_path: str | None = None,
        instance_relative_config: bool = False,
        root_path: str | None = None,
    )
其默认传入当前模块的名称( __name__ 是一个特殊变量,表示当前 Python 模块的名称)作为参数,另外还可以指定参数配置,这些参数是设置Flask本身的属性。

import_name:	用于确定Flask程序所在的包(模块)的名称和位置,使用__name__为默认值,一般不用修改。其可以决定Flask在访问静态文件时查找的路径

static_url_path: 静态文件的URL前缀,默认为 '/static'
static_folder:	 存放静态文件(图片、CSS等)的目录,默认为应用程序根目录下的 'static' 目录
template_folder: 存放模板文件(HTML文件)的目录,默认为应用程序根目录下的 'templates' 目录
app = Flask(__name__, static_url_path='/static_path/', static_folder='new_static')

应用程序配置

1.可以使用配置对象加载
2.可以从配置文件中加载
3.从环境变量中加载
app.config.from_object(配置对象)
app.config.from_pyfile('配置文件名')
app.config.from_envvar('环境变量名')

类对象配置方式

# 导入Flask类
from flask import Flask

# Flask类接收一个参数__name__
app = Flask(__name__)


# 配置对象
class MyConfig(object):
    """配置列表"""
    KEY = 'Y7W7qg5CD9s5UmgKe5UdiY1bhdxbvkaq'


# 从配置对象中加载配置信息
app.config.from_object(MyConfig)


# 装饰器的作用是将路由映射到视图函数index
@app.route("/")
def index():
    key = app.config['KEY']
    print(key)
    return key


# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
    app.run()

配置文件配置方式

置文件 在文件加中新建一个config.cfg配置文件,在配置文件上写上下面语句,表示开启调试模式。

DEBUG = True
from flask import Flask

'''
__name__:表示当前的模块名字
创建Flask对象,Flask会以传入模块的位置当做家目录
'''
app = Flask(__name__)


@app.route('/')  # 代表首页
def hello_world():  # 视图函数
    print("hello_world")
    return 'Hello World!'  # 返回内容


# 配置文件
app.config.from_pyfile('config.cfg')

if __name__ == '__main__':
    app.run()  # 运行程序

使用配置

@app.route("/")
def index():
    debug_mode = app.config['DEBUG']
    secret_key = app.config['SECRET_KEY']
    db_username = app.config['DB_USERNAME']
    db_password = app.config['DB_PASSWORD']
    db_hostname = app.config['DB_HOSTNAME']
    db_port = app.config['DB_PORT']
    
    print(f'Debug mode: {debug_mode}')
    print(f'Secret key: {secret_key}')
    print(f'Database username: {db_username}')
    print(f'Database password: {db_password}')
    print(f'Database hostname: {db_hostname}')
    print(f'Database port: {db_port}')

from flask import Flask, current_app

'''
__name__:表示当前的模块名字
创建Flask对象,Flask会以传入模块的位置当做家目录
'''
app = Flask(__name__)


@app.route('/')  # 代表首页
def hello_world():  # 视图函数
    # 如果能拿到app对象,就可以通过app取自定义的配置参数
    print(app.config.get('TEST'))
    # 如果拿不到,可以通过current_app这个app的代理人拿到
    print(current_app.config.get('TEST'))
    return 'Hello World!'  # 返回内容


# 直接操作
app.config["DEBUG"] = True
app.config["TEST"] = 'test'

if __name__ == '__main__':
    app.run()  # 运行程序

app.run参数

host:	指定应用程序监听的 IP 地址,默认值为 '127.0.0.1',即只能通过本地访问。
port:	指定应用程序监听的端口号,默认值是 5000。
debug:	以调试模式启动应用程序,默认值为False。当设置为True的时候,应用程序会显示详细的错误信息及堆栈跟踪信息

threaded:	表示如果应用程序需要多线程支持,该参数设置为 True 就可以开启多线程。默认值为 False,即单线程运行。
ssl_context:用于启用 SSL 安全通信协议的上下文对象。通常,应该创建该对象,并使用 .pem 格式的文件存储 SSL 的密钥和证书。
options:	用于向底层 Werkzeug 服务器传递其他特定参数的字典对象。

HTTP请求方法

# 利用methods参数可以自己指定一个接口的请求方式

from flask import Flask
from flask import jsonify
app = Flask(__name__)


# 将 Python 对象转换为 JSON 格式
@app.route('/users')
def get_users():
    users = [
        {'name': 'Alice', 'age': 25},
        {'name': 'Bob', 'age': 30},
        {'name': 'Charlie', 'age': 35}
    ]
    return jsonify(users)


@app.route("/test1", methods=["POST"])
def test1():
    return "POST"


@app.route("/test2", methods=["GET", "POST"])
def test2():
    if request.method == 'POST':
        return 'Hello, POST!'
    else:
        return 'Hello, GET!'

路由和蓝图

路由是指Web应用程序的URL与函数之间的映射关系。Flask通过装饰器的方式提供了路由功能,常用的装饰器有@app.route()

from flask import Flask

app = Flask(__name__)

@app.route('/helleworld')
def hello():
    return 'Hello, World!'

支持使用蓝图(Blueprints)来更好地组织代码和路由,方便协作和扩展。蓝图是一种在 Flask 应用中组织视图函数的方式,可以把一个应用分成多个蓝图,每个蓝图负责处理一组相关的功能

蓝图特点:

1.一个应用程序可以具有多个蓝图Blueprint,可以将一个蓝图Blueprint注册到任何一个未使用的URL下,如:/user

2.蓝图可以将应用程序划分为多个小块,每个小块负责处理自己的任务,从而使得代码更加易于维护和扩展。

3.具有独立的 URL 前缀和模板过滤器。通过在创建蓝图时指定 URL 前缀,映射到不同的 URL

4.可以与应用程序上下文分离。蓝图可以被注册到不同的应用程序对象上,并且可以根据需要进行激活和取消激活。

5.可以与 Flask 扩展库集成。许多 Flask 扩展库都支持蓝图,例如 Flask-SQLAlchemy

6.支持钩子函数。通过定义视图函数之外的钩子函数,蓝图可以在请求处理的不同阶段执行一些操作,如 记录日志
from flask import Flask, Blueprint

# 创建一个名为main的蓝图
main = Blueprint('main', __name__)

# 在蓝图中定义路由
@main.route('/')
def index():
    return 'Hello, World! This is the main page.'

# 创建一个名为blog的蓝图
blog = Blueprint('blog', __name__, url_prefix='/blog')

# 在蓝图中定义路由
@blog.route('/')
def blog_index():
    return 'Hello, World! This is the blog page.'

# 将蓝图注册到应用中
app = Flask(__name__)
app.register_blueprint(main)
app.register_blueprint(blog)

if __name__ == '__main__':
    app.run()

指定蓝图的url前缀

app.register_blueprint(user_bp, url_prefix='/user')
app.register_blueprint(goods_bp, url_prefix='/goods')

蓝图内部静态文件

和应用对象不同,蓝图对象创建时不会默认注册静态目录的路由。需要我们在 创建时指定 static_folder 参数。

下面的示例将蓝图所在目录下的static_admin目录设置为静态目录

admin = Blueprint("admin",__name__,static_folder='static_admin')
app.register_blueprint(admin,url_prefix='/admin')

# 现在就可以使用/admin/static_admin/<filename>访问static_admin目录下的静态文件了。

也可通过static_url_path改变访问路径

admin = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/lib')
app.register_blueprint(admin,url_prefix='/admin')

蓝图内部模板目录

蓝图对象默认的模板目录为系统的模版目录,可以在创建蓝图对象时使用 template_folder 关键字参数设置模板目录

admin = Blueprint('admin',__name__,template_folder='my_templates')

参考资料

https://github.com/helloflask/flask-tutorial/blob/master/chapters/hello.md

https://www.cnblogs.com/dream-ze/p/17659500.html 路由系统

标签:__,name,Flask,app,蓝图,基础,static,使用
From: https://www.cnblogs.com/tian777/p/18148157

相关文章

  • 使用 Vagrant 作为 Jenkins Agent 的连接与配置指南
    jenkinsmaster/server设置首先jenkins上创建node远程工作目录建议填写/home/vagrant名称和描述任意填写大概结果如下生成vagrant文件创建目录,名称任意,比如focal,进入目录后,输入如下命令vagrantinitubuntu/focal64结果启动vagrantvagrantssh效果手工安装......
  • java Swagger 使用汇总
    Swagger1.Swagger简介最流行的api框架restfulapi在线自动生成工具:api文档与api定义同步更新直接运行,可以在线测试api接口支持多种语言:java,php2.官网https://swagger.io在项目中使用swagger需要springboxswagger2ui3.SpringBoot集成Swaggerhttps://mvnreposito......
  • Computer Basics - Content 计算机基础 目录 Базовый каталог комп
    Introduction简介Презентация1AboutThisTutorial关于本教程ОкурсеLearnwhat'scoveredinthiscourse. 了解这个课程涵盖什么。Ознакомьтесьссодержаниемкурса2WhatisaComputer?什么是电脑?Чтота......
  • Java面试题:为什么HashMap不建议使用对象作为Key?
    HashMap是一种基于哈希表的动态数据结构,它允许使用任意不可变对象作为键(key)来存储和检索数据。然而,在某些情况下,使用对象作为HashMap的键可能会遇到一些问题。 首先,我们需要明确对象作为HashMap的键需要满足一些条件:不可变性:对象的属性不能被修改,因为如果属性被修改,那......
  • influxdb 使用Influx CLI 命令操作数据
    一、安装并使用influxCLI客户端下载地址:https://docs.influxdata.com/influxdb/v2/tools/influx-cli/二、需要下载influx服务器端和CLI工具influxd:influx数据库的服务端。下载地址:https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.5-windows.zipinflux:连接influ......
  • 使用mysqlclient库连接mysql
    使用mysqlclient库连接mysql安装mysqlclient库yuminstallmariadbmariadb-servermariadb-develmariadb-libsluarockslua-develyumgroupinstall"DevelopmentTools"例程#include<iostream>#include<cstdlib>#include<cstdio>#include&......
  • JavaScript变量的奥秘:从声明到使用,一文掌握!
    在编程的世界里,数据是构建一切的基础。而在JavaScript中,变量就是存储数据的容器。它们就像是我们生活中的盒子,可以装下各种物品,让我们在需要的时候随时取用。今天,就让我们一起揭开变量的神秘面纱,探索它们的概念、使用规则,以及那些令人头疼的错误。一、变量的概念和作用变量,顾名......
  • 01、Java 安全-反序列化基础
    Java反序列化基础1.ObjectOutputStream与ObjectInputStream类1.1.ObjectOutputStream类java.io.ObjectOutputStream类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。序列化操作一个对象要想序列化,必须满足两个条件:该类必须实现java.io.Serializable接口,......
  • 使用归一化盒过滤器对图像进行平滑处理
    使用归一化盒过滤器对图像进行平滑处理前言在OpenCV中提供了一些函数将不同的线性滤波器应用于平滑图像:NormalizedBoxFilter归一化盒过滤器GaussianFilter高斯滤波器MedianFilter中值滤波器BilateralFilter双边过滤器其中归一化盒过滤器是最简单的,我们就从归一......
  • 09-权限介绍和后台模板的使用
    权限介绍#1写过权限类---》控制用户,是否有权限访问我们的接口#2之前咱们直接定死,普通用户,超级用户,管理员这种身份,给不同人设置不同权限#3比如都是互联网用户:抖音acl控制 -游客用户只能查看-登陆用户可以查看和评论-粉丝超过1000用户,开直播#4公司......