Seite 1 von 1

einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 14:40
von djevil
Hallo,
kann mir jemand helfen dieses Skript zum Laufen zu bekommen?

Es soll mir einfach nur den body im Browser hervorzaubern :)

Code: Alles auswählen


import SimpleHTTPServer
import SocketServer

PORT = 8000

appname = "App1"

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()

body = '<div class=cell button>'
body += ' <img src=./icons/'+ print appname +'.png onclick=image(this) />'
body += '<h3>'.+ print appname +'</h3>'
body += '</div>'
Ich programmiere normalerweise php,
das hier würde ich aber gerne in Python schreiben,
da Python ja eigentlich auf allen linux Rechnern schon installiert ist..

Mfg d

Re: einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 15:08
von sebastian0202
Was für einen Fehler bekommst du denn?
Woran hapert es?
Was hast du denn bisher versucht?

Re: einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 15:23
von djevil
Also ein:

Code: Alles auswählen

print body
Gibt mir den Text ja auf die Konsole...
Wie schicke ich es an den Browser?

Fehler habe ich folgenden:

Code: Alles auswählen

body += ' <img src=./icons/'+ print appname +'.png />'
                                  ^
SyntaxError: invalid syntax
Es ist halt die Frage wie ich am besten Python Befehle innerhalb des HTML ausführe?

Re: einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 15:47
von BlackJack
@djevil: Python innerhalb von HTML ausführen ist keine gute Idee. Das ist doch nicht PHP. :twisted:

Und bevor Du Dir mit `SimpleHttpServer` etwas wie Bottle oder Flask selber bastelst, solltest Du eventuell gleich Bottle oder Flask verwenden.

Re: einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 16:30
von djevil
dann würde der Code aber nicht mehr nativ laufen,
also ein Anwender müsste erst das FW installieren
(Was ja nicht allzu schlimm ist, aber dann könnte ich auch php nehmen)

Re: einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 16:49
von BlackJack
@djevil: Also Bottle ist *eine* Datei, die man auch einfach in das gleiche Verzeichnis legen kann. Ansonsten nimm halt PHP. Python ist im Gegensatz zu PHP als allgemeine Programmiersprache konzipiert, und da braucht mal halt ein Webrahmenwerk wenn man sich das nicht selber schreiben möchte. Was den Aufwand IMHO nicht lohnt.

Edit: Das Beispiel mit Bottle:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
from bottle import route, run, static_file, template


PORT = 8000
APP_NAME = 'App1'


@route('/icons/<filename>')
def server_static(filename):
    return static_file(filename, root='/path/to/your/static/files')


@route('/')
def index():
    return template(
        '<div class=cell button>\n'
        '  <img src=./icons/{{app_name}}.png onclick=image(this) />\n'
        '  <h3>{{app_name}}</h3>\n'
        '</div>',
        app_name=APP_NAME
    )


def main():
    run(host='', port=PORT)


if __name__ == '__main__':
    main()
Wobei ich persönlich lieber Jinja2 als Template-Engine verwende als die einfachen Templates die Bottle schon mit bringt.

Re: einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 17:18
von djevil
Ja, das sieht gut aus,... :)

Gibt es noch eine Möglichkeit ohne Restart/Reload zu aktualisieren?

Re: einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 17:32
von BlackJack
@djevil: Schau Dir mal die optionalen Argumente von `bottle.run()` an.

Re: einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 17:55
von djevil
Ja, geht wohl in Richtung:

Code: Alles auswählen

 main():
    run(host='', port=PORT, push = True)

Re: einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 18:34
von djevil
Also:

Code: Alles auswählen

>>> inspect.getargspec(bottle.run)
ArgSpec(args=['app', 'server', 'host', 'port', 'interval', 'reloader', 'quiet', 'plugins', 'debug'], varargs=None, keywords='kargs', defaults=(None, 'wsgiref', '127.0.0.1', 8080, 1, False, False, None, None))
Ok, also: reloader=True :)

So, schönen Dank und schönen Abend noch!

Re: einfache Python Website mit SimpleHttpServer

Verfasst: Montag 22. August 2016, 21:03
von BlackJack
@djevil: `inspect` ist da vielleicht nicht so hilfreich wie `help()`. Oder auch die Dokumentation vom Projekt.