sict_csic/main.py

119 lines
4.0 KiB
Python

from flask import Flask, render_template, url_for, jsonify, send_file, send_from_directory, session
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired, InputRequired
# from flask_cors import CORS
import requests
import json
import os
from db_conf import *
app = Flask(__name__)
app.config['SECRET_KEY'] = 'SiCt2021CsIcDIX'
class LoginForm(FlaskForm):
username = StringField('username', validators=[InputRequired('EL código GID es requerido'), DataRequired()])
password = PasswordField('password', validators=[InputRequired('La contraseña es requerida'), DataRequired('campo requerido')])
@app.route('/', methods=['GET', 'POST'])
def home():
form = LoginForm()
mensaje = ""
if form.validate_on_submit():
user = form.username.data
pswd = form.password.data
sitios = DataBaseServer().get_data('SELECT * FROM sitios;')[0][1]
dirSubdirsEdos = DataBaseServer().get_data(
'SELECT * FROM dir_csict;')[0][1]
# print(dirSubdirsEdos)
for sitio in sitios:
gid = sitio['CodigoGid']
password = sitio['PasswordGid']
if pswd == password and user == gid:
centroSICT = next(
(x for x in dirSubdirsEdos if int(x['idEdo']) == int(sitio['idEdo'])), None)
if centroSICT is not None:
objeto = {
'codigoGid': gid,
'sitio': sitio['nombreTipologia'].title(),
'ai': sitio['NombreUnidad'].title(),
'edo': sitio['Estado'].title(),
'mun': sitio['Municipio'].title(),
'loc': sitio['Localidad'].title(),
'nIndicadores': len(sitio['indicadores']),
'responsableSitio': sitio['ResponsableSitio'].title(),
'PuestoResponsable': sitio['PuestoResponsable'].title(),
'indicadores': sitio['indicadores'],
'lat': sitio['ubicacion']['latitud'],
'lon': sitio['ubicacion']['longitud'],
'centroSICT': centroSICT
}
return render_template('layout_reportes.html', objeto=objeto, mensaje=mensaje)
# Si el bucle for se completa sin encontrar coincidencias, muestra el mensaje de error
mensaje = 'El código gid y/o contraseña son incorrectas, verifique sus credenciales.'
return render_template('index.html', form=form, mensaje=mensaje)
return render_template('index.html', form=form)
@app.route('/mapa')
def mapa():
return render_template('mapa.html')
@app.route("/mapa/sitios_info")
def sample():
dataRequest = DataBaseServer().get_data('SELECT * FROM sitios;')[0][1]
# with open("./database/sitios.json", mode="r", encoding="utf-8") as file:
# dataRequest = json.load(file)
lstSitios = []
for s in dataRequest:
if 'ubicacion' in s.keys():
tempObj = {
'CodigoGid': s['CodigoGid'],
'NombreUnidad': s['NombreUnidad'].title(),
'Denominacion': s['Denominacion'].title(),
'Estado': s['Estado'].title(),
'Municipio': s['Municipio'].title(),
'Localidad': s['Localidad'].title(),
'ubicacion': s['ubicacion'],
'lenguasIndigenas': s['lenguasIndigenas'].title(),
'fechaInstalacion': s['fechaInstalacion'],
'infografiaSitio': s['infografiaSitio']
}
lstSitios.append(tempObj)
return jsonify(lstSitios)
@app.route('/mapa/coordenadas')
def coordenadas():
c = DataBaseServer().get_coordenadas()[0][1]
return jsonify(c)
@app.route('/mapa/img_ai')
def img_ai():
return send_file('./static/imgs/icon_ai2.png')
@app.errorhandler(404)
def error_page(e):
return render_template('error_page.html')
if __name__ == '__main__':
app.run(port=8090, debug=True, host="0.0.0.0")