FLASK problemy z pobieraniem danych z api

0

Cześć, kiedy użytkownika nie ma w bazie danych jest zmuszony do wypełnienia forma w którym uzupełnia swoje godziny konsultacji, następnie powinien być dodawany do bazy danych, ale kiedy ten if jest spełniony idzie od nowa po całości funkcji i nie pobiera już poprawnie danych tylko wypluwa None i brak jsona.
if User.query.filter_by(email=teacherJson['email']).first() is None:

@teacher.route('/dashboardTeacher', methods=['GET', 'POST'])
def dashboard():
    form = TeacherRegistrationForm()
    roomId = request.form.get('roomId')
    token = request.form.get('roomAuthtoken')
    print(roomId)
    print(token)
    # login = request.args.get('login')
    # loginUrlResult = requests.post(
    #     'http://localhost/Projekt-inzynierski/API/UsersByLogin.php?login={}'.format(login))

    # roomIdUrlResult = requests.post(
    #     'https://s153070.projektstudencki.pl/API/UsersByRoom.php?roomId={}'.format(roomId))
    roomIdUrlResult = requests.post(
        'http://localhost/API/UsersByRoom.php?roomId={}&token={}'.format(roomId, token))

    try:
        teacherJson = roomIdUrlResult.json()

    except:
        print("roomId or token wrong")

    print(teacherJson)
    # teacher = User.query.filter_by(email=teacherJson['email']).first()

    if request.method == 'POST':
        if request.form.get("submit"):
            user = User(name=teacherJson['name'],
                        surname=teacherJson['surname'],
                        date=str(form.date.data),
                        time=str(form.time.data),
                        end_time=str(form.end_time.data),
                        email=teacherJson['email'],
                        password='',
                        permission=Permission.TEACHER)
            db.session.add(user)
            db.session.commit()
        if request.form.get("accept"):
            id = request.form['accept']
            entry = Entry.query.filter_by(id=id).first()
            entry.decision = Decision.ACCEPT
            db.session.commit()
        if request.form.get("decline"):
            id = request.form['decline']
            entry = Entry.query.filter_by(id=id).first()
            entry.decision = Decision.DECLINE
            db.session.commit()

    #  prowadzacy1 = User.query.filter_by(email='[email protected]').first() -> prowadzacy1.date
    if User.query.filter_by(email=teacherJson['email']).first() is None:
        return render_template('user/register.html', form=form)
    else:
        print("prowadzacy istnieje")

output w konsoli

2
861d2ab10a18a902f21c311f65daf26c
{'login': 'pracownik1', 'name': 'Pracownik', 'surname': 'Admin', 'email': '[email protected]', 'token': 'd53b96a40c9497d18ecd83f3ba30b9d1'}
None
None
roomId or token wrong

output w przeglądarce:
UnboundLocalError: local variable 'teacherJson' referenced before assignment

1

Może zrób definicje tej zmiennej teacherJson przed blokiem try except tzn. najpierw przypisz do niej jakiś pusty słownik, a później i tak nadpiszesz zmienną.

0

Co to za strzał do localhosta w 15 linii - czy to inny serwis czy ten sam? Jak ten sam to wygląda to na mega złą rzeźbę. Jeśli inny to luz, ale zawsze można to zrobić "eleganciej" ;)

0

Ktoś coś? :(

0

Zmienne roomId i token, a następnie request pobierający dane do zmiennej teacherJson, powinny być deklarowane w ifie
request.method == 'POST', a po obsłużeniu posta w formularzu powinien być redirect.

Zauważ, że gdy renderujesz widok z pustym formularzem, to nie masz wartości ani w zmiennej token, ani roomId, a więc i request wymagający tych danych kończy się wyjątkiem. Tym samym ponowna deklaracja zmiennej teacherJson nie ma miejsca - stąd też wyjątek w przeglądarce.

1 użytkowników online, w tym zalogowanych: 0, gości: 1