from typing import Union, Optional from fastapi import FastAPI, Request, Body, Form, Query from fastapi.websockets import WebSocket, WebSocketDisconnect from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse from fastapi.staticfiles import StaticFiles from fastapi.middleware.cors import CORSMiddleware from starlette.exceptions import HTTPException from settings import * import random import os, json from pydantic import BaseModel, validator, conint, constr, Field # 关闭文档 app = FastAPI() # app.mount("/model", StaticFiles(directory="model"), name="model") app.add_middleware( CORSMiddleware, # 允许跨域的源列表,例如 ["http://www.example.org"] 等等,["*"] 表示允许任何源 allow_origins=["*"], # 跨域请求是否支持 cookie,默认是 False,如果为 True,allow_origins 必须为具体的源,不可以是 ["*"] allow_credentials=False, # 允许跨域请求的 HTTP 方法列表,默认是 ["GET"] allow_methods=["*"], # 允许跨域请求的 HTTP 请求头列表,默认是 [],可以使用 ["*"] 表示允许所有的请求头 # 当然 Accept、Accept-Language、Content-Language 以及 Content-Type 总之被允许的 allow_headers=["*"], # 可以被浏览器访问的响应头, 默认是 [],一般很少指定 # expose_headers=["*"] # 设定浏览器缓存 CORS 响应的最长时间,单位是秒。默认为 600,一般也很少指定 # max_age=1000 ) @app.on_event("startup") def on_startup(): pass # create_all_database() # session = SqlQuery() # device_config_crud = CRUD(DeviceConfig) # all_devices = device_config_crud.read_all(session) # if len(all_devices) == 0: # # 如果配置表中一条数据都没有,就将初始化数据全部插入到数据表中 # actions = json.load(open("action.json", encoding="utf-8")) # batch_insert_device_configs(session,actions) # sys_config_crud = CRUD(SysConfigs) # all_sys_configs = sys_config_crud.read_all(session) # if len(all_sys_configs) == 0: # # 如果配置表中一条数据都没有,就将初始化数据全部插入到数据表中 # sys_config_json = json.load(open("sys_configs.json", encoding="utf-8")) # batch_insert_sys_configs(session, sys_config_json) class UnicornException(Exception): def __init__(self, msg: str, code: int = -1): self.msg = msg self.code = code @app.exception_handler(UnicornException) async def error_throw(request: Request, exc: UnicornException): return JSONResponse( status_code=200, content={ "code": exc.code, "msg": exc.msg, }, ) @app.exception_handler(HTTPException) async def global_exception_handler(request, exc): if exc.status_code == 500: err_msg = "Server Internal Error" else: err_msg = exc.detail return JSONResponse( {"code": exc.status_code, "err_msg": err_msg, "status": "Failed"} )