Compare commits
13 Commits
94d8281562
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 37d8baf771 | |||
| 45f4b50233 | |||
| c3edf5a11d | |||
| a803ce705e | |||
| 8ce453908c | |||
| 34b9a29f0b | |||
| 677af4118f | |||
| 226c0aac47 | |||
| 05d00596f7 | |||
| f97bbf7244 | |||
| 138004eef8 | |||
| b5a0c6d398 | |||
| 16e10afa56 |
@@ -0,0 +1,2 @@
|
||||
.venv/
|
||||
.env
|
||||
Binary file not shown.
@@ -0,0 +1,79 @@
|
||||
from flask import Flask, jsonify, request
|
||||
from flask_cors import CORS
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
from db import get_connection
|
||||
|
||||
#Carrega arquivo de variáveis de ambiente (.env)
|
||||
load_dotenv()
|
||||
#Carrega variável de ambiente PORT. Essa variável contém a porta TCP utilizada na APIREST
|
||||
PORT = os.getenv("PORT")
|
||||
|
||||
#Cria objeto Flask. Esse objeto é necessário para utilização do FLASK
|
||||
#(módulo python para criação de APIs REST).
|
||||
app = Flask(__name__)
|
||||
#Aplica cors no objeto Flask
|
||||
CORS(app)
|
||||
|
||||
#Criar rota de saúde da aplicação
|
||||
@app.route("/health")
|
||||
def health():
|
||||
return jsonify({"message" : "API Flask version 1.0!!!"})
|
||||
|
||||
#=============================================================
|
||||
|
||||
@app.route("/produtos",methods=["GET"])
|
||||
def listar_produtos():
|
||||
conexao = get_connection()
|
||||
cursor = conexao.cursor(dictionary=True)
|
||||
|
||||
cursor.execute("select * from produto")
|
||||
produtos = cursor.fetchall()
|
||||
|
||||
cursor.close()
|
||||
conexao.close()
|
||||
|
||||
return jsonify(produtos)
|
||||
|
||||
#=============================================================
|
||||
|
||||
@app.route("/produtos/<int:id>", methods=["GET"])
|
||||
def listar_produto_id(id):
|
||||
conexao = get_connection()
|
||||
cursor = conexao.cursor(dictionary=True)
|
||||
|
||||
cursor.execute("Select * from produto where id = %s", (id,))
|
||||
produto = cursor.fetchone()
|
||||
|
||||
cursor.close()
|
||||
conexao.close()
|
||||
|
||||
if produto is None:
|
||||
return jsonify({"erro" : "Produto não encontrado"}), 404
|
||||
|
||||
return jsonify(produto)
|
||||
|
||||
#=============================================================
|
||||
|
||||
@app.route("/produtos",methods=["POST"])
|
||||
def criar_produto():
|
||||
dados = request.get_json()
|
||||
nome = dados.get("nome")
|
||||
preco = dados.get("preco")
|
||||
estoque = dados.get("estoque")
|
||||
if nome is None or preco is None or estoque is None:
|
||||
return jsonify({"erro" : "Produto inválido"}), 400
|
||||
conexao = get_connection()
|
||||
cursor = conexao.cursor()
|
||||
sql = "insert into produto (nome, preco, estoque) values (%s, %s, %s)"
|
||||
cursor.execute(sql,(nome, preco, estoque))
|
||||
conexao.commit()
|
||||
novo_id = cursor.lastrowid
|
||||
cursor.close()
|
||||
conexao.close()
|
||||
return jsonify({"id" : novo_id, "nome": nome, "preco" : preco, "estoque" : estoque}), 201
|
||||
|
||||
|
||||
#Inicializa o servidor da APIRest
|
||||
if __name__ == "__main__":
|
||||
app.run(port=PORT, debug=True)
|
||||
@@ -0,0 +1,14 @@
|
||||
import os
|
||||
import mysql.connector
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
def get_connection():
|
||||
return mysql.connector.connect(
|
||||
host=os.getenv("DB_HOST"),
|
||||
user=os.getenv("DB_USER"),
|
||||
password=os.getenv("DB_PASSWORD"),
|
||||
database=os.getenv("DB_NAME"),
|
||||
port=os.getenv("DB_PORT")
|
||||
)
|
||||
@@ -0,0 +1,29 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-br">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<title>Produtos</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1> Lista de produtos</h1>
|
||||
<main>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nome</th>
|
||||
<th>Preço</th>
|
||||
<th>Estoque</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="conteudo_tabela">
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
</main>
|
||||
<script src=""script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,21 @@
|
||||
async function carregarProdutos(){
|
||||
const resposta = await fetch("http://localhost:5000/produtos");
|
||||
if (!resposta.ok){
|
||||
throw new Error("Não foi possível carregar a lista")
|
||||
}
|
||||
const produtos = await resposta.join();
|
||||
let tbody = document.querySelector("tbody");
|
||||
produtos.forEach(produto =>{
|
||||
let linha = document.createElement("tr")
|
||||
linha.innerHTML = `
|
||||
<td>${produto.nome}</td>
|
||||
<td>${produto.preco}</td>
|
||||
<td>${produto.estoque}</td>
|
||||
`
|
||||
tbody.appendChild(linha);
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener("load", () => {
|
||||
carregarProdutos();
|
||||
})
|
||||
@@ -0,0 +1,13 @@
|
||||
* {
|
||||
margin : o;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
h1{
|
||||
width : 300px;
|
||||
background-color: brown;
|
||||
padding: 20px;
|
||||
border: 10px solid black;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
blinker==1.9.0
|
||||
click==8.3.3
|
||||
colorama==0.4.6
|
||||
Flask==3.1.3
|
||||
flask-cors==6.0.2
|
||||
itsdangerous==2.2.0
|
||||
Jinja2==3.1.6
|
||||
MarkupSafe==3.0.3
|
||||
mysql-connector-python==9.7.0
|
||||
python-dotenv==1.2.2
|
||||
Werkzeug==3.1.8
|
||||
@@ -0,0 +1,18 @@
|
||||
create table produto (
|
||||
id int auto_increment primary key,
|
||||
nome varchar(100) not null,
|
||||
preco decimal(10,2) not null,
|
||||
estoque int not null
|
||||
);
|
||||
|
||||
#Carga inicial do banco
|
||||
insert into produto (nome,preco,estoque)
|
||||
values ('Bola',12.50,10);
|
||||
|
||||
#Exemplo de consulta
|
||||
insert into produto (nome,preco,estoque)
|
||||
values ('PS5',3950.50,5);
|
||||
|
||||
#select * from produto;
|
||||
|
||||
#delete from produto where id
|
||||
Binary file not shown.
@@ -0,0 +1,36 @@
|
||||
import os
|
||||
|
||||
def organizar_diretorios_logs():
|
||||
# 1. Definir o nome do diretório principal e subpastas
|
||||
diretorio_principal = "logs_rede"
|
||||
subpastas = ["ping", "interfaces", "erros"]
|
||||
|
||||
print(f"Iniciando verificação de estrutura em: {os.getcwd()}\n")
|
||||
|
||||
# 2. Verificar se a pasta principal existe, caso contrário, criar
|
||||
if not os.path.exists(diretorio_principal):
|
||||
os.mkdir(diretorio_principal)
|
||||
print(f"Pasta '{diretorio_principal}' criada com sucesso.")
|
||||
else:
|
||||
print(f"A pasta '{diretorio_principal}' já existe.")
|
||||
|
||||
# 3. Criar as subpastas dentro de logs_rede
|
||||
for sub in subpastas:
|
||||
# Caminho completo (ex: logs_rede/ping)
|
||||
caminho_completo = os.path.join(diretorio_principal, sub)
|
||||
|
||||
if not os.path.exists(caminho_completo):
|
||||
os.mkdir(caminho_completo)
|
||||
print(f" > Subpasta '{sub}' criada.")
|
||||
else:
|
||||
print(f" > Subpasta '{sub}' já existia.")
|
||||
|
||||
# 4. Listar o conteúdo final do diretório principal
|
||||
print("\nEstrutura atual de diretórios:")
|
||||
conteudo = os.listdir(diretorio_principal)
|
||||
|
||||
for item in conteudo:
|
||||
print(f" - {item}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
organizar_diretorios_logs()
|
||||
@@ -0,0 +1,18 @@
|
||||
import os
|
||||
import utilidades
|
||||
import sys
|
||||
|
||||
endereco = input("Digite um endereço IP: ")
|
||||
|
||||
if not utilidades.validar_ip(endereco):
|
||||
print("O endereço IP é inválido.")
|
||||
sys.exit(0)
|
||||
|
||||
comando = f"ping -n 2 {endereco}"
|
||||
|
||||
resultado = os.system(comando)
|
||||
|
||||
if not resultado:
|
||||
print("O endereço existe")
|
||||
else:
|
||||
print("O endereço não existe")
|
||||
@@ -0,0 +1,14 @@
|
||||
import os
|
||||
|
||||
#Apresentar o nome do SO
|
||||
#nt = Windows
|
||||
#posix = Linux
|
||||
print(os.name)
|
||||
|
||||
#Reptorna a pasta atual
|
||||
print(os.getcwd())
|
||||
|
||||
#Exibe as variáveis de ambiente
|
||||
print(os.environ)
|
||||
|
||||
os.path
|
||||
@@ -0,0 +1,9 @@
|
||||
|
||||
def validar_ip(ip : str) -> bool:
|
||||
octetos = ip.split(".")
|
||||
if len(octetos) != 4:
|
||||
return False
|
||||
for octeto in octetos:
|
||||
if int(octeto) < 0 or int(octeto) > 255:
|
||||
return False
|
||||
return True
|
||||
@@ -0,0 +1,44 @@
|
||||
import tkinter as tk
|
||||
from tkinter import scrolledtext
|
||||
import socket
|
||||
import threading
|
||||
|
||||
def ouvir_servidor(socket_servidor):
|
||||
while True:
|
||||
mensagem = socket_servidor.recv(80000)
|
||||
area_mensagens.config(state="normal")
|
||||
area_mensagens.insert(tk.END, mensagem.decode() + "\n")
|
||||
area_mensagens.config(state="disabled")
|
||||
|
||||
socket_servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
socket_servidor.connect(("10.209.1.45",5000))
|
||||
|
||||
thread = threading.Thread(target=ouvir_servidor, args=[socket_servidor,])
|
||||
thread.start()
|
||||
|
||||
janela = tk.Tk()
|
||||
janela.title("Chat do IFRN")
|
||||
|
||||
rotulo_mensagem = tk.Label(janela, text="Digite sua mensagem")
|
||||
rotulo_mensagem.pack()
|
||||
|
||||
entrada_mensagem = tk.Entry(janela, width=80)
|
||||
entrada_mensagem.pack()
|
||||
|
||||
def clicar():
|
||||
mensagem = entrada_mensagem.get()
|
||||
print(mensagem)
|
||||
socket_servidor.send(mensagem.encode())
|
||||
entrada_mensagem.delete(0, tk.END)
|
||||
area_mensagens.config(state="normal")
|
||||
area_mensagens.insert(tk.END, mensagem + "\n")
|
||||
area_mensagens.config(state="disabled")
|
||||
|
||||
botao = tk.Button(janela, text="Enviar", command=clicar)
|
||||
botao.pack()
|
||||
|
||||
area_mensagens = scrolledtext.ScrolledText(janela)
|
||||
area_mensagens.pack()
|
||||
area_mensagens.config(state="disabled")
|
||||
|
||||
janela.mainloop()
|
||||
@@ -0,0 +1,15 @@
|
||||
#Modelo de importação diferente. Não precisará mais
|
||||
#usar a palavra socket (modulo) antes dos recursos
|
||||
from socket import *
|
||||
|
||||
#Criar objeto socket
|
||||
cliente = socket(AF_INET, SOCK_STREAM)
|
||||
|
||||
#Abrir conexão
|
||||
cliente.connect(("10.209.1.45",3000))
|
||||
|
||||
#Enviar mensagem.
|
||||
cliente.send("Olá, servidor! Israel".encode())
|
||||
|
||||
mensagem = cliente.recv(1024)
|
||||
print(f"Mensagem recebida {mensagem.decode}")
|
||||
@@ -0,0 +1,22 @@
|
||||
import socket
|
||||
import threading
|
||||
|
||||
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
servidor.bind(("0.0.0.0",5000))
|
||||
servidor.listen()
|
||||
print("Servidor inicializado!!!")
|
||||
|
||||
clientes = []
|
||||
|
||||
def ouvir_cliente(cliente):
|
||||
while True:
|
||||
mensagem = cliente.recv(80000)
|
||||
for socket_cliente in clientes:
|
||||
if socket_cliente != cliente:
|
||||
socket_cliente.send(mensagem)
|
||||
|
||||
while True:
|
||||
cliente, endereco_cliente = servidor.accept()
|
||||
clientes.append(cliente)
|
||||
thread = threading.Thread(target=ouvir_cliente, args=[cliente,])
|
||||
thread.start()
|
||||
@@ -0,0 +1,25 @@
|
||||
# Biblioteca padrão para utilização de sockets
|
||||
import socket
|
||||
|
||||
# Criar um objeto socket com AF_INET (IPV4) e SOCK_STREAM (TCP)
|
||||
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
|
||||
# Estabelecer vinculo com um endereço e uma porta
|
||||
servidor.bind(("0.0.0.0",3000))
|
||||
|
||||
print("Servidor Inicializado.....")
|
||||
|
||||
# Começa a ouvir tentativas de conexão
|
||||
servidor.listen()
|
||||
|
||||
# Aceitar conexão recebendo o objeto socket da conexão e
|
||||
# o endereço de quem se conectou
|
||||
conexao, endereco = servidor.accept()
|
||||
print(f"Endereco do cliente: {endereco}")
|
||||
|
||||
# Recebendo mensagem do cliente. Tenho que converter bytes para string (decode)
|
||||
mensagem = conexao.recv(1024).decode()
|
||||
print(f"Mensagem recebida: {mensagem}")
|
||||
|
||||
# Enviar mensagem. Precisa ser em bytes (decode)
|
||||
conexao.send("Ok! Mensagem recebida com sucesso".encode())
|
||||
@@ -0,0 +1,19 @@
|
||||
#Tipo de fortamação 1
|
||||
nome = "Adriano"
|
||||
classificacao = 1
|
||||
resultado = "Aluno aprovado: " + nome + " class: " + str(classificacao)
|
||||
print(resultado)
|
||||
|
||||
#Tipo de formatação 2
|
||||
mensagem = "Conectando Ip %s na porta %d" % ("192.168.0.1",45)
|
||||
print(mensagem)
|
||||
|
||||
#Tipo de formatação 3
|
||||
mensagem = "Conectando {} na porta {}".format("10.10.10.4",80)
|
||||
print(mensagem)
|
||||
|
||||
#Tipo de formatação 4
|
||||
ip = "10.10.10.1"
|
||||
porta = 458
|
||||
mensagem = f"Endereco IP: {ip} e porta: {porta}"
|
||||
print(mensagem)
|
||||
@@ -0,0 +1,13 @@
|
||||
lista = []
|
||||
for i in range(10):
|
||||
lista.append(i)
|
||||
print(lista)
|
||||
|
||||
#[operacao for i in lista]
|
||||
lista = [i for i in range(100)]
|
||||
lista = [i*2 for i in range(100)]
|
||||
lista = [f"192.168.0.{i}" for i in range(100)]
|
||||
print(lista)
|
||||
|
||||
for ip in lista:
|
||||
print(ip)
|
||||
@@ -0,0 +1,26 @@
|
||||
a = 20
|
||||
A = 3.1415
|
||||
nome = "João"
|
||||
total = 4596
|
||||
resultado = 45.45
|
||||
logico = True
|
||||
|
||||
print(type(a))
|
||||
print(type(A))
|
||||
print(type(nome))
|
||||
print(type(total))
|
||||
print(type(resultado))
|
||||
print(type(logico))
|
||||
|
||||
|
||||
# Definição padrão de funções em python
|
||||
def somar(a,b):
|
||||
soma = a + b
|
||||
return soma
|
||||
|
||||
print(somar(7,9))
|
||||
|
||||
def somarTipado(a : int, b : int) -> int:
|
||||
return a + b
|
||||
|
||||
print(somarTipado(45, 45))
|
||||
Reference in New Issue
Block a user