diff --git a/README.md b/README.md new file mode 100644 index 0000000..4ca777a --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# PyRoute - Framework Python pour la création d'applications web + +PyRoute est un framework Python simple qui permet de créer des applications web en gérant les routes et en renvoyant des réponses HTTP aux requêtes des utilisateurs. Ce framework a été conçu pour vous aider à comprendre les concepts de base de la gestion des routes dans une application web. + +## Comment ça marche + +PyRoute utilise des sockets pour écouter les requêtes HTTP entrantes et dispatche ces requêtes vers les fonctions de routage appropriées en fonction de l'URL demandée. Vous pouvez définir vos propres routes et leurs fonctions de traitement dans votre application. + +## Configuration + +1. Clonez ce dépôt ou téléchargez le code source. +2. Assurez-vous que Python est installé sur votre système. +3. Exécutez `python serveur.py` pour démarrer le serveur. +4. Accédez à l'application en utilisant un navigateur web. + +## Pratique + +Vous n'avez plus qu'a creer des nouvelle views ainssi que leur route et controller pour dévelloper votre application web. + +## Contribuer +Les contributions sont les bienvenues ! Si vous souhaitez améliorer ce framework ou ajouter des fonctionnalités, n'hésitez pas à créer une demande de tirage (pull request). + +## Licence +Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails. \ No newline at end of file diff --git a/__pycache__/controller.cpython-311.pyc b/__pycache__/controller.cpython-311.pyc new file mode 100644 index 0000000..6c9d6b7 Binary files /dev/null and b/__pycache__/controller.cpython-311.pyc differ diff --git a/__pycache__/modules.cpython-311.pyc b/__pycache__/modules.cpython-311.pyc new file mode 100644 index 0000000..df92511 Binary files /dev/null and b/__pycache__/modules.cpython-311.pyc differ diff --git a/__pycache__/route.cpython-311.pyc b/__pycache__/route.cpython-311.pyc new file mode 100644 index 0000000..e63ab29 Binary files /dev/null and b/__pycache__/route.cpython-311.pyc differ diff --git a/controller.py b/controller.py new file mode 100644 index 0000000..5713883 --- /dev/null +++ b/controller.py @@ -0,0 +1,8 @@ +from modules import page_html + + +def page_accueil(): + return page_html('welcome') + +def a_propos(): + return "À propos de nous!" \ No newline at end of file diff --git a/modules.py b/modules.py new file mode 100644 index 0000000..8fe4bc7 --- /dev/null +++ b/modules.py @@ -0,0 +1,4 @@ +def page_html(page): + with open(f'resources/views/{page}.html', 'r') as fichier_html: + res = fichier_html.read() + return res \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b7cc69b --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +python-dotenv==1.0.0 diff --git a/resources/views/welcome.html b/resources/views/welcome.html new file mode 100644 index 0000000..ac65b3c --- /dev/null +++ b/resources/views/welcome.html @@ -0,0 +1,12 @@ + + + + + + Document + + +

Hello, World!

+ About + + \ No newline at end of file diff --git a/route.py b/route.py new file mode 100644 index 0000000..f777b91 --- /dev/null +++ b/route.py @@ -0,0 +1,4 @@ +routes = { + "/": "page_accueil", + "/a-propos": "a_propos" +} \ No newline at end of file diff --git a/serveur.py b/serveur.py new file mode 100644 index 0000000..1732bf9 --- /dev/null +++ b/serveur.py @@ -0,0 +1,52 @@ +import socket +import os +import re +from dotenv import load_dotenv + +from route import * +from controller import * + +load_dotenv() +listen = int(os.getenv("LISTEN")) +host = os.getenv("HOST") +port = int(os.getenv("PORT")) + +def route(path): + if path in routes: + return globals()[routes[path]] + else: + return None + +def create_server(): + server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server_socket.bind((host, port)) + server_socket.listen(listen) + print(f"Serveur en écoute sur http://{host}:{port}") + + while True: + client_socket, client_address = server_socket.accept() + request_data = client_socket.recv(1024).decode('utf-8') + request_lines = request_data.split('\r\n') + request_line = request_lines[0] + + # Utilisez une expression régulière pour extraire l'URL demandée + match = re.match(r"GET (.+?) HTTP/1.1", request_line) + if match: + path = match.group(1) + else: + path = "/" + + handler = route(path) + + if handler is not None: + response_body = handler() + response_data = f"HTTP/1.1 200 OK\r\nContent-Length: {len(response_body)}\r\n\r\n{response_body}" + else: + response_body = "Page non trouvée" + response_data = f"HTTP/1.1 404 Not Found\r\nContent-Length: {len(response_body)}\r\n\r\n{response_body}" + + client_socket.sendall(response_data.encode('utf-8')) + client_socket.close() + +if __name__ == '__main__': + create_server() \ No newline at end of file