Flask 框架介绍
介绍
安装
pip install flask
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
app.logger.info("Hello World!")
return 'Hello World!'
# if __name__ == '__main__':
# app.run()
# app.run(host="unix:///tmp/app.sock")
# FLASK_APP=app.py flask run --host=unix:///tmp/app.sock
$ gunicorn main:app
[8267] [INFO] Starting gunicorn 19.10.0
[8267] [INFO] Listening at: http://127.0.0.1:8000 (8267)
[8267] [INFO] Using worker: sync
[8272] [INFO] Booting worker with pid: 8272
# gunicorn -w 4 package:app --bind unix:/tmp/app.sock
$ curl http://127.0.0.1:8000
Hello World!
其他
dmeo
flask + sqlite3 数据库操作示例
from flask import Flask, request, jsonify
import sqlite3
import random
import string
from datetime import datetime
app = Flask(__name__)
DATABASE = 'data.db'
# 初始化数据库
def init_db():
conn = sqlite3.connect(DATABASE)
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS entries
(id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT,
created_at DATETIME)''')
conn.commit()
conn.close()
# 生成随机字符串
def generate_random_string(length=12):
letters = string.ascii_letters + string.digits
return ''.join(random.choice(letters) for _ in range(length))
# 写接口
@app.route('/write', methods=['POST'])
def write_entry():
# 生成随机内容
random_content = generate_random_string()
# 获取当前时间
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# 写入数据库
try:
conn = sqlite3.connect(DATABASE)
c = conn.cursor()
c.execute("INSERT INTO entries (content, created_at) VALUES (?, ?)",
(random_content, now))
conn.commit()
conn.close()
return jsonify({
"status": "success",
"message": "Data written successfully",
"data": {
"content": random_content,
"created_at": now
}
}), 201
except Exception as e:
return jsonify({"status": "error", "message": str(e)}), 500
# 读接口
@app.route('/read', methods=['GET'])
def read_entries():
try:
conn = sqlite3.connect(DATABASE)
c = conn.cursor()
c.execute("SELECT * FROM entries ORDER BY id DESC")
entries = c.fetchall()
conn.close()
# 格式化结果
results = []
for entry in entries:
results.append({
"id": entry[0],
"content": entry[1],
"created_at": entry[2]
})
return jsonify({
"status": "success",
"count": len(results),
"data": results
}), 200
except Exception as e:
return jsonify({"status": "error", "message": str(e)}), 500
if __name__ == '__main__':
init_db()
app.run(debug=True)
F&Q
RuntimeError: Working outside of application context
// app = Flask(__name__)
with app.app_context():
...
使用 uwsgi 发布 request.files 为空
request.files
返回值为 ImmutableMultiDict([])
解决方式:
- 通过 nginx 代理(测试可用)
- form 表单配置
enctype="multipart/form-data"
- 配置
MAX_CONTENT_LENGTH
app.config['MAX_CONTENT_LENGTH'] = 10 * 1024 * 1024 # 10MB
[uwsgi]
...
http = :8000
http-timeout = 120
http-keepalive = true
http-auto-chunked = true
http-write-timeout = 120
http-sendfile = true
http-chunked-request = true
post-buffering = 8192