【Flask】带你快速入门Flask

Flask 介绍

Flask 是一个轻量级的 Web 应用框架, 使用 Python 编写

基于 Werkzeug WSGI 工具箱和 Jinja2 模板引擎。使用 BSD 授权。

Flask 也被称为 microframework ,因为它使用简单的核心,用 extension 增加其它功能。

Flask 没有默认使用的数据库、窗体验证工具。

然而,Flask 保留了扩增的弹性,可以用 Flask-extension 加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。

当安装 Flask 时,以下组件也会自动安装:

  • Werkzeug: WSGI(web 服务器网关接口)工具,是介于应用和服务器之间标准的接口工具
  • Jinja: web 前端页面中使用的模板语言
  • MarkupSafe: 与 Jinja 配合使用,当表单页面跳转时会进行验证从而避免遭遇不信任的输入带来的攻击。
  • ItsDangerous: 安全地注入数据以确保数据的完整性,通常用于保护 Flask 的 session cookie
  • Click: 一个解析命令行的应用,它支持在 Flask 中自定义管理命令

推荐使用 Python3 的最新版。

Flask 支持 Python3.4 及其以上的版本、Python2.7 和 PyPy 。



虚拟环境

virtualenv介绍

也许 virtualenv 是你在开发中最愿意使用的,如果你在生产机器上有 shell 权限的时候,也会愿意用上 virtualenv。

virtualenv 解决了什么问题?

如果你像我一样喜欢 Python 的话,有很多机会在基于 Flask 的 Web 应用外的其它项目上使用 Python。 然而项目越多,越有可能在不同版本的 Python,或者至少在不同 Python 库的版本上工作。

我们需要面对这样的事实:库破坏向后兼容性的情况相当常见,而且零依赖的正式应用也不大可能存在。如此,当你的项目中的两个或更多出现依赖性冲突,你会怎么做?

virtualenv 的出现解决这一切!virtualenv 能够允许多个不同版本的 Python 安装,每一个服务于各自的项目。它实际上并没有安装独立的 Python 副本,只是提供了一种方式使得环境保持独立。让我们见识下 virtualenv 怎么工作的。

安装virtualenv

创建隔离的虚拟环境的第三方库有很多种,virtualenv用户体验最好也是用户量最大的一个.

在 Windows 、macOS 或 Linux 操作系统中,安装 Python 解释器时会自动安装包管理工具 pip 。所以通常而言,使用如下命令即可很容易地安装 virtualenv 库:

sudo pip3 install virtualenv

我们可以执行如下命令升级 pip 和 virtualenv 到最新版:

sudo pip3 install -U pip virtualenv

执行如下命令可以查看 virtualenv 的版本:

pip3 freeze | grep virtualenv

image-20211115152716741

如上图所示,我们已经安装了 virtualenv 目前最新版本 20.10.0

创建虚拟环境

创建以python3为基础解释器的virtualenv的虚拟环境,并存储到venv文件夹下

virtualenv -p python3 venv

image-20211115152829514

我们先看虚拟环境下目录三层的基础结构

image-20211115153152048

激活虚拟环境

source venv/bin/activate

进入虚拟环境后,命令行提示符前面会有 (venv) 字样,它就是虚拟环境的名字。

在虚拟环境内部,会复刻我们系统的python,参考版本,pip 就是其包管理工具。

image-20211115153335082

安装 Flask

pip install flask

image-20211115153524084

在虚拟环境下就可以看到我们的flask包了,包括之前说说的jinja2

image-20211115153641867

一个案例快速入手

创建应用

一个最小的应用看起来像这样,在当前目录下新建 hello.py 文件

from flask import Flask

app = Flask(__name__)

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

那么这段代码做了什么?

  1. 首先我们导入了类 Flask。这个类的实例化将会是我们的 WSGI 应用

  2. 接着,我们创建一个该类的实例。

    第一个参数是应用模块或包的名称,这样 Flask 才会知道去哪里寻找模板、静态文件等等。

    如果你使用的是单一的模块(就如本例),第一个参数应该使用 __name__

  3. 我们使用装饰器 route() 告诉 Flask 哪个 URL 才能触发我们的函数。

    路由

  4. 定义一个函数,该函数名也是用来给特定函数生成 URLs并且返回我们想要显示在用户浏览器上的信息。

使用 Python 解释器运行这个文件,注意这个文件不能取名为 flask.py ,因为这会与 Flask 本身冲突。

运行这个应用既可以使用 flask 命令也可以使用 Python 的 -m 调用 flask,在运行之前你需要设置 FLASK_APP环境变量来告诉终端需要运行哪个应用.

export FLASK_APP=hello.py
flask run

也可以使用如下命令启动应用:

export FLASK_APP=hello.py
python3 -m flask run

用于测试已经足够了,但可能你并不想用于生产环境。更多配置可以参考开发者选项

我们也可以自定义运行的host和端口

export FLASK_APP=hello.py
flask run -h 0.0.0.0 -p 8080

image-20211115154910547

image-20211115154937237

调试模式

使用 flask 命令行可以非常方便的启动一个本地开发服务器,但是每次修改代码后你都需要手动重启服务器。

通过前面的启动后输出显示可以发现 Environmentproduction,同时调试模式未开启 Debug mode: off.

如果启用了调试支持,在代码修改后服务器能够自动重载,并且如果发生错误,它会提供一个有用的调试器。

为了让所有的开发者特征可用(包括调试模式),在运行服务器之前可以设置 FLASK_ENV 环境变量为 development

export FLASK_ENV=development
export FLASK_DEBUG=1
flask run -h 0.0.0.0 -p 8080

image-20211115155212995

上述命令做了以下几件事:

  1. 使调试器(debugger)可用
  2. 启动了代码改变自动的热加载
  3. 在 flask 应用中开启了 debug 模式
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flask-Security是一个基于 Flask 的安全扩展,可以帮助你快速实现常见的用户认证和授权功能。下面是一个快速入门指南: 1. 安装 Flask-Security 使用 pip 安装 Flask-Security: ``` pip install flask-security ``` 2. 初始化 Flask-Security 在 Flask 应用中初始化 Flask-Security: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_security import Security, SQLAlchemyUserDatastore app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///myapp.db' app.config['SECRET_KEY'] = 'super-secret' db = SQLAlchemy(app) from myapp.models import User, Role user_datastore = SQLAlchemyUserDatastore(db, User, Role) security = Security(app, user_datastore) ``` 在这个例子中,我们使用 SQLAlchemyUserDatastore 将 Flask-Security 和 SQLAlchemy 集成在一起,同时使用 Security 类来初始化 Flask-Security。 3. 创建用户模型 创建一个 User 模型来存储用户信息: ```python from flask_security import UserMixin, RoleMixin class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) active = db.Column(db.Boolean()) roles = db.relationship('Role', secondary='user_roles', backref=db.backref('users', lazy='dynamic')) class Role(db.Model, RoleMixin): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), unique=True) description = db.Column(db.String(255)) ``` 在这里,我们使用 UserMixin 和 RoleMixin 来添加一些常见的用户和角色属性。 4. 创建用户和角色关系模型 创建一个 user_roles 表来存储用户和角色之间的关系: ```python user_roles = db.Table('user_roles', db.Column('user_id', db.Integer(), db.ForeignKey('user.id')), db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))) ``` 5. 配置 Flask-Security 在 Flask 应用中配置 Flask-Security: ```python app.config['SECURITY_PASSWORD_SALT'] = 'super-secret-salt' app.config['SECURITY_REGISTERABLE'] = True app.config['SECURITY_SEND_REGISTER_EMAIL'] = False app.config['SECURITY_USER_IDENTITY_ATTRIBUTES'] = ['email'] ``` 在这个例子中,我们为密码添加了一个盐值,启用了用户注册功能,并且关闭了注册时发送电子邮件的功能。 6. 添加用户认证和授权路由 添加用户认证和授权路由到 Flask 应用中: ```python from flask import render_template, redirect, url_for from flask_security import login_required, current_user @app.route('/') def home(): return render_template('home.html') @app.route('/dashboard') @login_required def dashboard(): return render_template('dashboard.html', user=current_user) ``` 在这里,我们使用 login_required 装饰器来保护 dashboard 路由,只有已登录用户才能访问该路由。 7. 创建模板 创建一个 home.html 模板来显示主页: ```html <h1>Welcome to My App</h1> {% if current_user.is_authenticated() %} <p>Hello {{ current_user.email }}!</p> <p><a href="{{ url_for('security.logout') }}">Logout</a></p> {% else %} <p><a href="{{ url_for('security.login') }}">Login</a></p> {% endif %} ``` 创建一个 dashboard.html 模板来显示仪表盘: ```html <h1>Dashboard</h1> <p>Hello {{ user.email }}!</p> <p><a href="{{ url_for('security.logout') }}">Logout</a></p> ``` 在这里,我们使用 current_user 对象来检查当前用户是否已经登录,并使用 url_for 方法来生成登出链接。 这就是 Flask-Security 的快速入门指南。有了这个基础,你可以探索 Flask-Security 的更多功能,例如密码重置、电子邮件确认、角色管理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我想养只猫 •͓͡•ʔ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值