Flask-Praetorian 项目教程
1. 项目的目录结构及介绍
Flask-Praetorian 是一个用于 Flask 应用的安全扩展,提供了强大的 API 安全功能。以下是项目的目录结构及其介绍:
flask-praetorian/
├── docs/ # 文档目录
│ ├── _build/ # 构建的文档文件
│ ├── _static/ # 静态文件
│ ├── _templates/ # 模板文件
│ ├── conf.py # Sphinx 配置文件
│ ├── index.rst # 文档主页
│ └── ... # 其他文档文件
├── examples/ # 示例代码目录
│ ├── minimal.py # 最小示例
│ └── ... # 其他示例
├── flask_praetorian/ # 核心代码目录
│ ├── __init__.py # 初始化文件
│ ├── decorators.py # 装饰器
│ ├── exceptions.py # 异常处理
│ ├── tokens.py # 令牌处理
│ └── ... # 其他核心文件
├── tests/ # 测试目录
│ ├── __init__.py # 初始化文件
│ ├── conftest.py # 测试配置
│ └── ... # 其他测试文件
├── .gitignore # Git 忽略文件
├── LICENSE # 许可证
├── README.md # 项目说明
├── setup.py # 安装脚本
└── ... # 其他项目文件
2. 项目的启动文件介绍
在 Flask-Praetorian 项目中,没有特定的“启动文件”,因为它是作为一个 Flask 扩展使用的。通常,你会在你的 Flask 应用中初始化并使用 Flask-Praetorian。以下是一个简单的示例:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_praetorian import Praetorian
from flask_cors import CORS
app = Flask(__name__)
app.config['SECRET_KEY'] = 'top-secret'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
db = SQLAlchemy(app)
guard = Praetorian(app, db)
cors = CORS(app)
# 定义用户模型
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String, unique=True)
password = db.Column(db.String)
roles = db.Column(db.String)
is_active = db.Column(db.Boolean, default=True, server_default='true')
@property
def identity(self):
return self.id
@property
def rolenames(self):
try:
return self.roles.split(',')
except Exception:
return []
@property
def password(self):
return self.password
@classmethod
def lookup(cls, username):
return cls.query.filter_by(username=username).one_or_none()
@classmethod
def identify(cls, id):
return cls.query.get(id)
db.create_all()
# 添加用户
db.session.add(User(
username='TheDusktreader',
password=guard.hash_password('password'),
roles='admin'
))
db.session.commit()
@app.route('/login', methods=['POST'])
def login():
req = app.current_request
username = req.json_body['username']
password = req.json_body['password']
user = guard.authenticate(username, password)
ret = {'access_token': guard.encode_jwt_token(user)}
return ret, 200
if __name__ == '__main__':
app.run()
3. 项目的配置文件介绍
Flask-Praetorian 的配置通常在 Flask 应用的配置文件中进行。以下是一些常用的配置项:
app.config['SECRET_KEY'] = 'top-secret' # 密钥
app.config['JWT_ACCESS_LIFESPAN'] =