17 kwi 2017

Raport z placu boju - 7 tydzień DSP

Upłynął kolejny tydzień, więc pora na raport co z moim projektem konkursowym.

Ostatnio pisałem, że nie mogę dodać operacji w API które modyfikują bazę, dopóki nie będę mógł w jakiś sposób uwierzytelniać i autoryzować użytkowników. Naturalnie otwierałoby to możliwość zmian każdemu użytkownikowi w każdym portfelu. Nie chciałem pisać całego modułu użytkowników, logowanie przez Facebook czy innego dostawcę też wydawało się czasochłonne jak na potrzeby prostego demo do którego dążę. Zdecydowałem się na tymczasowe rozwiązanie w postaci tokenów. Założenie tego rozwiązania są następujące:
  • użytkownik odwiedza stronę bez tokena - dostaje informację o projekcie, być może wyświetla mu się przykładowy portfel
  • użytkownik bez tokena robi akcję na stronie (np. założenie swojego portfela) - jest generowany dla niego token, który zostaje dopisany do adresu url strony
  • użytkownik odwiedza stronę z tokenem w url - widzi swój portfel
System jest prosty (można by nawet powiedzieć, że prostacki), ale spełni swoje zadanie na ten moment. Jest otwarty na udoskonalenia (np. token można zapisać w cookie zamiast url), po dodaniu innego systemu uwierzytelnienia można go łatwo zintegrować z nowym rozwiązaniem. No i najważniejsza jego zaleta - mieści się w kilku liniach kodu
@app.route("/token", methods=['GET', 'POST'])
def token():
    if request.method == 'POST' and 'token' in request.json:
        query = "INSERT INTO user (Token, Admin) VALUES ('{0}', 0)"
        query = query.format(request.json['token'])
        try:
            insertedId = insertToDb(query)
            return jsonify(userid=insertedId, error=None)
        except:
            error = "Error: unable to insert token"
            return jsonify(userid=None, error=error)
    else:
        return jsonify(token=uuid.uuid4())
        
def insertToDb(query):
    cursor = mysql.connection.cursor()
    cursor.execute(query)
    mysql.connection.commit()
    return cursor.lastrowid

Drugą zmianą z ubiegłego tygodnia jest pojawienie się serwisu, który ma automatycznie pobierać i zapisywać kursy funduszy inwestycyjnych. Tydzień temu wspomniałem, że udało mi się znaleźć na stronie TFI Nationale-Nederlanden adres pod jakim są dostępne pliki json z potrzebnymi mi danymi. Dodany przeze mnie do projektu DataDownloader wykorzystuje te właśnie adresy i dla trzech przykładowych funduszy pobiera i zapisuje pliki z wartościami funduszy w czasie. Do zrobienia pozostaje interpretacja tych danych i wysłanie ich do zapisu do API, a kolejne kroki to dodanie pobierania dla innych TFI. Nie wiem jednak od jakich zacząć, więc daj proszę znać w komentarzu pod tym postem na jakich funduszach by Ci zależało.

0 komentarze:

Prześlij komentarz