Verwandeln Sie Ihre alte Python-Webanwendung in eine WSGI-fähige und Apache-fähige Anwendung

PHPz
Freigeben: 2024-02-09 15:33:03
nach vorne
541 Leute haben es durchsucht

将旧的 Python Web 应用程序转变为 WSGI 就绪和 Apache

Frageninhalt

Ich habe eine alte Webanwendung, die in Python geschrieben ist. Es handelt sich im Grunde genommen um eine Reihe von .py-Dateien. Zum Beispiel:

display.py:

import cgi
import re
import string
import operator
from urllib.parse import urlparse
from errors import herigean
from routines import *

error = false

query = cgifieldstoragetodict(cgi.fieldstorage())
opening_index = 0 # flag to indicate whether we're opening the index page
if ('what' not in query):
        query['what'] = 'index'
if 'fs' not in query:
        query['fs'] = str(default_font_size)

# open page to display
try:
        fil = open('html/'+query['what']+'.fmt')
        textlines = fil.read()
        queryreg = re.compile('query:fs:query')
      textlines = queryreg.sub(query['fs'],textlines)
        fil.close()
except ioerror:
        error = true

if query['what'] == 'about':
        try:
                fil = open('legal/lgpl-3.0.txt')
                lgpl = fil.read()
                fil.close()
                fil = open('legal/gpl.txt')
                gpl = fil.read()
                fil.close()
                fil = open('html/availability.fmt')
                availability = fil.read()
                fil.close()
        except ioerror:
                error = true
if query['what'] == 'corpus':
        try:
                fil = open('html/availability.fmt')
[...]
if error:
        herigean()
else:
        print(frontmatter)
Nach dem Login kopieren

Warten

Wie kann ich es hinter einem Apache-Proxy mit mod_wsgi ausführen, das in einer virtuellen Umgebung installiert ist? Jetzt habe ich eine virtuelle Python 3.11-Umgebung mit mod_wsgi-express 5 installiert. Ich kann test.py mit dem folgenden Befehl erfolgreich ausführen:

mod_wsgi-express启动服务器测试.py

def application(environ, start_response):
    start_response('200 ok', [('content-type', 'text/html')])
    return [b'hello, world!']
Nach dem Login kopieren

Wie führe ich meine alte Python-Anwendung aus? Muss ich einfach jede .py-Datei in def application(environ, start_response): einschließen? Jede Hilfe wäre sehr dankbar.

Hinzufügen :

Die App ist www.index.html 。里面有一个 <meta http-equiv="refresh" content="0;url=display.py?what=index" />. So wird es derzeit serviert.

Zusätzliches ii

Ich kann die Ausgabe nicht erhalten: bei Verwendung von

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    [...]
    return print(frontmatter)
Nach dem Login kopieren

Ich erhalte den gesamten HTML-Code in den Protokollen, dann typeerror: 'nonetype' object is not iterable und einen internen Serverfehler im Browser. typeerror: 'nonetype' object is not iterable 和浏览器上的内部服务器错误。


正确答案


我应该使用 yield bytes(html) 而不是 print

Richtige Antwort

🎜🎜Ich sollte yield bytes(html) anstelle von print verwenden. 🎜

Das obige ist der detaillierte Inhalt vonVerwandeln Sie Ihre alte Python-Webanwendung in eine WSGI-fähige und Apache-fähige Anwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!