3
3
4
4
from django .contrib .auth import authenticate , login , logout
5
5
from django .shortcuts import render , redirect
6
-
7
- # Create your views here.
8
6
from django .views .decorators .csrf import csrf_protect
9
7
10
8
from recommender_webapp .common import lightfm_manager , constant
13
11
from recommender_webapp .models import Comune , Distanza , Place , Mood , Companionship , Rating , User , Profile , Event
14
12
15
13
14
+ """
15
+ Login:
16
+ La view permette l'autenticazione dell'utente. Successivamente all'autenticazione, viene verificato il numero di rating
17
+ effettuati dall'utente. Se quest'ultimo risulta essere inferiore al numero di rating necessari per effettuare la
18
+ configurazione del profilo, allora l'utente viene reindirizzato alla pagina della configurazione. In caso contrario,
19
+ viene reindirizzato alla pagina principale.
20
+ """
16
21
@csrf_protect
17
22
def user_login (request ):
18
23
if request .POST :
@@ -36,11 +41,23 @@ def user_login(request):
36
41
return render (request , '404.html' )
37
42
38
43
44
+ """
45
+ Logout:
46
+ La view permette il logout dell'utente. Successivamente al logout si viene reindirizzati alla pagina principale.
47
+ """
39
48
def user_logout (request ):
40
49
logout (request )
41
50
return redirect ('/' )
42
51
43
52
53
+ """
54
+ Signup:
55
+ La view permette la registrazione di un nuovo utente. All'utente standard di Django, vengono linkate ulteriori
56
+ informazioni, racchiuse all'interno del model Profile, tra cui la città. In fase di signup è essenziale che l'utente
57
+ fornisca la sua città (location). La location è importante per poter recuperare i posti nelle vicinanze in fase di
58
+ configurazione del profilo utente e poter effettuare post-filtering sulle raccomandazioni fornite da LightFM. Al
59
+ termine della procedura di signup, l'utente viene reindirizzato alla pagina principale.
60
+ """
44
61
@csrf_protect
45
62
def user_signup (request ):
46
63
user_form = UserRegisterForm (request .POST or None )
@@ -69,6 +86,26 @@ def user_signup(request):
69
86
return render (request , "signup.html" , context )
70
87
71
88
89
+ """
90
+ Configurazione del profilo utente:
91
+ La view, prima di procedere con la visualizzazione della pagina di configurazione del profilo utente, verifica il
92
+ numero di rating effettuati dall'utente. Se quest'ultimo risulta essere inferiore al numero di rating necessari per la
93
+ configurazione del profilo utente, allora l'utente non ha ancora concluso la procedura di configurazione, per cui viene
94
+ calcolata la percentuale di completamento della procedura. In caso contrario, la procedura è stata completata, quindi
95
+ viene aggiornato il campo first_configuration presente nella tabella del profilo utente e si viene reindirizzati alla
96
+ pagina principale.
97
+ In questa prima versione del sistema, i contesti considerati sono 6, dati dalla combinazione delle variabili mood
98
+ (angry, joyful, sad) e companionship (withFriends, alone). Per ciascun contesto, l'utente deve scegliere 3 luoghi,
99
+ necessari per costruire il suo profilo utente e fornirgli raccomandazioni. Di volta in volta, l'utente ha la
100
+ possibilità di scegliere tra quelli che sono i luoghi a lui più vicini (range di 10KM).
101
+ IMPORTANTE: in questa prima versione del sistema, per ciascun contesto l'utente seleziona posti differenti, cioè un
102
+ luogo non può essere selezionato in più contesti. Infatti, di volta in volta vengono restituiti i luoghi non ancora
103
+ selezionati. Questa scelta è stata effettuata per meglio verificare i risultati restituiti da LightFM, dato che si
104
+ tratta di un modello implicito (quindi non considera i rate forniti dall'utente, piuttosto sfrutta le features dei luoghi).
105
+ Ciò non toglie che la procedura può essere impostata per consentire all'utente di scegliere il medesimo luogo in
106
+ contesti differenti (ed è sensato, dato che una persona potrebbe preferire un luogo etichettato come MANGIARE e BERE,
107
+ sia in un contesto JOYFUL-WITHFRIENDS, sia in un contesto ANGRY_WITHFRIENDS)
108
+ """
72
109
def profile_configuration (request ):
73
110
if request .user .is_authenticated :
74
111
@@ -150,6 +187,14 @@ def profile_configuration(request):
150
187
return render (request , "profile_configuration.html" , context )
151
188
152
189
190
+ """
191
+ Selezione di un luogo durante la procedura di configurazione del profilo utente:
192
+ La view consente l'aggiunta di un luogo al proprio profilo utente, considerando il mood e la companionship.
193
+ In questa prima versione del sistema l'utente non fornisce un rate numerico al luogo in quanto LightFM implementa un
194
+ modello implicito, per cui non si basa sui punteggi forniti dall'utente. Ciò non toglie che il campo rating contenente
195
+ il punteggio potrebbe essere utile in futuro. In questo caso, viene assegnato un rating di default. In seguito l'utente
196
+ viene reindirizzato alla pagina della configurazione del profilo.
197
+ """
153
198
def add_rating_config (request , place_id , mood , companionship ):
154
199
if request .user .is_authenticated :
155
200
@@ -165,6 +210,10 @@ def add_rating_config(request, place_id, mood, companionship):
165
210
return redirect ('/' )
166
211
167
212
213
+ """
214
+ Visualizzazione dei luoghi vicini all'utente:
215
+ La view consente la visualizzazione dei luoghi vicini all'utente in un range di km che può essere di 5 oppure 10 KM.
216
+ """
168
217
def close_places (request ):
169
218
context = {}
170
219
close_places = []
@@ -203,6 +252,11 @@ def close_places(request):
203
252
return render (request , 'places.html' , context )
204
253
205
254
255
+ """
256
+ Visualizzazione dei luoghi del profilo utente, per ciacun contesto:
257
+ La view consente la visualizzazione dei luoghi appartenenti al proprio profilo utente, cioè i luoghi selezionati per
258
+ ciascun contesto (in questo caso i 6 contesti generati dalle combinazioni di Mood e Companionship).
259
+ """
206
260
def my_places (request ):
207
261
context = {}
208
262
my_places = []
@@ -230,6 +284,25 @@ def my_places(request):
230
284
return render (request , 'my_places.html' , context )
231
285
232
286
287
+ """
288
+ Visualizzazione dei dettagli di un luogo:
289
+ La view consente di visualizzare i dettagli di un luogo ed eventualmente aggiungerlo al proprio profilo utente. In
290
+ questa prima versione del sistema l'aggiunta del luogo al proprio profilo utente, specificando Mood e Companionship, è
291
+ possibile solo se non è stato aggiunto in precedenza con qualche altro contesto. Tuttavia, questo non vieta che la
292
+ procedura descritta nel seguente metodo possa essere impostata per aggiungere il luogo ad un contesto nonostante sia
293
+ stato già aggiunto in altri contesti (ad esempio, un utente che preferisce un luogo sia nel contesto Joyful e
294
+ WithFriends, sia nel contesto Angry e WithFriends).
295
+ Quando un utente decide di aggiungere un luogo al proprio profilo sotto un contesto specifico, è necessario fornire tale
296
+ informazione anche al modello di LightFM. In tal caso non è necessario ricalcolare il modello, ma è sufficiente
297
+ fornire la relazione aggiuntiva (ID UTENTE - ID LUOGO). Il metodo responsabile di questa operazione è add_rating del
298
+ modulo lightfm_manager.
299
+ L'ID utente utilizzato da LightFM, e quindi passato al metodo add_rating, è una stringa che si costituisce
300
+ delle seguenti componenti: (ID utente in Django incrementato di 100) + ID mood + ID companionship. Ad esempio, se l'id
301
+ utente in django è 4, l'ID mood è 2 e l'ID companionship è 1 allora la stringa rappresentante l'utente è: 10421. L'id
302
+ utente di django viene sommato a 100 in quanto gli utenti da 1 a 100 sono già presenti nel dataset di LightFM (vedi
303
+ data/users.csv e ratings_train.csv).
304
+ Inoltre, la seguente view fornisce anche informazioni su eventuali eventi che si svolgeranno nel luogo in questione.
305
+ """
233
306
def place_details (request , place_id ):
234
307
context = {}
235
308
if request .user .is_authenticated :
@@ -282,6 +355,10 @@ def place_details(request, place_id):
282
355
return render (request , 'place.html' , context )
283
356
284
357
358
+ """
359
+ Visualizzazione dei dettagli su un evento:
360
+ La view consente di visualizzare i dettagli di un evento, come il nome, la location, le etichette ed informazioni varie.
361
+ """
285
362
def event_details (request , event_id ):
286
363
context = {}
287
364
if request .user .is_authenticated :
@@ -297,6 +374,12 @@ def event_details(request, event_id):
297
374
return render (request , 'event.html' , context )
298
375
299
376
377
+ """
378
+ Visualizzazione del profilo utente:
379
+ La view consente di visualizzare il proprio profilo utente ed eventualmente effettuare modifiche. All'interno del
380
+ relativo template è stato inserito il button "Link to Myrror", che potrebbe essere utile in futuro per prelevare le
381
+ informazioni sul profilo utente utilizzando le api di Myrror.
382
+ """
300
383
def user_profile (request ):
301
384
302
385
context = {
@@ -309,8 +392,6 @@ def user_profile(request):
309
392
instance = Profile .objects .get (user = request .user )
310
393
full_profile_form = FullProfileForm (request .POST or None , instance = instance )
311
394
context ['form' ] = full_profile_form
312
- # initial_mood = (Mood.joyful.name, Mood.joyful.value)
313
- # search_rec_form.fields['mood'].initial = initial_mood
314
395
315
396
if full_profile_form .is_valid ():
316
397
location = full_profile_form .cleaned_data .get ('location' )
0 commit comments