mirror of
https://github.com/ae-utbm/sith3.git
synced 2024-07-01 10:58:04 +00:00
214 lines
6.7 KiB
TeX
214 lines
6.7 KiB
TeX
%%
|
|
%
|
|
% Skia
|
|
% skia@libskia.so
|
|
%
|
|
%%
|
|
|
|
\documentclass[a4paper]{report}
|
|
|
|
%packages
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[francais]{babel}
|
|
\usepackage{graphicx}\graphicspath{{pix/}}
|
|
\usepackage{float}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{color}
|
|
\usepackage{fancyhdr}
|
|
%Options: Sonny, Lenny, Glenn, Conny, Rejne, Bjarne, Bjornstrup
|
|
\usepackage[Bjornstrup]{fncychap}
|
|
\usepackage[procnames]{listings}
|
|
\usepackage[colorlinks=true,linkcolor=black]{hyperref}
|
|
\usepackage{pdfpages}
|
|
\usepackage{titlesec, blindtext, color}
|
|
|
|
%pdf metadata
|
|
\hypersetup{
|
|
unicode=true,
|
|
colorlinks=true,
|
|
citecolor=black,
|
|
filecolor=black,
|
|
linkcolor=black,
|
|
urlcolor=black,
|
|
pdfauthor={Skia <skia@libskia.so>},
|
|
pdftitle={},
|
|
pdfcreator={pdftex},
|
|
pdfsubject={},
|
|
pdfkeywords={},
|
|
}
|
|
|
|
|
|
\definecolor{keywords}{RGB}{200,0,90}
|
|
\definecolor{comments}{RGB}{0,0,113}
|
|
\definecolor{red}{RGB}{160,0,0}
|
|
\definecolor{green}{RGB}{0,150,0}
|
|
|
|
\lstset{
|
|
language=Python,
|
|
basicstyle=\ttfamily\small,
|
|
numbers=left,
|
|
numberstyle=\color{red},
|
|
keywordstyle=\color{keywords},
|
|
commentstyle=\color{comments},
|
|
stringstyle=\color{green},
|
|
showstringspaces=false,
|
|
}
|
|
|
|
%inner meta
|
|
\title{Architecture de Sith: le nouveau site AE}
|
|
\author{Skia (Florent JACQUET)}
|
|
\date{\today}
|
|
|
|
\begin{document}
|
|
|
|
\tableofcontents
|
|
\listoffigures
|
|
|
|
\chapter*{Introduction}
|
|
\addcontentsline{toc}{chapter}{Introduction}
|
|
\par
|
|
Il y a longtemps, au début des années 2000, l'Association des Étudiants a mis en place un site internet qui n'a eu de
|
|
cesse d'évoluer au fil des ans. Grâce aux différents contributeurs qui s'y sont plongés, et qui ont pu y ajouter leurs
|
|
fonctionnalités plus ou moins utiles, le site possède désormais un ensemble de fonctionnalité impressionnant.
|
|
\par
|
|
De la comptabilité à la gestion de la laverie, en passant par le forum ou le Matmatronch', le site de l'AE prend
|
|
actuellement en charge la quasi totalité de la gestion de l'argent, et c'est là un de ces rôles les plus importants.
|
|
\par
|
|
Mais les vieilles technologies qu'il emploie, et le maintient plus ou moins aléatoire, en font un outil très difficile à
|
|
maintenir à l'heure actuelle, et le besoin d'une refonte s'imposait de plus en plus.
|
|
\par
|
|
Le choix de technologies récentes, maintenues, et éprouvée a donc été fait, et le développement a pu commencer dès
|
|
Novembre 2015, avec l'objectif d'une mise en production dans l'été 2016, au moins dans une version incluant
|
|
l'intégralité des fonctions liées à l'argent, qui sont les plus critiques.
|
|
|
|
\chapter{Les technologies}
|
|
\label{cha:les_technologies}
|
|
\par
|
|
C'est là un des choix les plus important lors d'un tel projet, puisqu'il se fait au début, et qu'il n'est ensuite plus
|
|
possible de revenir en arrière. Le PHP vieillissant, et
|
|
piègeux\footnote{\url{https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/}} a donc été mis de côté au profit
|
|
d'un language plus stable, le Python dans sa version 3.
|
|
|
|
\section{Django}
|
|
\label{sec:django}
|
|
\par
|
|
Django est un framework web pour Python, commencé en XXXX, et fournissant un grand nombre de fonctionnalités pour
|
|
développer un site rapidement et simplement. Cela inclut entre autre un serveur Web, pour les échanges HTTP, un parseur
|
|
d'URL, pour le routage des différentes URI du site, un ORM\footnote{Object Relational Model} pour la gestion de la base
|
|
de donnée, ou encore un moteur de template, pour les rendus HTML.
|
|
|
|
\subsection{Les modèles avec l'ORM}
|
|
\label{sub:les_modèles_avec_l_orm}
|
|
|
|
\subsubsection{Le modèle en lui même}
|
|
\label{ssub:Le modèle en lui même}
|
|
|
|
\subsubsection{Les migrations}
|
|
\label{ssub:Les migrations}
|
|
|
|
|
|
\subsection{Les vues}
|
|
\label{sub:les_vues}
|
|
|
|
\subsubsection{Les URL}
|
|
\label{ssub:Les URL}
|
|
|
|
\subsubsection{Les fonctions de vue}
|
|
\label{ssub:Les fonctions de vue}
|
|
|
|
\subsubsection{Des vues basées sur des classes}
|
|
\label{ssub:Des vues basées sur des classes}
|
|
|
|
\section{Jinja2}
|
|
\label{sec:jinja2}
|
|
|
|
% TODO: bases des templates Jinja2
|
|
|
|
|
|
\chapter{Organisation du projet}
|
|
\label{cha:organisation_du_projet}
|
|
|
|
\section{Le repertoire `sith`}
|
|
\label{sec:le_repertoire_sith}
|
|
|
|
\subsection{Les options}
|
|
\label{sub:les_options}
|
|
|
|
% settings.py
|
|
|
|
\chapter{Les applications}
|
|
\label{cha:les_applications}
|
|
|
|
\section{Core}
|
|
\label{sec:core}
|
|
|
|
\section{Subscription}
|
|
\label{sec:subscription}
|
|
|
|
\section{Accounting}
|
|
\label{sec:accounting}
|
|
|
|
\section{Counter}
|
|
\label{sec:counter}
|
|
|
|
\section{Club}
|
|
\label{sec:club}
|
|
|
|
|
|
\chapter*{Conclusion}
|
|
\addcontentsline{toc}{chapter}{Conclusion}
|
|
|
|
\appendix
|
|
\addtolength{\textheight}{60mm}
|
|
\part*{Annexes}
|
|
\addtolength{\topmargin}{-50mm}
|
|
\definecolor{gray75}{gray}{0.75}
|
|
\newcommand{\hsp}{\hspace{20pt}}
|
|
\titleformat{\chapter}[block]{\Huge\bfseries}{\thechapter\hsp\textcolor{gray75}{|}\hsp}{0pt}{\Huge\bfseries}[\vskip -2em]
|
|
|
|
% \chapter{Classe python}
|
|
% \label{python_class}
|
|
% \begin{figure}[H]
|
|
% \begin{lstlisting}[language=python,morekeywords={True,False}]
|
|
% host_to_host = Table("host_to_host", Base.metadata,
|
|
% Column("cluster_id", Integer, ForeignKey("host.host_id"), primary_key=True),
|
|
% Column("node_id", Integer, ForeignKey("host.host_id"), primary_key=True)
|
|
% )
|
|
% class Host(Base):
|
|
% __tablename__ = 'host'
|
|
% host_id = Column(Integer, primary_key=True, nullable=False)
|
|
% groups = Column(String(30), ForeignKey("env.name"))
|
|
% name = Column(String(30), unique=True, nullable=False,
|
|
% default="UNKNOWN HOST")
|
|
% address = Column(String(30), nullable=False, default="0.0.0.0")
|
|
% alias = Column(String(30), nullable=True, default="")
|
|
% state = Column(String(10), nullable=False, default=0)
|
|
% num_services = Column(Integer, nullable=False, default=0)
|
|
% num_services_crit = Column(Integer, nullable=False, default=0)
|
|
% num_services_unknown = Column(Integer, nullable=False, default=0)
|
|
% num_services_warn = Column(Integer, nullable=False, default=0)
|
|
% scheduled_downtime_depth = Column(Integer, nullable=False, default=0)
|
|
% _json_extra = Column(Text, nullable=True)
|
|
% _last_time = Column(DateTime, server_default=func.now(),
|
|
% onupdate=func.current_timestamp())
|
|
% _location = Column(String(4), nullable=True)
|
|
% _nodes = relationship("Host",
|
|
% backref="_clusters",
|
|
% secondary=host_to_host,
|
|
% primaryjoin=host_id==host_to_host.c.cluster_id,
|
|
% secondaryjoin=host_id==host_to_host.c.node_id,
|
|
% )
|
|
% \end{lstlisting}
|
|
% \caption{Classe python}
|
|
% \end{figure}
|
|
% \par
|
|
% On voit bien que l'on définit les attributs de la classe à la manière des colonnes d'une table dans une base de
|
|
% donnée.
|
|
% \par
|
|
% On met aussi ici en place une relation \emph{Many To Many} entre les Hosts à l'aide de la table de jointure définie
|
|
% juste avant: \emph{host\_to\_host}.
|
|
|
|
\end{document}
|
|
|
|
%s/ \(SQLalchemy\|SQLite\)/ \\emph{\1}/
|