-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
62 lines (50 loc) · 2.51 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env python
# -*- coding: utf-8 -*-
""" l'application peut être lancé de cette façon:
$ uvicorn main:app --reload
"""
#=== les librairies importées
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from fastapi.responses import HTMLResponse
from scripts import dico
import regex
#=== les fonctions extérieures
def util_get_infos(sentence: str):
""" permet d'obtenir un dictionnaire contenant les informations demandées
Args:
sentence (str): la phrase rentrée par l'utilisateur, peut-être également
un mot ou un caractère
"""
return dico.main(sentence)
#=== initialisation de l'application
app = FastAPI() # initialisation de l'app
templates = Jinja2Templates(directory="templates") # active le moteur de template Jinja et indique l'emplacement des templates HTML
app.mount("/static", StaticFiles(directory="static"), name="static") # indique l'emplacement des fichiers statiques (images, css)
#=== les root app.get affichent les templates
@app.get("/")
async def root(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
@app.get("/about")
async def about(request: Request):
return templates.TemplateResponse("about.html", {"request": request})
#=== les root app.post et app.get transmettent/gèrent les données
# 'app.get' nous sert à vider le cache quand l'utilisateur clique sur Dictionnaire DWJ ou Home
@app.get("/", response_class=HTMLResponse)
async def root(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
@app.post("/", response_class=HTMLResponse)
async def root(request: Request):
# on récupère les valeurs du formulaire
form_data = await request.form()
tokens = form_data.get('tokens') # valeur du champ name 'tokens' dans le formulaire
# on vérifie que ce soit bien du chinois
if not regex.match(r"[\p{Han}\p{Bopomofo}]+", tokens, regex.UNICODE):
# en cas d'erreur, il y aura un message pour l'utilisateur
return templates.TemplateResponse("index.html", {"request": request, "error": "not chinese"}) # renvoie une liste vide
# sinon, on continue
infos, cntype = util_get_infos(tokens) # appel à la fonction extérieure pour gérer l'ajout dans la BDD
print(infos) # affiche sur le terminal pour le debuggage
print("TYPE/", cntype)
return templates.TemplateResponse("index.html", {"request": request, "results": infos, "cntype": cntype})