Flask的项目目录结构没有固定的形式,它往往依赖于你的项目的需求和大小,但以下是一个具有良好扩展性的Flask项目的推荐目录结构:
bash
Copy code
/your-flask-project
/app
/templates
home.html
layout.html
...
/static
/css
style.css
/js
main.js
/images
logo.png
/blueprints
/users
__init__.py
views.py
forms.py
/blog
__init__.py
views.py
forms.py
__init__.py
views.py
models.py
config.py
run.py
requirements.txt
让我们来解释一下这个结构:
app: Flask应用的主目录。
templates: 存储所有Jinja2模板文件,如 HTML 文件。
static: 存储所有静态文件,如 CSS,JavaScript和图片。
blueprints: 存储 Flask 的蓝图(BluePrints),蓝图用于在Flask客户端中实现模块化。
init.py: 初始化Flask应用,并做一些配置。
views.py: 存储路由和视图相关的代码.
models.py: 存储数据库模型。
config.py: 全局配置文件,存储配置变量,如数据库URL、密钥等。
run.py: 用于启动 Flask 应用的脚本,一般在里面创建一个 Flask app 实例。
requirements.txt: 存储 Python 包依赖。
需要注意的是,以上仅是一个参考的项目结构,具体的目录结构应根据项目的需求和规模进行设计。在小型项目中,可能只需一个单文件应用;在大型项目中,你可能需要更多的分层次和更复杂的结构,比如将应用分解为多个包,每个包有自己的模型、视图和模板。
## 基于Flask REST ,兼容BASIC 和JWT的项目的目录和基本代码
一个基于 Flask RESTful API 的兼容 BASIC 和 JWT 认证的项目目录结构可能如下:
bash
Copy code
/my_api
/my_api
/templates
/static
/models
__init__.py
users.py
/views
__init__.py
routes.py
/auth
__init__.py
basic_auth.py
jwt_auth.py
__init__.py
run.py
config.py
requirements.txt
基本的 Flask JWT 验证的实现可能如下:
首先,使用flask_jwt_extended库来使用 JWT 认证。
python
Copy code
# (在 /my_api/my_api/auth/jwt_auth.py)
from flask_jwt_extended import JWTManager
def initialize_jwt(app):
app.config['JWT_SECRET_KEY'] = 'your-secret-key'
jwt = JWTManager(app)
return jwt
上述代码会初始化 JWT 并把它绑定到提供的 Flask app 上。
你可能还需要定义用于验证用户名和密码的回调函数,并在验证通过后创建一个新的 JWT。
python
Copy code
from flask_jwt_extended import create_access_token
def login():
username = request.json.get('username', None)
password = request.json.get('password', None)
# 验证用户名与密码
if username != 'test' or password != 'test':
return jsonify({"msg": "Bad username or password"}), 401
# 创建一个新的 access token
access_token = create_access_token(identity=username)
return jsonify(access_token=access_token)
对于 Basic 认证,你可以使用 flask_httpauth 库。创建一个 HTTPBasicAuth 的实例,并定义一个验证回调函数。
python
Copy code
# (在 /my_api/my_api/auth/basic_auth.py)
from flask_httpauth import HTTPBasicAuth
from werkzeug.security import check_password_hash
auth = HTTPBasicAuth()
@auth.verify_password
def verify_password(username, password):
# 验证用户名和密码
# 这是一个简单的例子,实际场景中需要在数据库中查找用户信息
if username == 'test' and check_password_hash('hashed-password', password):
return username
# 未经验证的访问将会返回以下消息
@auth.error_handler
def unauthorized():
return make_response(jsonify({'error': 'Unauthorized access'}), 403)
希望这个例子能给你一些关于如何在 Flask API 中整合 Basic 和 JWT 认证的想法。请注意,根据你的具体需求,这些代码可能需要进一步的修改和优化。另外,这个例子中的所有密码及秘钥都应该通过环境变量或一些安全的方式来获取,不应该直接写在代码里面。
- 前言
- 1.入门篇
- Python介绍
- 安装与使用
- Python开发利器之VS Code
- 模块安装
- 命令行
- 一次Python无法安装模块的问题探索与解决之旅
- 命令运行
- Conda
- 下载地址
- 2.基础篇
- 基础语法
- 输入与输出
- with as的用法
- 注释
- Python命令行参数
- 编码
- 变量类型
- 列表遍历
- 运算符
- 表达式语句
- 条件
- 循环
- 日期和时间
- 函数
- 高级语法
- @符号-装饰器
- 模块和包
- name
- init.py
- 错误和异常
- 面向对象
- 3.专题篇
- 常用功能
- Python 字符串连接
- python web
- Python CGI编程
- Python OAuth2
- 认证 Flask-HTTPAuth
- 常用命令
- 内置函数
- dir()
- print(f)
- 标准模块
- sys
- pickle-数据序列化
- os
- IO(输入输出)
- 键盘输入
- 文件读写
- 测试
- Python测试框架之pytest快速入门
- pytest-bdd快速示例和问题解决
- 基于pytest-bdd的项目目录结构和命名规范
- python BDD 的相关概念
- Behave介绍和快速示例
- Python BDD之Behave测试报告
- Python BDD 框架比较之 pytest-bdd vs behave
- pytest进阶
- Flask + pytest测试
- 参考网址
- pytest-bdd进阶
- hehave进阶
- 测试路径
- python + selunium
- HTML 根据多层CSS 查找元素
- 等待执行
- 使用text 查找 span
- pytest如何在控制台输出
- 4.问题篇
- pip pip3 及区别
- TypeError: can only concatenate str (not "NoneType") to str
- 5.实战篇
- matplotlib-绘图包
- 导入类
- 命名规范
- 模块查找
- 6.进阶篇
- Flask
- Flask介绍
- Flask扩展模块
- Flask-Login
- 问题
- Jinja2
- Flask-RESTful
- Flask-JWT-Extended
- WSGI
- Flask-SQLAlchemy
- 部署
- Flask VS Django
- Flask Web
- Flask + Vue
- Flask实战
- Flask 标准目录结构
- Blueprints
- 参考
- FastAPI 测试
- https 证书 Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate