Почему моя страница загружается бесконечно?Python

Программы на Python
Ответить
Anonymous
 Почему моя страница загружается бесконечно?

Сообщение Anonymous »

Я пытаюсь получить доступ к базе данных, созданной в Access, с помощью серверной части Python с библиотекой pyodbc, но страница постоянно перезагружается.
Когда я впервые открываю страницу на локальном хосте время все работает нормально, и если я посмотрю на веб-консоль, я увижу данные из своей базы данных. Но затем, если я перезагружаю Интернет, страница начинает бесконтрольно перезагружаться, не останавливаясь. Сетевые события начинают накапливаться с именами test.html, siolated-first.jst, test.js, contact и ws одно за другим, не останавливаясь. . В консоли на мгновение можно увидеть данные, но страница сразу же перезагружается. То есть веб-страница после загрузки по f5 начинает обновляться точно так же без остановки, как если бы вы нажимали f5 без остановки.
Другое дело, что в моем коде это так. Я не использую ws ни во фронтальной, ни в серверной части.

Код: Выделить всё

    let isDataLoaded = false; // Evita que el fetch se ejecute varias veces

function loadContacts() {
if (isDataLoaded) {
console.log("Ya se cargaron los contactos, no se ejecuta fetch nuevamente.");
return;
}

isDataLoaded = true;  // Se establece que ya se ha cargado
console.log("Realizando fetch para cargar contactos.");

let url = "http://localhost:8000/contactos";
fetch(url)
.then(response => response.json())
.then(data => {
console.log("Datos obtenidos:", data);
})
.catch(error =>  console.log("Error al obtener contactos:", error));
}

document.addEventListener("DOMContentLoaded", loadContacts);

Код: Выделить всё

    import json
import pyodbc
import os
from http.server import BaseHTTPRequestHandler, HTTPServer
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_PATH = os.path.join(BASE_DIR, 'contactsDB.mdb')

CONNECTION_STRING = f'DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={DB_PATH};'

def get_connection():
return pyodbc.connect(CONNECTION_STRING)

class ContactHandler(BaseHTTPRequestHandler):

def _set_headers(self):
"""Establece los encabezados CORS y de respuesta"""
self.send_header('Content-Type', 'application/json')
# Permite solicitudes desde cualquier origen (o puedes poner tu origen específico)
self.send_header('Access-Control-Allow-Origin', '*')  # o '*' para todos los orígenes
self.send_header('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS')
self.send_header('Access-Control-Allow-Headers', 'Content-Type')
self.send_header('Cache-Control', 'no-store')  # Evita cache en cliente

self.end_headers()

def do_OPTIONS(self):
"""Manejo de las solicitudes pre-flight de CORS"""
self.send_response(200)
self._set_headers()
self.wfile.write(b'')  # Respuesta vacía para la solicitud OPTIONS

def do_GET(self):
if self.path == '/contactos':
try:
print("Recibiendo solicitud GET para /contactos")  # Agrega un log
conn = get_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM contacts ORDER BY nombre')
rows = cursor.fetchall()
conn.close()
contactos = [{'nombre': row.nombre, 'telefono': row.telefono, 'edad': row.edad} for row in rows]
print(f"Enviando contactos: {contactos}")  # Log de lo que se envía

self.send_response(200)
self._set_headers()
self.wfile.write(json.dumps(contactos).encode('utf-8'))
except Exception as e:
self.send_response(500)
self._set_headers()
self.wfile.write(json.dumps({'error': str(e)}).encode('utf-8'))
print(f"Error: {e}")

def do_POST(self):
if self.path == '/contactos':
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
data = json.loads(post_data)
nombre = data.get('nombre')
telefono = data.get('telefono')
edad = data.get('edad')
try:
conn = get_connection()
cursor = conn.cursor()
cursor.execute('INSERT INTO contacts (nombre, telefono, edad) VALUES (?, ?, ?)', (nombre, telefono,edad))
conn.commit()
conn.close()

self.send_response(201)
self._set_headers()
self.wfile.write(json.dumps({'message':'contacto agregado'}).encode('utf-8'))
except Exception as e:
self.send_response(500)
self._set_headers()
self.wfile.write(json.dumps({'error':str(e)}).encode('utf-8'))

def do_DELETE(self):
if self.path.startswith('/contactos'):
nombre= self.path.split('/')[-1]
try:
conn = get_connection()
cursor = conn.cursor()
cursor.execute('DELETE FROM contacts WHERE nombre = ?', (nombre,))
conn.commit()
conn.close()

self.send_response(200)
self._set_headers()
self.wfile.write(json.dumps({'message':  'contacto eliminado'}).encode('utf-8'))
except Exception as e:
self.send_response(500)
self._set_headers()
self.wfile.write(json.dumps({'error':str(e)}).encode('utf-8'))

def run_server():
server_address = ('', 8000)
httpd = HTTPServer(server_address, ContactHandler)
print("servidor corriendo en http://localhost:8000")
httpd.serve_forever()

if __name__ == '__main__':
run_server()
Что должно произойти, так это то, что запрос генерируется только один раз, а не начинает повторяться бесконечно по мере того, как это происходит.


Подробнее здесь: https://stackoverflow.com/questions/792 ... definitely
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»