![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
flask
专职
人生苦短,我用python
展开
-
flask中的跨域处理-方法二不使用第三方库
【代码】flask中的跨域处理-方法二不使用第三方库。原创 2023-09-17 14:14:45 · 426 阅读 · 0 评论 -
flask+casbin+sqlalchemy实现基于casbin的权限验证
安装pip install flaskpip install sqlalchemypip install flask-authzpip install casbin_sqlalchemy_adapter参考网址:flask-authzcasbin_sqlalchemy_adapter代码示例from functools import wrapsfrom flask import Flask, request, jsonifyfrom sqlalchemy.engine import原创 2022-01-10 11:01:52 · 1148 阅读 · 0 评论 -
flask通过线程池实现异步
1. 概念从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threading和multiprocessing的进一步抽象(这里主要关注线程池),不仅可以帮我们自动调度线程,还可以做到:主线程可以获取某一个线程(或者任务的)的状态,以及返回值。 当一个线程完成的时候,主线程能够立即知道。 让多线程和多进程的编码接口一致。2. 代码示例"""flask通过原创 2021-07-27 13:55:57 · 2550 阅读 · 0 评论 -
flask中信号的使用
1. flask内置的信号request_started = _signals.signal('request-started') # 请求到来前执行request_finished = _signals.signal('request-finished') # 请求结束后执行 before_render_template = _signals.signal('before-render-template') # 模板渲染前执行temp原创 2021-06-05 10:59:06 · 302 阅读 · 0 评论 -
flask中的多app应用
from flask import Flaskfrom werkzeug.middleware.dispatcher import DispatcherMiddlewarefrom werkzeug.serving import run_simpleapp01 = Flask("app01")app02 = Flask("app02")# 多app应用的本质:对url进行处理和分发dm = DispatcherMiddleware(app01, { "/app02": app02}.原创 2021-06-05 09:30:38 · 764 阅读 · 0 评论 -
flask-mail发送带附件的邮件
# -*- coding: utf-8 -*-from flask import Flask, requestfrom flask_mail import Mail, Messageapp = Flask(__name__)app.config['MAIL_SERVER'] = 'smtp.163.com'app.config['MAIL_PORT'] = 25app.config['MAIL_USE_TLS'] = Trueapp.config['MAIL_USERNAME'] = 'x.原创 2021-05-31 18:33:23 · 666 阅读 · 0 评论 -
flask-login结合TimedJSONWebSignatureSerializer实现用户Token认证
1. 重写flask-login中UserMixin类中的get_id方法 def get_id(self): """flask_login 回调,将用户信息序列化为字符串""" from itsdangerous import TimedJSONWebSignatureSerializer jwt = TimedJSONWebSignatureSerializer(secret_key="abc", expires_in=30)原创 2021-05-31 15:50:23 · 614 阅读 · 0 评论 -
flask中自定义扩展-用户认证系统
from flask import request, session, redirectclass Auth(object): def __init__(self, app=None): self.app = app if app: self.init_app(app) def init_app(self, app): app.auth = self self.app = app .原创 2021-05-30 17:08:30 · 153 阅读 · 0 评论 -
多线程中使用原生SQLAlchemy创建session的两种方法
"""多线程中使用原生SQLAlchemy创建session的方法1"""from threading import Threadfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_enginefrom s8day130.models.users import Userengine = create_engine("mysql+pymysql://root:149789@127.0.0.1:3306/.原创 2021-05-30 14:59:42 · 441 阅读 · 0 评论 -
flask中使用离线脚本编写Orm查询语句
"""Web运行时:falsk程序运行起来,用户通过浏览器访问离线脚本:自定义的一个py文件,写Orm查询语句"""from s8day130 import dbfrom s8day130 import create_appfrom s8day130.models.users import Userapp = create_app()with app.app_context(): objs = db.session.query(User).all() print(obj.原创 2021-05-30 12:30:19 · 200 阅读 · 0 评论 -
SQLAlchemy框架详解
概述:SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果1. 快速使用(1)创建模型类生成数据表from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import create_engine, Column, Integer, StringBas.原创 2021-05-23 17:12:57 · 986 阅读 · 0 评论 -
Flask中实现JWT认证-token-refresh_token
核心思想解决单一token的安全问题,设置2个token一个对接业务,有需求就带着业务token去认证然后操作相关功能,有效期较短,2小时;另一个token专门用来刷新业务token,简称刷新token,具有较长的过期时间,14天;当业务token过期时,必须携带刷新token通过put接口来实现token的刷新,新的业务token还是存活2小时,这期间刷新token一直不变,直到14天后刷新token过期,重新开始新一轮的循环;在调用生成token的接口时,利用一个布尔型标识need_refresh原创 2021-05-17 17:38:02 · 1858 阅读 · 2 评论 -
flask中flask-session使用redis保存session信息
1. 主文件from flask import Flask, sessionfrom flask_session import RedisSessionInterfacefrom redis import Redisfrom flask_session import Sessionfrom datetime import timedeltafrom config import configapp = Flask(__name__)app.secret_key = "dfjaslkj.原创 2021-05-16 14:05:42 · 1068 阅读 · 0 评论 -
flask上下文处理源码流程
1. 概述2. 第一阶段(1)当请求进来的时候会先将request和session封装成RequestContext对象:ctx,(2)然后通过localstack将ctx放入到local对象中(3)然后执行open_session函数,从cookie中拿到session的值并赋值到ctx中的session里面去(4)最终执行save_session函数,将session序列化写入到cookie当中去,然后调用pop方法将ctx对象移除掉 def wsgi_app(se.原创 2021-05-15 15:41:12 · 6986 阅读 · 1 评论 -
flask-sqlalchemy如何实现读写分离
1. 概述:sqlalchemy 并没有像 django-orm 一样内置完善的读写分离方案, 但是提供了可以自定义的接口:官方文档, 我们可以借此对 flask-sqlalchemy 进行二次开发, 实现读写分离2.基本实现思路:实现自定义的 session类, 继承 SignallingSession类重写 get_bind方法, 根据读写需求选择对应的数据库地址实现自定义的 SQLAlchemy类, 继承 SQLAlchemy类重写 create_session方法, 在内部使用自定..原创 2021-05-14 10:53:55 · 987 阅读 · 0 评论 -
flask中如何自定义一个FlaskHashids类
1. Hashids是一个非常小巧的跨语言的开源库,它用来把数字编码成一个随机字符串。它不同于md5这种算法这种单向映射,Hashids除了编码还会解码。拿论坛来说,一般帖子在数据库里的id都是顺序递增的,但是你可能不想在url上直接把id暴露出来,以免爬虫直接遍历id爬取你的内容,给你带来损失。那现在你就可以使用Hashids把这个id搞乱,让它失去顺序性,无法直接遍历,这样就可以直接提高了爬虫的门槛。2. 安装pipinstallhashids3. 自定义实现from h...原创 2021-05-10 14:27:08 · 118 阅读 · 0 评论 -
flask中中间件的用法
1. 实际开发中中间件用的场景不多,更多的是flask中的生命周期函数from flask import Flaskfrom settings import configapp = Flask(__name__)app.config.from_object(config["development"])@app.route("/x1")def x1(): return "x1"class Middleware(object): def __init__(self,原创 2021-05-09 10:53:15 · 647 阅读 · 0 评论 -
flask中模板变量和自定义全局模板变量函数
1. views.py代码from flask import Flask, render_template, Markupapp = Flask(import_name=__name__)app.config.from_object("settings.DevelopmentConfig")@app.template_global()def g_template(a, b): """ 全局模板变量函数 :param a: :param b: :re原创 2021-05-09 09:44:20 · 1048 阅读 · 0 评论 -
flask项目中如何书写manage.py文件并使用flask_script包添加自定义命令
from flask_migrate import Migrate, MigrateCommandfrom flask_script import Manager, Commandfrom xxx import create_app, __version__from xxx import dbdef version(): print("version:{}".format(__version__))app = create_app()manager = Manager(app).原创 2021-05-08 14:17:58 · 847 阅读 · 0 评论 -
flask-sqlalchemy的常用配置项
Flask-SQLAlchemy 扩展能够识别的配置键的清单:SQLAlchemy 操作数据库的ORM组件SQLALCHEMY_DATABASE_URI 用于连接数据的数据库。例如:sqlite:tmp/test.dbmysql://username:password@server/dbSQLALCHEMY_BINDS 一个映射绑定 (bind) 键到 SQLAlchemy 连接 URIs 的字典。 更多的信息请参阅绑定多个数据库。SQLALCHEMY_ECHO 如果设...原创 2021-05-07 16:37:05 · 1113 阅读 · 0 评论 -
flask中的session源码流程图
原创 2021-05-05 18:23:01 · 147 阅读 · 0 评论 -
flask中请求与响应的相关信息
from flask import Flask, request, make_responseapp = Flask(import_name=__name__)app.config.from_object("settings.DevelopmentConfig")@app.route("/index", methods=["GET", "POST"])def index(): # 请求相关信息 # request.method # request.args #.原创 2021-05-05 15:14:35 · 167 阅读 · 0 评论 -
flask中路由系统及如何自定义正则路由系统
1. 常用的路由系统@app.route('/user/<username>') @app.route('/post/<int:post_id>') @app.route('/post/<float:post_id>') @app.route('/post/<path:path>') @app.route('/login/<uuid:uuid>')2. 自定义正则匹配路由系统from flask import Flaskfr原创 2021-05-05 11:44:34 · 448 阅读 · 0 评论 -
flask中配置文件的书写方式与导入方式
1. 配置文件的编写项目根目录下创建一个settings.py配置文件,代码如下class BaseConfig(object): DEBUG = True SECRET_KEY = "fsdajklfjdsalk1654356"class ProductionConfig(BaseConfig): DEBUG = Falseclass DevelopmentConfig(BaseConfig): passclass TestingConfig(B原创 2021-05-05 10:18:48 · 320 阅读 · 0 评论 -
flask中werkzeug基本使用
from werkzeug.wrappers import Request, Responsefrom werkzeug.serving import run_simple@Request.applicationdef hello(request): return Response("hello world!")if __name__ == '__main__': # 请求一旦到来,执行第三个参数:hello() run_simple("localhost", 40.原创 2021-05-04 17:55:19 · 578 阅读 · 0 评论 -
flask的生命周期函数和自定义一个异常类
1. 异常类:class MyException(Exception): """自定义异常,需结合中间件使用""" def __init__(self, error: str, status_code: int = 400, details: Optional[Union[Dict, List, Tuple, str]] = None, **kwa.原创 2021-04-22 14:30:31 · 784 阅读 · 0 评论 -
flask中如何定义一个视图基类统一处理必须登录和非必须登录接口
我们写的所有视图类都继承此类即可,默认登录才能访问,设置类属性__required_login__ = False即可实现该视图类的所有方法不登录访问如果想对自己写的视图类中的两个方法一个认证,一个不认证,那么__required_login__ = False, 在往需要认证的方法上面加上@login_required即可from flask import viewsfrom flask_login import login_requiredclass BaseView(views.M.原创 2021-04-13 14:40:52 · 135 阅读 · 0 评论 -
flask-login和pydantic实现注册登录-数据校验-登录才能访问等功能
1. models.py代码from flask_login import UserMixinfrom werkzeug.security import generate_password_hash, check_password_hashclass User(db.Model, UserMixin): __tablename__ = "users" id = db.Column(db.Integer, primary_key=True, autoincrement=True)原创 2021-04-12 16:48:24 · 877 阅读 · 0 评论 -
flask-SQLAlchemy-pydantic实现数据校验的增删改查操作
from flask import Flask, jsonifyfrom flask_sqlalchemy import SQLAlchemyfrom demo import Role, to_jsonapp = Flask(__name__)app.debug = True# 通过 app 配置数据库信息app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:149789@127.0.0.1:3306/sqlalche.原创 2021-04-11 11:18:37 · 2078 阅读 · 1 评论 -
Flask-SQLAlchemy常用方法
1. 常用查询方法(1)all()方法返回所有记录Role.query.all()(2)first()返回第一条记录,没有返回None first_or_404()返回第一个条记录,没有返回404错误响应Role.query.first()Role.query.first_or_404()(3)get()返回指定主键值(id字段)的记录,没有返回None get_or_404返回指定主键值(id字段)的记录,没有返回404错误响应Role....原创 2021-04-11 09:58:15 · 580 阅读 · 0 评论 -
SQLAlchemy如何创建模型类,生成数据表
1. 安装相关包 Flask-SQLAlchemy Flask-Script Flask-Migrate2. 代码from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom flask_migrate import Migrate, MigrateCommand # 导入from flask_script import Manager # 导入app = Flask(__name_...原创 2021-04-10 18:06:42 · 894 阅读 · 0 评论 -
flask中自带session实现登录、校验登录、退出登录小案例
1. 概念:除了请求对象之外还有一种称为session的对象,允许你在不同请求 之间储存信息。这个对象相当于用密钥签名加密的 cookie ,即用户可以查看你的 cookie ,但是如果没有密钥就无法修改它。使用会话之前你必须设置一个密钥。2. 代码:from flask import Flask, jsonify, request, sessionfrom os import urandomapp = Flask(__name__)# app.config["SECRET_K..原创 2021-04-10 16:01:27 · 2620 阅读 · 0 评论