| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 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
- from databases import create_all_database, DeviceConfig,SysConfigs, CRUD,batch_insert_sys_configs, SqlQuery,batch_insert_device_configs
- # 关闭文档
- 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():
- 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"}
- )
|