From 7f44093c91ae96fc7e4b98041f9d9a57ff1d13e5 Mon Sep 17 00:00:00 2001 From: essesoul Date: Tue, 3 Jan 2023 19:30:23 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E7=BC=BA=E5=B0=91=E7=9A=84python=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 自动安装缺少的python包 --- main.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/main.py b/main.py index 4ca8991..ef3d252 100644 --- a/main.py +++ b/main.py @@ -2,14 +2,22 @@ import datetime import uuid import asyncio from pathlib import Path - -from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks -from starlette.requests import Request -from starlette.responses import HTMLResponse, FileResponse -from starlette.staticfiles import StaticFiles - -from sqlalchemy import select, update, func -from sqlalchemy.ext.asyncio.session import AsyncSession +import os +try: + from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks + from starlette.requests import Request + from starlette.responses import HTMLResponse, FileResponse + from starlette.staticfiles import StaticFiles + from sqlalchemy import select, update, func + from sqlalchemy.ext.asyncio.session import AsyncSession +except ImportError: + os.system("pip install -r requirements.txt") + from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks + from starlette.requests import Request + from starlette.responses import HTMLResponse, FileResponse + from starlette.staticfiles import StaticFiles + from sqlalchemy import select, update, func + from sqlalchemy.ext.asyncio.session import AsyncSession import settings from utils import delete_expire_files, storage, get_code, error_ip_limit, upload_ip_limit From ea52327e4929702293a209b657c90a166ed24f09 Mon Sep 17 00:00:00 2001 From: essesoul Date: Tue, 3 Jan 2023 21:10:38 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=85=BC=E5=AE=B9UTF-8=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 自动转换UTF-8编码的.env文件为GBK编码 允许用户在根目录配置.env文件 (优先级:.env大于data/.env) --- main.py | 2 ++ requirements.txt | 3 ++- settings.py | 15 ++++++++++++++- utf8togbk.py | 21 +++++++++++++++++++++ 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 utf8togbk.py diff --git a/main.py b/main.py index ef3d252..e11a96d 100644 --- a/main.py +++ b/main.py @@ -4,6 +4,7 @@ import asyncio from pathlib import Path import os try: + import chardet from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks from starlette.requests import Request from starlette.responses import HTMLResponse, FileResponse @@ -12,6 +13,7 @@ try: from sqlalchemy.ext.asyncio.session import AsyncSession except ImportError: os.system("pip install -r requirements.txt") + import chardet from fastapi import FastAPI, Depends, UploadFile, Form, File, HTTPException, BackgroundTasks from starlette.requests import Request from starlette.responses import HTMLResponse, FileResponse diff --git a/requirements.txt b/requirements.txt index 1f117ba..f653d59 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,5 @@ SQLAlchemy==1.4.44 python-multipart==0.0.5 uvicorn==0.15.0 greenlet==2.0.1 -starlette~=0.22.0 \ No newline at end of file +starlette~=0.22.0 +chardet == 5.1.0 \ No newline at end of file diff --git a/settings.py b/settings.py index d6f0a8b..bd6fcf4 100644 --- a/settings.py +++ b/settings.py @@ -1,7 +1,20 @@ from starlette.config import Config - +from utf8togbk import convert_encoding +import os +import shutil # 配置文件.env # 请将.env移动至data目录,方便docker部署 + +# 判断根目录下是否存在.env文件 +if os.path.exists('.env'): + # 将文件复制到data目录 + shutil.copy('.env', 'data/.env') + # 获取data目录下的.env文件编码,如果为utf-8编码,就转换为gbk编码 + convert_encoding('./data/.env') +elif os.path.exists('data/.env'): + # 获取data目录下的.env文件编码,如果为utf-8编码,就转换为gbk编码 + convert_encoding('./data/.env') + config = Config("data/.env") # 是否开启DEBUG模式 DEBUG = config('DEBUG', cast=bool, default=False) diff --git a/utf8togbk.py b/utf8togbk.py new file mode 100644 index 0000000..fae1584 --- /dev/null +++ b/utf8togbk.py @@ -0,0 +1,21 @@ +import chardet + + +# 将UTF-8编码的文件转换为GBK编码 +def utf8togbk(file): + with open(file, 'r', encoding='utf-8') as f: + lines = f.readlines() + with open(file, 'w', encoding='gbk') as f: + f.writelines(lines) + + +# 获取文件编码 +def get_encoding(file): + with open(file, 'rb') as f: + return chardet.detect(f.read())['encoding'] + + +# 获取文件编码,如果为utf-8编码,就转换为gbk编码 +def convert_encoding(file): + if get_encoding(file) == 'utf-8': + utf8togbk(file)