• Python 实现Web API


    1. from flask import Flask, render_template, jsonify, request, send_from_directory
    2. from flask_cors import CORS
    3. import pandas as pd
    4. import os
    5. from routes import routes_blueprint
    6. from functools import wraps
    7. from models import ABC_PLANO, CalendarioProducao, AutomacaoSugestaoPedidos, ObterInfCSW, Vendas
    8. from werkzeug.utils import secure_filename
    9. import dash
    10. import dash_core_components as dcc
    11. import dash_html_components as html
    12. from dash.dependencies import Input, Output
    13. import dash_bootstrap_components as dbc
    14. import plotly.express as px
    15. app = Flask(__name__)
    16. port = int(os.environ.get('PORT', 8000))
    17. app.register_blueprint(routes_blueprint)
    18. #Aqui registo todas as rotas , url's DO PROJETO, para acessar bastar ir na pasta "routes",
    19. #duvidas o contato (62)99351-42-49 ou acessar a documentacao do projeto em:
    20. CORS(app)
    21. def token_required(f): #Aqui passamos o token fixo, que pode ser alterado
    22. @wraps(f)
    23. def decorated_function(*args, **kwargs):
    24. token = request.headers.get('Authorization')
    25. if token == 'a44pcp22': # Verifica se o token é igual ao token fixo
    26. return f(*args, **kwargs)
    27. return jsonify({'message': 'Acesso negado'}), 401
    28. return decorated_function
    29. # Defina o diretório onde as imagens serão armazenadas
    30. UPLOAD_FOLDER = 'imagens'
    31. app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
    32. # Rota para enviar a imagem
    33. @app.route('/pcp/api/upload/', methods=['POST'])
    34. def upload_image(idchamado):
    35. # Verifique se a solicitação possui um arquivo anexado
    36. if 'file' not in request.files:
    37. return jsonify({'message': 'chamado sem anexo'}), 200
    38. file = request.files['file']
    39. # Verifique se o nome do arquivo é vazio
    40. if file.filename == '':
    41. return jsonify({'message': 'chamado sem anexo'}), 200
    42. # Verifique se a extensão do arquivo é permitida (opcional)
    43. allowed_extensions = {'png', 'jpg', 'jpeg', 'gif'}
    44. if not file.filename.rsplit('.', 1)[1].lower() in allowed_extensions:
    45. return jsonify({'message': 'Extensão de arquivo não permitida'}), 400
    46. # Renomeie o arquivo com o ID do chamado e a extensão original
    47. filename = secure_filename(f'{idchamado}.{file.filename.rsplit(".", 1)[1]}')
    48. # Salve o arquivo na pasta de uploads usando idchamado como diretório
    49. upload_directory = os.path.join(app.config['UPLOAD_FOLDER'], idchamado)
    50. # Verifique se o diretório existe e crie-o se não existir
    51. os.makedirs(upload_directory, exist_ok=True)
    52. # Salve o arquivo com o novo nome
    53. file.save(os.path.join(upload_directory, filename))
    54. return jsonify({'message': 'Arquivo enviado com sucesso'}), 201
    55. @app.route('/pcp/api/get_image/', methods=['GET'])
    56. def get_image(idchamado):
    57. filename = idchamado
    58. return send_from_directory(f'imagens/{idchamado}', filename)
    59. @app.route('/pcp/api/PesquisaColecoes', methods=['GET'])
    60. @token_required
    61. def get_Colecoes():
    62. # Obtém o código do usuário e a senha dos parâmetros da URL
    63. itensPag = request.args.get('itensPag',1000)
    64. pagina = request.args.get('pagina',1)
    65. client_ip = request.remote_addr
    66. Endereco_det = ObterInfCSW.GetColecoes(pagina, itensPag, client_ip)
    67. Endereco_det = pd.DataFrame(Endereco_det)
    68. # Obtém os nomes das colunas
    69. column_names = Endereco_det.columns
    70. # Monta o dicionário com os cabeçalhos das colunas e os valores correspondentes
    71. end_data = []
    72. for _, row in Endereco_det.iterrows():
    73. end_dict = {column_name: row[column_name] for column_name in column_names}
    74. end_data.append(end_dict)
    75. return jsonify(end_data)
    76. @app.route('/pcp/api/PesquisaTipoNotas', methods=['GET'])
    77. @token_required
    78. def get_PesquisaTipoNotass():
    79. # Obtém o código do usuário e a senha dos parâmetros da URL
    80. itensPag = request.args.get('itensPag',10000)
    81. pagina = request.args.get('pagina',1)
    82. client_ip = request.remote_addr
    83. Endereco_det = ObterInfCSW.GetTipoNotas(pagina, itensPag, client_ip)
    84. Endereco_det = pd.DataFrame(Endereco_det)
    85. # Obtém os nomes das colunas
    86. column_names = Endereco_det.columns
    87. # Monta o dicionário com os cabeçalhos das colunas e os valores correspondentes
    88. end_data = []
    89. for _, row in Endereco_det.iterrows():
    90. end_dict = {column_name: row[column_name] for column_name in column_names}
    91. end_data.append(end_dict)
    92. return jsonify(end_data)
    93. @app.route('/pcp/api/PesquisaLotes', methods=['GET'])
    94. @token_required
    95. def get_PesquisaLotes():
    96. # Obtém o código do usuário e a senha dos parâmetros da URL
    97. itensPag = request.args.get('itensPag',100)
    98. pagina = request.args.get('pagina',1)
    99. client_ip = request.remote_addr
    100. Endereco_det = ObterInfCSW.GetLotesCadastrados(pagina, itensPag, client_ip)
    101. Endereco_det = pd.DataFrame(Endereco_det)
    102. # Obtém os nomes das colunas
    103. column_names = Endereco_det.columns
    104. # Monta o dicionário com os cabeçalhos das colunas e os valores correspondentes
    105. end_data = []
    106. for _, row in Endereco_det.iterrows():
    107. end_dict = {column_name: row[column_name] for column_name in column_names}
    108. end_data.append(end_dict)
    109. return jsonify(end_data)
    110. @app.route('/pcp/api/Vendas/', methods=['GET'])
    111. @token_required
    112. def get_VendasPlano(codigoPlano):
    113. plano = Vendas.VendasporSku(codigoPlano)
    114. plano = pd.DataFrame(plano)
    115. # Obtém os nomes das colunas
    116. # Obtém os nomes das colunas
    117. column_names = plano.columns
    118. # Monta o dicionário com os cabeçalhos das colunas e os valores correspondentes
    119. OP_data = []
    120. for index, row in plano.iterrows():
    121. op_dict = {}
    122. for column_name in column_names:
    123. op_dict[column_name] = row[column_name]
    124. OP_data.append(op_dict)
    125. return jsonify(OP_data)
    126. @app.route('/pcp/api/AtualizarAutomacao', methods=['GET'])
    127. def get_AtualizarAutomacao():
    128. client_ip = request.remote_addr
    129. usuarios = AutomacaoSugestaoPedidos.AplicandoAtualizacao(client_ip)
    130. # Obtém os nomes das colunas
    131. column_names = usuarios.columns
    132. # Monta o dicionário com os cabeçalhos das colunas e os valores correspondentes
    133. OP_data = []
    134. for index, row in usuarios.iterrows():
    135. op_dict = {}
    136. for column_name in column_names:
    137. op_dict[column_name] = row[column_name]
    138. OP_data.append(op_dict)
    139. return jsonify(OP_data)
    140. @app.route('/pcp/api/RankingABCVendas', methods=['POST'])
    141. @token_required
    142. def vendas():
    143. data = request.get_json()
    144. codigoPlano = data.get('plano')
    145. excel = data.get('excel', False)
    146. aprovado = data.get('aprovado', True)
    147. engenharia = data.get('engenharia', '0')
    148. descricao = data.get('descricao', '0')
    149. categoria = data.get('categoria', '0')
    150. MARCA = data.get('MARCA', '0')
    151. pagina = data.get('pagina', 0) # Valor padrão: False, se 'estornar' não estiver presente no corpo
    152. itensPag = data.get('itensPag', 1) # Valor padrão: False, se 'estornar' não estiver presente no corpo
    153. detalhaengenharias = data.get('detalhaengenharias','0')
    154. client_ip = request.remote_addr
    155. # Obtém os dados do corpo da requisição (JSON)
    156. data = request.get_json()
    157. codigoPlano = str(codigoPlano)
    158. # Verifica se a coluna "funcao" está presente nos dados recebidos
    159. if detalhaengenharias == '0':
    160. dados, nome = Vendas.VendasporSku(client_ip, codigoPlano, aprovado, excel, pagina, itensPag, engenharia, descricao, categoria, MARCA)
    161. dados = pd.DataFrame(dados)
    162. else:
    163. dados1, nome = Vendas.VendasporSku(client_ip, codigoPlano, aprovado, excel, pagina, itensPag, engenharia, descricao, categoria, MARCA)
    164. dados = Vendas.Detalha_EngenhariaABC(detalhaengenharias, nome)
    165. # Obtém os nomes das colunas
    166. column_names = dados.columns
    167. # Monta o dicionário com os cabeçalhos das colunas e os valores correspondentes
    168. end_data = []
    169. for index, row in dados.iterrows():
    170. end_dict = {}
    171. for column_name in column_names:
    172. end_dict[column_name] = row[column_name]
    173. end_data.append(end_dict)
    174. return jsonify(end_data)
    175. @app.route('/pcp/api/EditarABCPlano', methods=['POST'])
    176. @token_required
    177. def EditarABCPlano():
    178. data = request.get_json()
    179. codigoPlano = data.get('plano')
    180. a_ = data.get('a', '0')
    181. b_ = data.get('b', '0')
    182. c_ = data.get('c', '0')
    183. c1_ = data.get('c1', '0')
    184. c2_ = data.get('c2', '0')
    185. c3_ = data.get('c3', '0')
    186. codigoPlano = str(codigoPlano)
    187. # Verifica se a coluna "funcao" está presente nos dados recebidos
    188. dados = ABC_PLANO.Editar(a_, b_, c_, c1_, c2_, c3_, codigoPlano)
    189. # Obtém os nomes das colunas
    190. column_names = dados.columns
    191. # Monta o dicionário com os cabeçalhos das colunas e os valores correspondentes
    192. end_data = []
    193. for index, row in dados.iterrows():
    194. end_dict = {}
    195. for column_name in column_names:
    196. end_dict[column_name] = row[column_name]
    197. end_data.append(end_dict)
    198. return jsonify(end_data)
    199. @app.route('/pcp/api/ABCPlano/', methods=['GET'])
    200. def get_ABCPlano(Plano):
    201. usuarios = ABC_PLANO.getABCPlano(Plano)
    202. # Obtém os nomes das colunas
    203. column_names = usuarios.columns
    204. # Monta o dicionário com os cabeçalhos das colunas e os valores correspondentes
    205. OP_data = []
    206. for index, row in usuarios.iterrows():
    207. op_dict = {}
    208. for column_name in column_names:
    209. op_dict[column_name] = row[column_name]
    210. OP_data.append(op_dict)
    211. return jsonify(OP_data)
    212. @app.route('/pcp/api/PlanoFeriado/', methods=['GET'])
    213. def get_PlanoFeriado(Plano):
    214. usuarios = CalendarioProducao.Get_feriados(Plano)
    215. # Obtém os nomes das colunas
    216. column_names = usuarios.columns
    217. # Monta o dicionário com os cabeçalhos das colunas e os valores correspondentes
    218. OP_data = []
    219. for index, row in usuarios.iterrows():
    220. op_dict = {}
    221. for column_name in column_names:
    222. op_dict[column_name] = row[column_name]
    223. OP_data.append(op_dict)
    224. return jsonify(OP_data)
    225. @app.route('/CargaSetor')
    226. def carga_setor():
    227. dash_app = dash.Dash(__name__, server=app, url_base_pathname='/CargaSetor/', external_stylesheets=[dbc.themes.BOOTSTRAP])
    228. dash_app.layout = html.Div([
    229. html.H1("Seleção de Bandeiras com 'Selecionar Tudo'"),
    230. dcc.Checklist(
    231. id='flag-selection',
    232. options=[
    233. {'label': 'English 🇺🇸', 'value': 'en'},
    234. {'label': 'Français 🇫🇷', 'value': 'fr'},
    235. {'label': 'Español 🇪🇸', 'value': 'es'},
    236. {'label': 'Português 🇧🇷', 'value': 'pt'},
    237. {'label': 'Selecionar Tudo', 'value': 'all'}
    238. ],
    239. value=['en'], # Valores iniciais
    240. ),
    241. html.Div(id='selected-flags')
    242. ])
    243. @dash_app.callback(
    244. Output('flag-selection', 'value'),
    245. Input('flag-selection', 'options'),
    246. Input('flag-selection', 'value')
    247. )
    248. def update_flag_selection(options, values):
    249. if 'all' in values:
    250. selected_flags = [opt['value'] for opt in options if opt['value'] != 'all']
    251. selected_flags.append('all')
    252. return selected_flags
    253. return values
    254. @dash_app.callback(
    255. Output('selected-flags', 'children'),
    256. Input('flag-selection', 'value')
    257. )
    258. def display_selected_flags(selected_flags):
    259. return f"Bandas selecionadas: {', '.join(selected_flags)}"
    260. return dash_app.server
    261. if __name__ == '__main__':
    262. app.run(host='0.0.0.0', port=port)

  • 相关阅读:
    SQL基本语句
    【Vue 组件化开发 二 】注册组件的语法糖、组件模板的分离写法、组件的数据
    win10安装pycuda2022
    带你刷(牛客网)C语言百题(第五天)
    【自动驾驶】欧拉角和旋转矩阵之间的转换
    linux使用shell采集内存、与cpu使用率
    IoT知识点补充
    深入理解Linux网络技术内幕(九)——中断和网络驱动程序
    百度文心大模型4.0发布,对标GPT-4
    互联网职场人写周报的正确姿势
  • 原文地址:https://blog.csdn.net/softshow1026/article/details/134529302