marci314 / NBA-fantasy-app

Web application developed using Python's Bottle framework, PostgreSQL database, and HTML/CSS to manage an NBA fantasy league.
MIT License
0 stars 1 forks source link

binder #1

Closed JoPl19 closed 3 months ago

JoPl19 commented 3 months ago

Živjo, Zataknilo se mi je pri implementaciji binderja v projekt. Po kliku na link v readme filu se odpre, kar kaže slika. Če v terminalu znotraj tega poženem app, ne javi (več) nobene napake, vendar se tudi nič ne zgodi.

Screenshot 2024-08-27 at 01 23 08

Problem je najbrž to, da v html in py datotekah ne kličem funkcije url, ampak ko sem to poskusil storiti, se mi je osnoven app sesul in ni več delal, javi napako bottle.RouteBuildError: ('No route with that name.', 'prijava').

V html datotekah sem '/prijava' spreminjal v "{{url('prijava')}}", v pythonu pa '/prijava' v url('prijava'). Kaj bi moral popraviti?

majbc1999 commented 3 months ago

Živjo,

brez funkcije url Binderja gotovo ne bo pognalo. Treba jo bo torej dodati. Če bo uporaba funkcije pravilno implementirana, bo projekt pognalo tudi na localhostu. Pazi, da kot argument funkciji url podaš ime funkcije iz app_NBA_fantasy.py. Na primer:

return redirect('/homescreen')

spremenimo v

return redirect(url('domov'))

V primeru, ki si ga zgoraj navedel, bo bolj prav url('prijava_get').

Funkcijo url uporabi povsod (v pythonu in htmljih), če kaj ne bo jasno lahko pogledaš, kako so to storili drugi, npr. https://github.com/matevzkusterle/OPB_hospital/tree/main.

Če potem še vedno ne bo delalo, commitaj spremembe na repozitorij in sporoči, da pogledam, kje je problem :D

JoPl19 commented 3 months ago

Oj, sem dodal urlje v branchu poskus, ampak kot prej vrne 'No route with that name'.

majbc1999 commented 3 months ago

Živjo,

Pri pregledu brancha poskus sem našel težave.

  1. bottle.py datoteke ni potrebno imeti v repozitoriju (saj jo lahko vsak inštalira lokalno z pip install bottle). To datoteko izbrišita in v requirements.txt dodajta vrstico "bottle".

  2. bottle objekta ni potrebno inicializirati na začetku datoteke, torej izbrišita vrstice:

    # Inicializacija aplikacije in povezave z bazo
    app = Bottle()
  3. pri vsaki definiciji klica ni nato potrebno klicati @app.get(...), ampak samo @get(...), podobno tudi samo @post(...) in @route(...), na primer:

    @get('/')
    def domaca_stran():
    return template('domaca_stran.html')
  4. na koncu datoteke nato ni potrebno app dati kot argument, torej:

    if __name__ == '__main__':
    run(host='localhost', port=8080, debug=True)

Ko popravita te 4 točke, nato binder še vedno ne bo deloval, saj ročno nastavljata nekatere spremenljivke. Za delovanje binderja želimo, da aplikacija pogleda v okolje in spremeljivke (npr. port) nastavi primarno na vrednosti iz okolja. Zato bo potrebno na začetek dodati vrstice:

import os

SERVER_PORT = os.environ.get('BOTTLE_PORT', 8080)
RELOADER = os.environ.get('BOTTLE_RELOADER', True)

Ustrezno nato spremenimo vrednosti tudi na koncu datoteke:

if __name__ == '__main__':
    run(host='localhost', port=SERVER_PORT, reloader=RELOADER)

Opazil sem tudi, da je v requirements.txt precej standardnih pythonovih packagejev, ki znotraj pythona že po defaultu. Teh ne rabimo. Za pregled, katerih paketov ne rabita, lahko uporabita ta link: https://docs.python.org/3/library/index.html.

Poskusita odpraviti te napake in commitajta. Bomo videli ali bodo potem še težave z Binderjem ali ne.

JoPl19 commented 3 months ago

Hvala za popravke, sem v branchu popravil te stvari in počistil requirements.

Link do binderja v tem branchu:

https://mybinder.org/v2/gh/marci314/NBA-fantasy-app.git/poskus

Se pa še vedno pojavi isto kot tisti screenshot od prej, ko nato izberem terminal in tam poženem py app_NBA_fantasy.py, dolgo melje, potem vrne tole:

Traceback (most recent call last):   File "/home/jovyan/app_NBA_fantasy.py", line 19, in     conn = psycopg2.connect(   File "/srv/conda/envs/notebook/lib/python3.10/site-packages/psycopg2/init.py", line 122, in connect     conn = _connect(dsn, connection_factory=connection_factory, **kwasync) psycopg2.OperationalError: connection to server at "baza.fmf.uni-lj.si" (193.2.67.10), port 5432 failed: Connection timed out         Is the server running on that host and accepting TCP/IP connections?

majbc1999 commented 3 months ago

Živjo,

sem dodal nekaj popravkov in bi sedaj Binder moralo zagnati. Sprejmita zgornji pull request (https://github.com/marci314/NBA-fantasy-app/pull/2) in poskusita ali Binder deluje tudi pri vama (branch poskus).

Slik sicer še ne prikaže na vajini spletni strani, to pa zato, ker za dostop do njih uporabljata pot. Podobno kakor za linke in preusmeritve, je potrebno tudi za slike uporabljati funkcijo url. Vidim, da funkcijo static_files že imata, malo jo bo sicer potrebno popraviti:

@route('/static/<filename:path>')
def static_files(filename):
    return static_file(filename, root='Presentation/static/Images')

Nato je potrebno še povsod v htmljih dodati funkcijo url tudi za prikaz slik, na primer:

<img src="/static/Images/nba-logo.jpg" alt="NBA Fantasy League Logo">

->

<img src="{{url('static_files', filename='nba-logo.jpg')}}" alt="NBA Fantasy League Logo">

Ko vse to popravita, preglejta ali vse deluje na Binderju. Če vse deluje, potem spremembe dodajta na main branch in mi javita, da še vsebinsko pregledam celoten projekt.

JoPl19 commented 3 months ago

Živjo, še mi je ostalo nekaj problemov :( Binder se zdaj pravilno zažene, hvala za pomoč, klicanje linkov po aplikaciji pa je še vedno problematično. Pri odstranjevanju in dodajanju igralcev in trenerjev sva prej uporabila nekaj js, ker mi nikakor ni uspelo tega združiti s pravilnim klicanjem url, sem kodo spremenil, da se gumb ppojavi ob vsakem igralcu posebej. Poskus odstranitve/dodajanja igralca vrže napako 405 oz. napako 500, brez drugih sporočil. Pred vsemi prilagoditvami za binder so stvari delale, nova napaka 405 pa se pojavi tudi, če aplikacijo zaženem lokalno. Prosim za pomoč, kako lahko aplikacijo prilagodiva, da bodo stvari spet delale na binderju, jaz sem bolj kot ne izčrpal svoje ideje.

Za dostop do ekipe, ki že ima nekaj igralcev dodanih v ekipo, lahko uporabite uporabniško ime in geslo "jp"

majbc1999 commented 3 months ago

Živjo, problem je, da je v htmlju funkciji url potrebno posebej poimenovati argumente. Poglejta kaj vse sem popravil v zgornjem PR, mergajta v vajin repo in poskusita, če res vse dela tako kot mora (tako lokalno kakor na binderju). Če dela, sporočita, da še jaz enkrat preverim in potem odobrim projekt.

JoPl19 commented 3 months ago

Sva dodala in mergala, dela :) Commitala sva tudi naknadne manjše popravke, projekt je končan. Hvala za vso pomoč!