Skip to content

PyWebIO vs. Flask

Python3
  • Seit einigen Monaten, entwickle ich zum Lernen mit Flask. Davor habe ich schon mal PyWebIO eingesetzt. Beides sind Webframeworks. Was sind so meine Gedanken dazu.

    Code Beispiel PyWebIO

    @use_scope('backup')
        def backup():
            clear_scope()
            BackupList.load_json()
    
            # we build header and tdata for table
            tab_init = []
    
            # Print data from backups
            for count, value in enumerate(backups):
                # print("Control", count, backups[value].name)
    
                if count == 0:
                    tab_init.append(['No.', 'Backup name of the restic data backup', 'Actions'])
    
                if backups[value].init == "1":
                    button_list = {"label": 'Init', "value": 'Init', "color": 'primary', "disabled": True}
                    tab_init.append([count + 1,
                                     backups[count].name,
                                     put_buttons([
                                          button_list],
                                         onclick=partial(actions, count + 1))
                                     ])
                else:
                    button_list = {'label': 'Init', 'value': 'Init', 'color': 'primary', "disabled": False}
                    tab_init.append([count + 1,
                                     backups[count].name,
                                     put_buttons([
                                          button_list],
                                         onclick=partial(actions, count + 1))
                                     ])
    

    PyWebIO - Pro

    Contra

    • Nur für kleine Projekte geeignet
    • Kleine Community

    Code Beispiel Flask

    @home.route('/dashboard', methods=['GET'])
    @login_required
    def dashboard():
        refreshed = False
        refreshed = 'refreshed' in request.args
        # print("Refreshed", refreshed)
    
        data2 = all_data.get_all_stocks()
    
        data = sorted(data2.values(), key=lambda x: x['name_stock'], reverse=False)
    
        sums = []
        total_sum = all_data.get_total_sum('total_sum')
        sums.append(float(total_sum) if total_sum is not None else 0.0)
        old_total_sum = all_data.get_total_sum('old_total_sum')
        sums.append(float(old_total_sum) if total_sum is not None else 0.0)
        # print("SUMS", sums)
    
        return render_template('dashboard.html',
                               refreshed=refreshed,
                               data=data,
                               sums=sums,
                               active_menu='dashboard',
                               test_mode=config.TEST_MODE)
    

    Flask - Pro

    • Auch für große Projekte geeignet
    • Gute Dokumentation
    • Große aktive Community

    Contra

    • Leider muss man sich auch viel mit HTML, CSS & Javascript beschäftigen

    Fazit

    An PyWebIO hat mir sehr gut gefallen, das man so ziemlich alles mit Python Code machen kann, bis man an die Grenzen stößt. Mit Flask kann man wesentlich komplexere Webanwendungen bauen, dank Blueprints kann man das auch ordentlich strukturieren. Was mich sofort an Flask genervt hat ist, das man nun wieder HTML, CSS & Javascript drauf haben sollte. Aber, das ist halt auch der große Vorteil gegenüber PyWebIO, man ist wesentlich flexibler.

    Ich habe mir vorgenommen, mein vorhandenes Projekt ResticUI auf Flask umzubauen. Mal schauen, wie sich das so entwickelt. Mein aktuelles privates Flask Projekt (portfolio) ist mittlerweile gut ausgereift ist aber leider zu sehr auf meine privaten Anforderungen zugeschnitten, so dass ich es nicht public stellen kann. Evtl. baue ich das später mal entsprechend um.

    Happy Coding!

  • Mist, jetzt habe ich auch noch Streamlit gefunden. Jetzt geht mir langsam die Zeit aus...

  • 0 Stimmen
    5 Beiträge
    143 Aufrufe
    FrankMF

    Hab ChatGPT nochmal nach der Installation auf einem Production Server befragt.

    ChatGPT

    Certainly! Here's a short example of the steps you can follow to deploy a Flask application on a production server using Nginx and Gunicorn:

    Prepare your server:

    Set up a server (e.g., using a cloud provider like AWS, DigitalOcean, or a dedicated server) and ensure it has a clean, up-to-date installation of a Linux distribution (e.g., Ubuntu or CentOS).

    Install required software:

    Install necessary software packages on your server. You'll need Python, pip (Python package manager), Nginx, and Gunicorn. You can use your distribution's package manager (e.g., apt for Ubuntu or yum for CentOS) to install these dependencies.

    Deploy your Flask application:

    Copy your Flask application code and any required dependencies to your server.

    Set up a virtual environment (optional but recommended):

    Create a virtual environment for your Flask application to isolate its dependencies. You can use venv or virtualenv for this purpose.

    Install Flask and any required Python packages within your virtual environment:

    pip install flask

    Test your Flask application:

    Ensure your Flask application runs correctly within your server's virtual environment.

    Configure Gunicorn:

    Create a Gunicorn configuration file (e.g., gunicorn_config.py) to specify the settings for running your Flask application. Here's a simple example: workers = 4 # Number of Gunicorn worker processes bind = '0.0.0.0:8000' # The address and port Gunicorn should listen on

    Start Gunicorn:

    Start Gunicorn with your Flask application: gunicorn -c gunicorn_config.py your_app:app

    Configure Nginx:

    Create an Nginx server block (often located in /etc/nginx/sites-available) to define how Nginx should handle incoming requests. Here's a simplified example: server { listen 80; server_name your_domain.com www.your_domain.com; location / { proxy_pass http://127.0.0.1:8000; # Pass requests to Gunicorn proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

    Enable the Nginx server block and restart Nginx:

    sudo ln -s /etc/nginx/sites-available/your_config /etc/nginx/sites-enabled/ sudo nginx -t # Test Nginx configuration sudo systemctl restart nginx

    Configure your DNS:

    Point your domain name to your server's IP address.

    Secure your server (optional but recommended):

    Set up SSL/TLS certificates for your domain to enable HTTPS. You can use Let's Encrypt for free SSL certificates.

    Monitor your application:

    Set up monitoring tools and logs to keep track of your application's performance and troubleshoot any issues.

    These are the basic steps to deploy a Flask application on a production server with Nginx and Gunicorn. Please note that this is a simplified example, and there are many additional considerations, such as database configuration, security, and optimization, depending on your specific application and requirements. It's also important to keep your server and software up to date and follow security best practices to ensure the stability and security of your production environment.

    Das werde ich doch mal ausprobieren 😎

  • Debian 12 Bookworm - Release 12.1

    Linux
    1
    0 Stimmen
    1 Beiträge
    99 Aufrufe
    Niemand hat geantwortet
  • Restic UI - PyWebIO

    Python3
    3
    0 Stimmen
    3 Beiträge
    251 Aufrufe
    FrankMF

  • 2,5G

    Linux
    2
    0 Stimmen
    2 Beiträge
    133 Aufrufe
    FrankMF

    Gutes Video zum Zyxel Switch, was ich vorher gar nicht kannte. Hätte meine Entscheidung aber auch nicht verändert.

  • Mainline 5.13.x

    Images
    1
    0 Stimmen
    1 Beiträge
    176 Aufrufe
    Niemand hat geantwortet
  • Armbian Images

    Armbian
    1
    0 Stimmen
    1 Beiträge
    256 Aufrufe
    Niemand hat geantwortet
  • Kopia - Aufbau und Funktionsweise

    Kopia
    1
    0 Stimmen
    1 Beiträge
    747 Aufrufe
    Niemand hat geantwortet
  • Kopia - HTTP/S Server

    Verschoben Kopia
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    FrankMF

    Ich hatte ein paar Probleme, die ich mir teilweise nicht erklären kann 🤔

    Ich möchte den Kopia Server gerne über systemd steuern.

    SystemD [Unit] Description=Kopia Server After=syslog.target After=network.target [Service] Type=simple User=kopia Group=kopia ExecStart=/usr/bin/kopia server --tls-cert-file /home/kopia-server/fullchain.pem --tls-key-file /home/kopia-server/privkey.pem --htpasswd-file /home/kopia-server/.htpasswd --address <IPv4>:51515 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

    Danach

    systemctl daemon-reload systemctl start kopia-server

    Mit

    systemctl status kopia-server

    kann man sich den Status anzeigen lassen.

    Client Rechner

    Auf dem Client, der das Backup zum Server schicken soll, machen wir dann folgendes.

    USER@HOSTNAME:~$ kopia repo connect server --url=https://<DOMAIN>:51515 --override-username=USER --override-hostname=HOSTNAME Enter password to open repository: Connected to repository API Server. NOTICE: Kopia will check for updates on GitHub every 7 days, starting 24 hours after first use. To disable this behavior, set environment variable KOPIA_CHECK_FOR_UPDATES=false Alternatively you can remove the file "/home/frank/.config/kopia/repository.config.update-info.json".

    Danach steht die Verbindung und wir können Backups hochschieben.

    kopia snapshot create $HOME

    Damit wird das Homeverzeichnis gesichert. Das initiale Backup, hat 30 Minuten gebraucht.

    created snapshot with root kb9e50ff5xxxxxxxxxx265d40a5d0861 and ID cda5c0ffxxxxxxxxxxxxxxa4cb4a367b in 30m28s

    Ein späteres Backup, sieht so aus.

    USER@HOSTNAME:~$ kopia snapshot create $HOME Snapshotting USER@HOSTNAME:/home/frank ... * 0 hashing, 51 hashed (324.8 MB), 8524 cached (6.6 GB), 0 uploaded (0 B), 0 errors 100.0% Created snapshot with root kc20a4xxxxxxxxxxxx745c6c7b37c and ID d7a96eaxxxxxxxxxxx0961018eacffa in 3m12s

    Nach 3 Minuten durch. Zu diesem Zeitpunkt hat sich aber auch nicht wirklich was geändert!

    Fazit

    Das Tool macht immer noch einen sehr guten Eindruck. Die Geschwindigkeit ist sehr gut. Die Anleitung ist leider unzureichend. Da gibt es so viele Möglichkeiten, da braucht es sehr lange, bis man da mal durchsteigt. Zum Glück, ist das was man normalerweise braucht, recht überschaubar. Bis zum produktiven Einsatz braucht das aber bei mir noch eine Menge mehr Tests.

    Was ich noch testen möchte

    Verzeichnis mounten Backup testweise wieder herstellen (zumindestens teilweise)

    Der Test läuft mit Standard Einstellungen, also z.B. ohne Kompression. Das sollte man dann auch mal testen..

    Bitte achtet auf gleiche Versionen auf dem Clienten, wie auf dem Server. Ich meine da ein paar Probleme festgestellt zu haben...