Skip to content
Snippets Groups Projects
Commit 9f828d0d authored by Françoise Conil's avatar Françoise Conil
Browse files

Site web avec base de données (à améliorer)

parent 2c7d8a7c
No related branches found
No related tags found
No related merge requests found
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy import Column, Integer, String
Base = declarative_base()
template = f"""<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Baskets Nike</title>
</head>
<body>
<h1>Liste des modèle Nike disponible</h1>
<h2>Le métier d'ingénieur</h2>
<p>Bonjour</p>
<ol>
<li>BAC L</li>
<li>BAC ES</li>
<li>BAC S</li>
<ol>
<p><img src="protocole-http.png"></p>
</body>
</html>
"""
base = """<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Baskets Nike</title>
</head>
<body>
<h1>Liste des modèle Nike disponibles</h1>"""
fin = """</body>
</html>
"""
class BasketNike(Base):
__tablename__ = 'nike'
id = Column(Integer, primary_key=True)
modele = Column(String)
couleur = Column(String)
image = Column(String)
stock = Column(Integer)
def __repr__(self):
return "{0} : modèle {1}, couleur {2}, stock {3}".format(
self.id,
self.modele,
self.couleur,
self.stock
)
if __name__ == '__main__':
engine = create_engine("sqlite:///basket.db", echo=False)
DBSession = scoped_session(sessionmaker())
DBSession.configure(bind=engine, autoflush=False, expire_on_commit=False)
print(base)
for b in DBSession.query(BasketNike).all():
print(f"""<div>
<div id="modele">{b.modele}</div>
<div id="stock">couleur: {b.couleur}, stock: {b.stock}</div>
<div id="image_basket"><img src="./{b.image}"></div>
</div>
""")
print(fin)
File added
from http.server import BaseHTTPRequestHandler
import os
from urllib import parse
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from acces_base_de_donnees import Base, BasketNike
engine = create_engine("sqlite:///basket.db", echo=False)
DBSession = scoped_session(sessionmaker())
DBSession.configure(bind=engine, autoflush=False, expire_on_commit=False)
def pageBasket(marque):
base = """<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style_commerce.css">
<title>Baskets Nike</title>
</head>
<body>
<h1>Liste des modèle Nike disponibles</h1>"""
fin = """</body>
</html>"""
message = base
for b in DBSession.query(BasketNike).all():
message += '<div class="fiche">'
message += f'<div class="modele">{b.modele}</div>'
message += f'<div class="stock">couleur: {b.couleur}, stock: {b.stock}</div>'
message += f'<div classs="image_basket"><img src="./{b.image}"></div>'
message += '</div>'
message += fin
return message
class GestionGET(BaseHTTPRequestHandler):
def recupereFichier(self):
self.mime_types = {
'.jpeg': ('image/jpeg', 'rb'),
'.jpg': ('image/jpg', 'rb'),
'.png': ('image/png', 'rb'),
'.html': ('text/html', 'r'),
'.css': ('text/css', 'r'),
'.js': ('application/x-javascript', 'r')
}
parsed_path = parse.urlparse(self.path)
filebase, ext = os.path.splitext(os.path.basename(parsed_path.path))
# TODO gerer ext vide
filename = f'{filebase}{ext}'
if os.path.exists(filename):
mode = self.mime_types[ext][1]
with open(filename, mode) as f:
contenu = f.read()
else:
if 'basket' in filename:
ext = ext if len(ext) > 0 else '.html'
return pageBasket('Nike'), ext
else:
contenu = None
return contenu, ext
def do_GET(self):
message, ext = self.recupereFichier()
if message is None:
self.send_response(404)
self.end_headers()
else:
mimetype = self.mime_types[ext][0]
self.send_response(200)
self.send_header('Content-Type',
f'{mimetype}; charset=utf-8')
self.end_headers()
if self.mime_types[ext][1] == 'r':
self.wfile.write(message.encode('utf-8'))
else:
self.wfile.write(message)
if __name__ == '__main__':
from http.server import HTTPServer
server = HTTPServer(('localhost', 8080), GestionGET)
print('Starting server, use <Ctrl-C> to stop')
server.serve_forever()
site-web/nike_air_force_1.jpeg

13.9 KiB

site-web/nike_air_max_metallic.jpeg

12.5 KiB

site-web/nike_mk2_tekno.jpeg

13 KiB

h1 {
color: maroon;
border-bottom: solid 4px maroon;
}
.fiche {
border: solid 2px blue;
margin: 10px;
float: left;
}
.modele {
font-weight: bold;
}
.stock {
font-style: italic;
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment