On 2022-10-25 18:05, Thomas Hochstein <
t...@thh.name> wrote:
> Hermann Riemann schrieb:
>> In
>>
>>
https://docs.python.org/3.11/whatsnew/3.11.html
>>
>> steht unter
>> PEP 594 led to the deprecations of the following modules slated for
>> removal in Python 3.13:
>>
>> cgi und cgitb
>>
>> Ich benutze die beiden Funktionen meist um Daten, die in html
>> zwischen <form> und </form> eingegeben werden, auszuwerten.
>>
>> Auf was müsste ich umstellen?
>
> Im "PEP 594" stehen die Gründe für die vorgesehene Entfernung der dort
> genannten Module und vorgeschlagene Ersatzlösungen. Für cgi und cgitb gibt
> es keinen unmittelbaren Ersatz. Vielmehr heißt es dazu: [1]
>
>| cgi
>|
>| The cgi module is a support module for Common Gateway Interface (CGI)
>| scripts. CGI is deemed as inefficient because every incoming request is
>| handled in a new process.
Bei diesem Argument muss ich immer schmunzeln. Wie lange dauert ein
fork() und exec() unter Linux? Gut, wenn man einen Interpreter wie
Python verwendet und dann noch ein paar Module lädt (cgi, psycopg2, ...)
ist man bald bei 100 oder 200 Millisekunden. Aber ich habe schon
Java-CMS gesehen, die länger für eine Seite gebraucht haben - und die
haben für *jede* Seite so lang gebraucht, nicht nur für das Resultat
eines POST-Requests.
Bei den meisten Websites ist vollkommen egal, ob ein Webformular in 10,
100 oder 1000 Millisekunden verarbeitet wird.
>| The cgitb module is not used by any major Python web framework (Django,
>| Pyramid, Plone, Flask, CherryPy, or Bottle).
Da sind die praktikablen Ersatzmöglichkeiten versteckt.
"Major Python web framework" klingt erst mal etwas abschreckend, aber
erstens bezieht sich das "major" wohl eher auf die Verbreitung als die
Größe und zweitens muss man ja nicht gleich den ganzen Funktionsumfang
nützen.
Von den genannten habe ich Django und Flask genützt und außerdem
FastAPI.
Django[1] kann (fast) alles (Request Routing, Parameter Parsing, Form
Handling, Datenbankzugriffe via ORM, Templates, ...), ist aber ziemlich
"opinionated". Wenn man es so verwendet, wie die Django-Macher es sich
vorstellen, funktioniert es gut. Wenn man davon abweichen will oder muss
(in unserem Fall: Weil das Datenmodell vorgegeben und, äh, etwas
speziell war), wird es schmerzhaft. Außerdem hat man einiges zu lernen.
Flask[2] ist hübsch minimalistisch. Tut out of the box nicht viel mehr
als Request Routing und Parameter Parsing, und das hat man schnell
gelernt. Bei Bedarf gibt es alle möglichen Extensions. Wäre meine
Empfehlung für jemanden, der eine Handvoll CGI-Scripts ablösen will.
FastAPI[3] ist wie der Name sagt, eher auf APIs zugeschnitten
(insbesondere solche, die JSON konsumieren und produzieren). Kann
natürlich auch für beliebige Web-Applikationen verwendet werden, aber
man merkt, dass das nicht der intendierte Einsatzzweck ist.
Und für Leute, die nicht gerne JavaScript fürs Frontend schreiben aber
auf eine gewisse Mikro-Interaktivität nicht verzichten wollen, möchte
ich noch kurz Werbung für HTMX[4] machen.
hp
[1]
https://www.djangoproject.com/
[2]
https://flask.palletsprojects.com/en/2.2.x/
[3]
https://fastapi.tiangolo.com/
[4]
https://htmx.org/