PHP in Python übersetzen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Hallo,
ich habe ein kleines php script welches ich für einen webserver in Python brauche. Auf dem Server läuft Python 3.6 und Flask. Kann mir hier vlt. diesen kleinen Code übersetzen.

Code: Alles auswählen

<?php
$timestamp = date("d-m-Y - H:i:s");
$datastring = $_POST["params"];

echo $timestamp;
echo $datastring;
?>
Danke schon mal im Voraus,
Hypec
Benutzeravatar
__blackjack__
User
Beiträge: 13102
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hypec: Woran hängt es denn konkret? Das einzige was die Flask-Dokumentation nicht direkt beantworten dürfte, müsste die Dokumentation des `datetime`-Moduls aus der Python-Standardbibliothek ergänzen können.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Das Script soll Daten, die von einem Arduino über ein Simmodul, in regelmäßigen intervallen, gesendet werden empfangen und dann in eine Liste schreiben welche auf einer kleinen Website ausgegeben werden soll.
Benutzeravatar
__blackjack__
User
Beiträge: 13102
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das beschreibt immer noch kein konkretes Problem und hat auch nicht so wirklich viel mit dem PHP-Quelltext im ersten Beitrag zu tun. Also noch einmal: Was ist denn, nach dem durcharbeiten eines Python-Tutorials, und dem Tutorial in der Flask-Dokumentation, nach dem Hinweis auf das `datetime`-Modul, der Python-Code an dem Du nicht mehr weiter kommst?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Hypec hat geschrieben: Mittwoch 1. August 2018, 16:17

Code: Alles auswählen

<?php
$timestamp = date("d-m-Y - H:i:s");
$datastring = $_POST["params"];

echo $timestamp;
echo $datastring;
?>
Zu deinem Datumsproblem schau mal hier:

Code: Alles auswählen

>>> import datetime
>>> d.strftime("%d-%m-%Y %H:%M:%S")
'02-08-2018 03:01:42''
Zum Flask-Problem - ich habe noch nicht mit Flask gearbeitet (!) - könnte diese Seite helfen:
https://stackoverflow.com/questions/104 ... sk-request

Ich erinnere mich noch gut, wie ich erstmals mit Datumswerten gearbeitet habe und mir dann mit strip, replace usw. aus einem datetime.datetime-Objekt dann einen Datumsstring gebastelt habe :D Ist etwas her. Wahrscheinlich musst du aber dennoch mal ein Tutorial durcharbeiten, die Datumsspielerei sollte eigentlich keine Herausforderung darstellen. Wenn Du es mit noch mehr Python 3-Quelltext zu tuen bekommst und den warten musst: Tutorial durcharbeiten.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Danke ersmal für den code für die Uhrzeit. Mein Hauptproblem die 3. Zeile ist da ich nichts gefunden habe wie ich diese $_Post Variabel in Python schreibe.

Code: Alles auswählen

$datastring = $_POST["params"];
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du mal in die Dokumentation von Flask geschaut, wie da mit POST-Variablen umgegangen wird? Diskutiert zB hier: https://stackoverflow.com/questions/104 ... sk-request
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Ich hab den Datumscode hier in mein Projekt eingefügt und bekomme jetzt diese Fehlermeldung hier:
>>> import datetime
>>> d.strftime("%d-%m-%Y %H:%M:%S")
'02-08-2018 03:01:42''
Code:

Code: Alles auswählen

from flask import Flask, render_template, url_for
import datetime

app = Flask(__name__)
...
@app.route('/uhr')
def uhr():
    return d.strftime ("%d-%m-%Y %H:%M:%S")
    
if __name__ == '__main__': app.run(debug=True)
Fehler:

Code: Alles auswählen

2018-08-02T16:59:24.473092+00:00 app[web.1]:   File "/app/app.py", line 13, in uhr

2018-08-02T16:59:24.473094+00:00 app[web.1]:     return d.strftime ("%d-%m-%Y %H:%M:%S")

2018-08-02T16:59:24.473102+00:00 app[web.1]: NameError: name 'd' is not defined
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

SORRY! Vom Handy:

Füge vorher noch

d = datetime.datetime.now()

ein.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Danke dann probier ich das so aus wenn ich wieder zu Hause bin.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Das sollte jetzt funktionieren - ich kontrolliere es gerade vom Rechner:

Code: Alles auswählen

>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime ("%d-%m-%Y %H:%M:%S")
'02-08-2018 21:37:28'
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Ich habe den code jetzt so in meinem Programm mit drin das Problem jetzt ist nur 1. der Server ist in einer anderen Zeitzone 2. Es wird mir immer nur die Uhrzeit angezeigt zu der, der Server gestarted wurde. Kann mir da bitte jemand helfen das zu beheben.
Danke schon mal
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da du keinen Code zeigst.... schwierig. Ich rate mal, dass du dir nur *EINMAL* die Uhrzeit holst, auf Modulebene. Das wird nicht magisch immer aktualisiert. Du musst die Abfrage bei jedem einlaufenden Request wiederholen.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Sollen wir jetzt raten, was Du gemachst hast?? Was ist Dein konkretes Problem? Was möchtest Du erreichen?
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Ich habe so ein ähnliches Problem: Vor einigen Tagen mal eine bottle.py-App geschrieben und das Datum ausgegeben und das angezeigte Datum mit Stunden ist zwei Stunden gegenüber der Mittel-Europäischen-Zeitzone hinterher, es reflektiert also die Zeitzone, wo der Server steht und nicht die Zeitzone des Besuchers. Ich denke, dass das sein Problem ist.

@Hypec: <s>Googlest du mal nach datetime and timezone, da müsstest du fündig werden (ich habe das für mich selbst noch nicht gelöst) und wahrscheinlich musst du pytz einsetzen.</s>

Ich bin hier fündig geworden: https://stackoverflow.com/questions/453 ... zone-aware

Testest du mal:

Code: Alles auswählen

import datetime
import pytz

my_date = datetime.datetime.now(pytz.timezone('Europe/Berlin'))

print(my_date)
Eine Überlegung meinerseits: Du hast das Problem, dass - wenn die Besucher deiner Website nicht aus deiner Zeitzone kommen - sie eine falsche Zeit angezeigt erhalten. Du müsstest hier dann vielleicht auch deren IP, ihre wahrscheinliche Herkunft ermitteln und dann deren Zeitzone zu treffen versuchen. Das ist meine bisherige Überlegung. Persönlich würde ich dazu tendieren Benutzern keine Uhrzeit anzuzeigen (!) und das Datum nur fürs loggen zu verwenden, da spielt es dann aber auch keine Rolle, ob die Uhrzeit passt.
Zuletzt geändert von pixewakb am Mittwoch 8. August 2018, 12:22, insgesamt 1-mal geändert.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Sorry vergessen hier ist mein code:
Flask:

Code: Alles auswählen

from flask import Flask, render_template, url_for
import requests
import datetime

d = datetime.datetime.now()
app = Flask(__name__)

@app.route('/',methods=['GET','POST'])
def index():
    return render_template('index.html')

@app.route('/uhr')
def uhr():
   return d.strftime ("%d-%m-%Y %H:%M:%S")

@app.route('/test.html')
def test():
    return render_template('test.html', time=d.strftime ("%d-%m-%Y %H:%M:%S"))


if __name__ == '__main__': app.run(debug=True)
Test.html:

Code: Alles auswählen

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Gewächshaus</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style>
            
                body {
                    background-color: darkgray;
                    color: black;
                    font-family: 'Arial', sans-serif;
                }
            
        </style>
    </head>
    <body>
        <h1 id="tittle">Gewächshaus</h1>
        <nav>
            <ul>
                <a href="https://pythonv1.herokuapp.com/">HOME</a><br>
                <a href="https://pythonv1.herokuapp.com/test.html">TEST</a><br>
            </ul>
        </nav>
        <h2>Test </h2>
        <p>
            only a Test {{time}}
        </p><br>
    </body>
</html>
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Du hast das von mir beschriebene Problem, testest du mal mein Codebeispiel?

BTW: Ich würde relative Pfade nutzen statt https://pythonv1.herokuap...
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Hypec: und jetzt schau mal, wann die Uhrzeit ermittelt wird.

Man kann die Uhrzeit in UTC übertragen und dann per Javascript umrechnen lassen:

Code: Alles auswählen

<div> Jetzt: <date>2018-08-06T15:32:12</date> </div>
<script>
dates = document.getElementsByTagName('date')
for(var i=0; i<dates.length; i++)
    dates[i].innerHTML = new Date(dates[i].innerHTML).toLocaleString()
</script>
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Eine Überlegung meinerseits: Du hast das Problem, dass - wenn die Besucher deiner Website nicht aus deiner Zeitzone kommen - sie eine falsche Zeit angezeigt erhalten. Du müsstest hier dann vielleicht auch deren IP, ihre wahrscheinliche Herkunft ermitteln und dann deren Zeitzone zu treffen versuchen. Das ist meine bisherige Überlegung. Persönlich würde ich dazu tendieren Benutzern keine Uhrzeit anzuzeigen (!) und das Datum nur fürs loggen zu verwenden, da spielt es dann aber auch keine Rolle, ob die Uhrzeit passt.
Also da sich der Besucherkreis der Webseite sich eigentlich nur auf mich bezieht kann ich die Zeitzone ziemlich genau sagen und die brauche ich auch da ich regelmässig Messwerte an den Server senden, darauf sammeln und dann anzeigen will, da ist ein Zeitstempel für die Werte schon sinnvoll. Das problem ist das der Server des Hosters in einer anderen Zeitzone steht und ich deshalb immer den Zeitstempel mit 2 Stunden Zeitverschiebung hätte.
Benutzeravatar
__blackjack__
User
Beiträge: 13102
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hypec: Bei Zeitstempeln in einer Datenbank würde ich sowieso überlegen UTC zu verwenden, und dann bei der Anzeige in die entsprechende Zeitzone umzuwandeln. Dann ist egal wo Server und Client sitzen und ob Sommerzeit gilt oder nicht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten