2016-05-07 14 views
1

Ich bin ziemlich neu bei Python und habe damit begonnen, eine einfache App auf der Google App Engine zu erstellen, aber jetzt möchte ich sie woanders bereitstellen. (Ich weiß, ich kann Webapp2 in einer nicht-Python-Umgebung installieren, würde aber lieber nicht an dieser Stelle.)Ersetze die webapp2-Verwendung für self.response.write im Python-Skript

Wie kann ich den folgenden Python-Code ändern, so dass es das gleiche tut, aber ohne webapp2?

import webapp2 

class MainPage(webapp2.RequestHandler): 
    def get(self): 
     self.response.headers['Content-Type'] = 'text/html' 
     self.response.write('<a href="index.html">Search</a>') 

app = webapp2.WSGIApplication([ 
    ('/', MainPage), 
], debug=True) 

Ich habe den Druckbefehl, urllib versucht, Umleitungen und sogar einen grundlegenden Web-Servers als scripting, aber keiner der Arbeit oder wie übertrieben erscheinen.

Ich versuche eine sehr einfache Python-gesteuerte Willkommensseite mit einem Link, der zu meiner Single-Page-Website index.html führt.

Ich verwende derzeit Cloud9, die einen Apache-Webserver ausführt, der die index.html lädt, wenn das Python-Skript nicht funktioniert. Allerdings würde es mir viel lieber sein, wenn das Python-Skript auf diese einfache Art und Weise funktioniert, bevor ich anfange, das Ganze in eine umfassende Flask- oder Django-Anwendung umzuwandeln.

Jede Hilfe oder Tipps sehr geschätzt.

+0

Das Experiment GAE war wahrscheinlich nicht die ideale Wahl, wenn dies Ihr war Plan alle da eine GAE-App eine GAE-kompatible PaaS-Infrastruktur benötigt (nicht nur webapp2). Jetzt müssen Sie ein Tutorial/Beispiel folgen für das, was Sie bauen wollten: Flasch/Django auf Apache :) –

+0

nur zu Flask migrieren wird nicht sehr viel Arbeit. –

+0

Dies ist eine offene Frage. Sofern Sie kein anderes Framework als webapp2 angeben, erhalten Sie nur Vorschläge zur Verwendung anderer Frameworks. –

Antwort

0

Wenn Sie grundlegende Anforderungen nur mit integrierten Modulen behandeln möchten, können Sie BaseHTTPServer und verwandte Klassen nachschlagen. Hier ist ein einfaches Beispiel:

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer 

PORT_NUMBER = 8080 

class myHandler(BaseHTTPRequestHandler): 
    def do_GET(self): 
     self.send_response(200) 
     self.send_header('Content-type','text/html') 
     self.end_headers() 
     self.wfile.write('<a href="index.html">Search</a>') 
     return 

try: 
    server = HTTPServer(('', PORT_NUMBER), myHandler) 
    server.serve_forever()  
except KeyboardInterrupt: 
    server.socket.close() 

Beachten Sie, dass dies nicht statische Dateien standardmäßig dienen, aber Sie sollten mehrere Handler hinzufügen können. aufblicken Vielleicht: https://docs.python.org/2/library/simplehttpserver.html

2

Am Ende pythonanywhere gab mir, was ich über WSGI benötigt und es stellte sich heraus, ziemlich straightfoward sein:

SEARCH = """<html> 
<head></head> 
<body> 
    <div style="text-align: center; padding-left: 50px; padding-top: 50px; font-size: 1.75em;"> 
     <p>Welcome:</p><a href="index.html">Search</a> 
    </div> 
</body> 
</html> 
""" 

def application(environ, start_response): 
    if environ.get('PATH_INFO') == '/': 
     status = '200 OK' 
     content = SEARCH 
    else: 
     status = '404 NOT FOUND' 
     content = 'Page not found.' 
    response_headers = [('Content-Type', 'text/html'), ('Content-Length', str(len(content)))] 
    start_response(status, response_headers) 
    yield content.encode('utf8')