Add files via upload

This commit is contained in:
TuturP33
2023-11-05 14:36:34 +01:00
committed by GitHub
parent 39cf40c2e5
commit 26b0db2eb8
10 changed files with 105 additions and 0 deletions
+24
View File
@@ -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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+8
View File
@@ -0,0 +1,8 @@
from modules import page_html
def page_accueil():
return page_html('welcome')
def a_propos():
return "À propos de nous!"
+4
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
python-dotenv==1.0.0
+12
View File
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hello, World!</h1>
<a href="/a-propos">About</a>
</body>
</html>
+4
View File
@@ -0,0 +1,4 @@
routes = {
"/": "page_accueil",
"/a-propos": "a_propos"
}
+52
View File
@@ -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()