Open KokaljAnja opened 1 year ago
Da bo aplikacija delovala na Binderju, bo potrebno poskrbeti, da dobita vse poti s funkcijo url
- tj., pri vseh preusmeritvah in na vseh mestih v predlogah (ponekod to že imata). Tukaj je nekaj takih mest:
https://github.com/UdirL18/Hotel_management-OPB-Projektna-Naloga/blob/7eb8339e731b81fa15c8a57369dc5ccaad8fdeb8/Hotel_management.py#L60
https://github.com/UdirL18/Hotel_management-OPB-Projektna-Naloga/blob/7eb8339e731b81fa15c8a57369dc5ccaad8fdeb8/views/prijava.html#L67
https://github.com/UdirL18/Hotel_management-OPB-Projektna-Naloga/blob/7eb8339e731b81fa15c8a57369dc5ccaad8fdeb8/views/base.html#L50-L51
Če prav vidim, bo to potrebno narediti tudi tukaj:
https://github.com/UdirL18/Hotel_management-OPB-Projektna-Naloga/blob/7eb8339e731b81fa15c8a57369dc5ccaad8fdeb8/views/base.html#L69-L73
Če se nizi v seznamu zavihki
ujemajo z imeni ustreznih funkcij (nisem preveril), potem lahko naredita enostavno tako:
<a class="navbar-item {{'is-active' if zavihek == izbrani_zavihek else ''}}" href="{{url(zavihek)}}">
Sicer pa imam še nekaj pripomb:
Tudi pri obstoječih obrazcih naj bodo pri izbirnih poljih podatki identificirani z ID-ji - pridobita pa jih iz baze. Npr. pri prikazu obrazca za dodajanje zaposlenega pridobita podatke o hotelih in oddelkih iz baze:
@get('/dodaj_zaposlenega')
def dodaj_zaposlenega():
cur.execute("SELECT hotel_id, ime_hotela FROM hotel_podatki")
hoteli = cur.fetchall()
cur.execute("SELECT oddelek_id, oddelek_ime FROM oddelek")
oddelki = cur.fetchall()
return template('dodaj_zaposlenega.html', hoteli=hoteli, oddelki=oddelki, zaposleni_id='',
ime='', priimek='', naziv='', telefonska_stevilka='', email='', oddelek_id='',
naslov_id='', hotel_id='', username='', password='', napaka=None)
Potem v obrazcu prikažeta dobljene podatke:
<div class="form-row">
<div class="form-group col-md-6">
<label for="hotel">Izberi hotel:</label>
<select name="hotel" id="hotel">
%for id, ime in hoteli:
<option value="{{id}}">{{ime}}</option>
%end
</select>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="oddelek">Izberi oddelek:</label>
<select name="oddelek" id="oddelek">
%for id, ime in oddelki:
<option value="{{id}}">{{ime}}</option>
%end
</select>
</div>
</div>
Tako bosta v obrazcu dobili ustrezne ID-je, ki jih vama ni potrebno posebej iskati s poizvedbami.
naslov
dasta omejitev UNIQUE
na stolpce mesto
, posta
, drzava
skupaj (tj., da se noben naslov ne ponovi), samo dodajanje naslovov pa izvedeta tako, da poskusita naslov dodati, ob napaki (tj., če že obstaja) pa pridobita njegov ID:
try:
cur.execute("""INSERT INTO naslov
(mesto, posta, drzava)
VALUES (%s, %s, %s)
RETURNING naslov_id""",
(mesto, posta, drzava))
naslov_id, = cur.fetchone()
conn.commit() # lahko se zgodi tudi kasneje, po dodajanju zaposlenega/gosta
except psycopg2.DatabaseError:
conn.rollback()
cur.execute("""SELECT naslov_id FROM naslov
WHERE mesto = %s AND posta = %s AND drzava = %s""",
(mesto, posta, drzava))
naslov_id, = cur.fetchone()
Tak pristop sicer ni idealen, saj bi se lahko zgodilo, da se ustrezen vnos pobriše iz baze med poskusom dodajanja in poskusom pridobivanja ID-ja.
registracija_post
imata dve nevarni poizvedbi - z vstavljanjem podatkov z f
-nizom namreč odpreta možnost za napade SQL injection. Namesto tega podatke v poizvedbi vstavita s %s
, tako kot drugod.Pozdravljeni,
sedaj sva s kolegico Anjo uredile Binder in upoštevale nekaj izboljšav, ki ste nama jih predlagali. Projektno nalogo bi rade oddale v ocenjevanje.
Lep pozdrav, Lucija Udir
V redu, bom dodal povezavo na repozitorij predmeta. Če se še nista, se lahko z @alenFMF domenita za termin zagovora. Če bosta do takrat še kaj spreminjali, mi javita, da posodobim povezavo.
Pozdravljeni,
zaradi poravkov v kodi bi prosila za posodobitev povezave.
Lep pozdrav, Lucija Udir
V redu, sem posodobil povezavo.
Pozdravljeni,
zahvaljujem se vam za vso pomoč. Trenutno nama samo še binder ne dela in naju zanima, kako bi to lahko popravile. Sicer pa bi projektno nalogo že oddali na ocenjevanje.
Lp, Anja Kokalj