Melhorada interface dos formulários. Adicionado a opção de editar os Militantes direto da Lista
This commit is contained in:
@@ -1,39 +1,31 @@
|
||||
import mysql.connector
|
||||
from mysql.connector import Error
|
||||
# from config.db_config import db_config
|
||||
from sqlalchemy import create_engine, Column, Integer, String, Boolean, Numeric, Date, ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.orm import relationship, sessionmaker
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
engine = create_engine('sqlite:///database.db', echo=True)
|
||||
Base = declarative_base()
|
||||
SessionLocal = sessionmaker(bind=engine)
|
||||
|
||||
def get_db_connection(db_config):
|
||||
try:
|
||||
connection = mysql.connector.connect(**db_config)
|
||||
return connection
|
||||
except Error as e:
|
||||
print(f"Error connecting to database: {e}")
|
||||
return None
|
||||
def get_db_connection():
|
||||
"""
|
||||
Retorna uma nova sessão do banco de dados
|
||||
"""
|
||||
return SessionLocal()
|
||||
|
||||
def execute_query(query, params=None):
|
||||
connection = get_db_connection('')
|
||||
if connection is None:
|
||||
return None
|
||||
"""
|
||||
Executa uma query usando SQLAlchemy
|
||||
"""
|
||||
session = get_db_connection()
|
||||
try:
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
cursor.execute(query, params)
|
||||
connection.commit()
|
||||
return cursor
|
||||
except Error as e:
|
||||
print(f"Error executing query: {e}")
|
||||
return None
|
||||
result = session.execute(query, params)
|
||||
session.commit()
|
||||
return result
|
||||
except Exception as e:
|
||||
session.rollback()
|
||||
raise e
|
||||
finally:
|
||||
if connection.is_connected():
|
||||
cursor.close()
|
||||
connection.close()
|
||||
session.close()
|
||||
|
||||
class Militante(Base):
|
||||
__tablename__ = 'militantes'
|
||||
|
||||
34
functions/validations.py
Normal file
34
functions/validations.py
Normal file
@@ -0,0 +1,34 @@
|
||||
def validar_cpf(cpf):
|
||||
"""
|
||||
Valida um CPF seguindo as regras do governo brasileiro.
|
||||
Retorna True se o CPF é válido, False caso contrário.
|
||||
"""
|
||||
# Remove caracteres não numéricos
|
||||
cpf = ''.join(filter(str.isdigit, cpf))
|
||||
|
||||
# Verifica se tem 11 dígitos
|
||||
if len(cpf) != 11:
|
||||
return False
|
||||
|
||||
# Verifica se todos os dígitos são iguais
|
||||
if len(set(cpf)) == 1:
|
||||
return False
|
||||
|
||||
# Calcula primeiro dígito verificador
|
||||
soma = 0
|
||||
for i in range(9):
|
||||
soma += int(cpf[i]) * (10 - i)
|
||||
resto = soma % 11
|
||||
digito1 = 0 if resto < 2 else 11 - resto
|
||||
|
||||
if int(cpf[9]) != digito1:
|
||||
return False
|
||||
|
||||
# Calcula segundo dígito verificador
|
||||
soma = 0
|
||||
for i in range(10):
|
||||
soma += int(cpf[i]) * (11 - i)
|
||||
resto = soma % 11
|
||||
digito2 = 0 if resto < 2 else 11 - resto
|
||||
|
||||
return int(cpf[10]) == digito2
|
||||
Reference in New Issue
Block a user