gapo8 / NBA

MIT License
0 stars 0 forks source link

zaključevanje projekta #2

Open gapo8 opened 2 years ago

gapo8 commented 2 years ago

Pozdravljeni, prosil bi za pregled projekta ter komentar če je potrebno še kaj narediti.

majbc1999 commented 2 years ago

Živjo! Sem malo pregledal vajin projekt in nisem našel kakšnih bugov oz. težav. Edino, kar pogrešam je:

Verjamem, da vama dodajanje teh dveh stvari ne bo vzelo preveč časa. Glede ostalega sem zadovoljen: oblikovanje je dobro, vse dela brez težav.

majbc1999 commented 2 years ago

Pravzaprav imam še eno pripombo tehnične narave: redirecte trenutno uporabljata tako, da mu podata naslov. Lokalno sicer dela, vendar je potrebno projekt na koncu zagnati tudi na Binderju. Zato bosta redirecte povsod morala podati s pomočjo funkcije url.

Na primer, trenutno imata tako:

@post('/prijava/')
def prijava_post():
    ...
    redirect('/zacetna/')

Pravilno morata narediti tako, da v funkcijo url podata ime funkcije iz NBA.py, na katero se želite redirectati.

@post('/prijava/')
def prijava_post():
    ...
    redirect(url('izacetna'))

Podobno morata storiti tudi v .html-jih. Trenutno imata, na primer:

<div>
  <p class="lead">Statistični podatki igralcev:</p>
<p>
  <a href='/igralci_statistika_19_20/'><button class="btn btn-outline-dark">2019-2020</button></a>
  <a href='/igralci_statistika_20_21/'><button class="btn btn-outline-dark">2020-2021</button></a>
  <a href='/igralci_statistika_21_22/'><button class="btn btn-outline-dark">2021-2022</button></a> 
</p>
</div>

Pravilno bi bilo:

<div>
  <p class="lead">Statistični podatki igralcev:</p>
<p>
  <a href="{{url('igralci_statistika_19_20_get')}}"><button class="btn btn-outline-dark">2019-2020</button></a>
  <a href="{{url('igralci_statistika_19_20_get')}}"><button class="btn btn-outline-dark">2020-2021</button></a>
  <a href="{{url('igralci_statistika_19_20_get')}}"><button class="btn btn-outline-dark">2021-2022</button></a> 
</p>
</div>

Lahko si tudi pogledata, kako so redirecte naredili ostali, na primer https://github.com/nezakrzan/Nepremicninske-agencije

gapo8 commented 2 years ago

Hvala za odgovor. V večini primerov je popravljeno s funkcijo url. Zanima me kako se to popravi pri funkcijah ki imajo podan argument kot spodaj.

<tr>
       <td>{{ekipa}}</td>
       <td>{{sponzor}}</td>
       <td><a href="/sponzorji/uredi/{{ekipa}}">Uredi sponzorja</a></td>
       <td><a href="/sponzorji/izbrisi/{{ekipa}}">Izbriši vrstico</a></td>
   </tr>
@get('/sponzorji/uredi/<ekipa>')
def uredi_sponzorja_get(ekipa):
    ekipa = ekipa
    return template('sponzorji_uredi.html', ekipa=ekipa)

@post('/sponzorji/uredi/<ekipa>')
def uredi_sponzorja_post(ekipa):
    sponzor = request.forms.sponzor
    ekipa = ekipa
    cur.execute("UPDATE sponzorji SET sponzor=%s WHERE ekipa=%s",
                    (sponzor, ekipa))
    conn.commit()
    redirect(url('sponzorji_get'))
majbc1999 commented 2 years ago

Živjo! Pri spodnjih primerih argumente dodamo kot parametre funkciji url. Seveda mora biti ime parametra enako tistemu, ki ga sprejme funkcija iz NBA.py:

<tr>
       <td>{{ekipa}}</td>
       <td>{{sponzor}}</td>
       <td><a href="{{url('uredi_sponzorja_get', ekipa=ekipa)}}">Uredi sponzorja</a></td>
       <td><a href="{{url('izbrisi_sponzorja_get', ekipa=ekipa)}}">Izbriši vrstico</a></td>
</tr>
gapo8 commented 2 years ago

Mislim da je sedaj vse popravljeno, če pa je še kaj prosim sporočite.

majbc1999 commented 2 years ago

Brisanje in urejanje trenutno ne deluje pravilno. Prva težava je v tem, da bi moglo biti možno dodajati samo "obstoječe" ekipe (torej bi rabil v tabeli sponzor imeti stolpec ekipa referenco na tabelo ekipe_osnovni_podatki, stolpec ekipa). V primeru, ko bi nekdo želel vstaviti v vajino tabelo neobstoječo ekipo, bi torej moralo vrniti neko napako. Drugi problem je, da če dodam ekipi ATL še enega (novega) sponzorja, in ga nato zbrišem, se zbrišeta oba (tudi stari) sponzorja Atlante. Podobno, če urejam prvega sponzorja, želim samo njemu spremeniti ime, trenutno pa vama tako dela, da se spremeni obema. Treba si bo torej shraniti ekipo in sponzorja in ob spreminjanju, nekaj v tem stilu:

@post('/sponzorji/uredi/<ekipa>/<trenutni_sponzor>')
def uredi_sponzorja_post(ekipa, trenutni_sponzor):
    sponzor = request.forms.sponzor
    ekipa = ekipa
    cur.execute("UPDATE sponzorji SET sponzor=%s WHERE ekipa=%s AND sponzor=%s",
                    (sponzor, ekipa, trenutni_sponzor))
    conn.commit()
    redirect(url('sponzorji_get'))

Podobno je seveda treba popraviti tudi delete.

Ko bo to popravljeno, je treba dodati še Binder. To storita tako, da:

Če bodo seveda kakšne težave oz. kaj ni razumljivo, vprašajta.

gapo8 commented 2 years ago

Prosim še za pomoč pri binderju saj zaenkrat ne deluje.

jaanos commented 2 years ago

Kot vidim, je težava tukaj: https://github.com/gapo8/NBA/blob/b61b8a1f4f5c90662e126050c621744599c3f4f1/binder/start#L6 Treba bo vrniti vrednost spremenljivke na 443. PostgreSQL privzeto res teče na vratih 5432, a Binder žal ne dovoli povezave na ta vrata, tako da naš strežnik teče tudi na vratih 443.

gapo8 commented 2 years ago

Hvala sedaj deluje. Še enkrat me zanima ali je potrebno pri projektu še kaj popraviti ali dodati. LP Gašper

jaanos commented 2 years ago

Sedaj projekt večinoma deluje, tako da bom dodal povezavo na repozitorij predmeta. Če se še nista, se lahko z @alenFMF domenita za termin zagovora. Če bosta do takrat še kaj spreminjala, mi javita, da posodobim povezavo.

Opažam sicer, da na Binderju iskanje ne deluje. Težava je tukaj: https://github.com/gapo8/NBA/blob/7244bafc7e67edbae84111ac8fb0cf9643fee25c/views/osnova.html#L15 Tako kot drugod bo treba uporabiti funkcijo url:

<script src="{{url('static', filename='nba.js')}}"></script>

Bi pa pripomnil še nekaj stvari. Trenutno imata potrojene tabele s statistiko igralcev in ekip (za vsako sezono eno) - namesto tega naj bo vsaka od teh tabel samo enkrat, pri čemer referenca na igralca oziroma ekipo ter sezona skupaj sestavljata glavni ključ. Tudi predlog ne potrebujeta za vsako sezono, pač pa lahko naredita eno, ki bo pokrivala vse sezone. Opažam še, da za glavne ključe uporabljata kar imena igralcev in trenerjev, kar ni najboljša praksa - bolje bo, če uporabita ID-je (lahko kar s stolpci tipa SERIAL, da jih bo baza sama generirala), in se potem nanje tudi sklicujeta. Poleg tega v tabeli sponzor manjka glavni ključ - če ima lahko posamezna ekipa (ta naj bo ustrezna referenca) več sponzorjev, potem je morda najbolje, da uvedeta še en stolpec z ID-jem, ki ga lahko potem uporabita tudi pri brisanju (tj., se sklicujeta na ID ter ne na ekipo in sponzorja).