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