Problem beim arbeiten mit externen Skripten

Django, Flask, Bottle, WSGI, CGI…
Antworten
TripleH
User
Beiträge: 29
Registriert: Donnerstag 11. Dezember 2003, 12:58

Tach auch, hab da ein Problem. Ich arbeite unter ZOPE mit einem externen Skript in Python. Auf meinem Rechner , der nicht im WWW ist läuft es ohne Probleme, aber wenn ich alle Skripte 1:1 ins Netz stelle bekomme ich immer eine Fehlermeldung
"Invalid request

The parameter, x, was omitted from the request."
Vieleicht weiß mir jemand zu helfen.
Schon mal vielen Dank.
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Deine Script braucht einen Parameter "x" den Du beim Aufruf nicht angegeben hast.

cu beyond
TripleH
User
Beiträge: 29
Registriert: Donnerstag 11. Dezember 2003, 12:58

Hallo!
Ich habe ja eine x Variable die ich übergeb.
und zwar im skript
def test(x):

auf meinem Laptop funktioniert auch alles super und habs genauso für den Zope server gemacht der online ist und dann kommt diese Fehlermeldung und ich hab keine Idee mehr.
Gibt es unterschiedliche Zope Versionen aber das dürfte ja keine Rolle spielen oder?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi,

ohne ein paar mehr Infos, also zumindest der Kopf zum Script und wie es unter Zope aufgerufen wird, kann man da nur rumrätseln.


Gruß

Dookie
TripleH
User
Beiträge: 29
Registriert: Donnerstag 11. Dezember 2003, 12:58

OK.
Hier mein Dtml Skript.

Code: Alles auswählen

<dtml-var standard_html_header>
<center><h2><br>Seiteneingabe.</h2>
<h1><br></h1> <h3>
<form action="aktionsSkript">
           Bitte Seitenname eingeben. <input type="text" name="x"><br><br></h3>
        <input type="submit">
        <input type=reset value="Eingabe löschen"> 
        <input type=button value="Zur&ck" onClick="history.back()">
</center>
      </form>
        
<dtml-var standard_html_footer>
und das python skript dazu welches ich Seitenname.py nene

Code: Alles auswählen



def Seite(x):                              
    
    f =open ("PnH-twiki-access-dec03.log", 'r')                                 
    zaehler = 0 
    z1 = 0 
    z2 = 0 
    for line in f.readlines():                                                 
        linearray = line.split("|") 
        if linearray[3] == " view " and linearray[4].strip() == x:                           
            zaehler += 1                                                    
            if linearray[6].startswith(' 193.175.240') or linearray[6].startswith(' 172.30.30') or linearray[6].startswith(' 192.168'): 
                z1 += 1 
            else: 
                z2 +=1 

    f.close()
    return "Auf die Seite %s wurde %i mal zugegriffen werden. Intern: %i Extern: %i" % (x, zaehler, z1, z2)
die Log Datei ist im Ordner var unter Zope und das Skript im Ordner Extensions.
Die externe MEthode ist so:

ID: Seite
Modulname:Seitenname
Function:name(so gehts bei mir auf Laptop) oder auch Seite(wie die Funktion im python skript)

all dies Funktioniert wie gesagt gut unter dem Zope auf meinem Laptop nur aufm Zope server der online ist hab ich alles genauso gemacht und erhalte halt die Fehler meldung siehe oben.

Ich hoffe es kann mir jemand helfen.
mfg
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi TripelH,

wundert mich, daß das auf dem Laptop funktioniert, Variablen werden normalerweise in einem Requestobjekt übergeben und dann von dort geholt.
z.B. so:

Code: Alles auswählen

request = container.REQUEST
x = request["x"]
innerhalb eines normalen Pythonscripts, von da aus würde ich dann das Externe Script aufrufen.


Gruß

Dookie
TripleH
User
Beiträge: 29
Registriert: Donnerstag 11. Dezember 2003, 12:58

Dookie du bist der beste!!!

Ich weiß jetzt bin ich wieder der Dummi aber wie ichs seh muss ich im Dtml Skript nichts ändern oder auch nicht in der externen Methode sondern im Python Skript.
Demzufolge müßte es doch dann so aussehen oder

Code: Alles auswählen

request = container.REQUEST 
x = request["x"]
def Seite(x):                              
    
    f =open ("PnH-twiki-access-dec03.log", 'r')                                  
    zaehler = 0 
    z1 = 0 
    z2 = 0 
    for line in f.readlines():                                                  
        linearray = line.split("|") 
        if linearray[3] == " view " and linearray[4].strip() == x:                            
            zaehler += 1                                                    
            if linearray[6].startswith(' 193.175.240') or linearray[6].startswith(' 172.30.30') or linearray[6].startswith(' 192.168'): 
                z1 += 1 
            else: 
                z2 +=1 

    f.close() 
    return "Auf die Seite %s wurde %i mal zugegriffen werden. Intern: %i Extern: %i" % (x, zaehler, z1, z2)
weil es geht ja anscheinend nur um die Übergabe und return funktioniert ja dann ohne Probs oder?

Vielen Dank im vorraus weil darf nicht soviel probieren die nächste Version von mir muss laufen.
Gruß zurück
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Ich würd das dtml-script so ändern, dass es auch die Auswertung vom Forumular übernimmt, also die Auswertung von dem Request und dann mit dem Parameter das Script aufruft.


Gruß

Dookie
TripleH
User
Beiträge: 29
Registriert: Donnerstag 11. Dezember 2003, 12:58

Hallo!
Jetzt hast du mich total verwirrt!
die 2 Zeilen kommen also nicht in mein externes Python.

Skriptrequest = container.REQUEST
x = request["x"]

sondern ich leg ein neues internes Skript an? wo ich diese 2 Zeilen reinschreib?
Doch wie ruf ich von dort das externe Skript auf?Ich dachte das macht man nur ausm Dtml Skript mir ner externen Methode?
Ich hoffe du kannst mir noch mal helfen und es am besten wie für ein kleines Kind erklären..
Danke

MFG

Basti
TripleH
User
Beiträge: 29
Registriert: Donnerstag 11. Dezember 2003, 12:58

Hallo!
Ich hoffe mir kann jemand helfen.
Der Grund warum ich so dumm frag leider ist das ich Python gut kann und dies auch mein Aufgabenbereich war.
Leider ist der Mann für HTML und DTML ausgestiegen und ich hab kaum Kenntnisse in beidem.
Ich hab mich zumindest reingelesen aber leider gibs noch Probleme.
und zwar hab ich als erstes mein Zope,DTML Skript verändert.

Code: Alles auswählen

<dtml-var standard_html_header>

<center><h2><br>Diese Seite ermittelt für Sie die Top 10 der am häufigsten  geladenen Seiten.</h2>
<h1><br></h1> <h3>
<form action="test">
           Bitte Seitenname eingeben. <input name="x"><br><br></h3>
        <input type="submit">
        <input type=reset value="Eingabe löschen"> 
        <input type=button value="Zur&ck" onClick="history.back()">

</center>
      </form>
<p><b><span tal:content="python: here.test(request.x)<p><b><
<form action="SodaSeite">

<dtml-var standard_html_footer>
test ist ein python skript das ich ertellt hab mit der Übergabevariable x.
und dort hab ich diese 2 Zeilen geschrieben

request = container.REQUEST
x = request["x"]


dnach versuch ich x auszuwerten und die externe Methode Seite aufzurufen aber es geht leider nichts.Irgendwie hab ich nen Denkfehler.
Ich hoffe es kann mir jemand nochmal helfen damit ich zumindest einen kleinen Einstieg in DTML bekomm.

Danke im vorraus.
MFG

Basti
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Basti,

schau dir mal folgende Seite an: http://www.dzug.org/ZopeBuch/ZWiki/ZBAdvZPT Da wird das Scripting beschreiben, auch wie Formulare ausgewertet werden oder externe Scripte aufgerufenwerden können.


Gruß

Dookie
TripleH
User
Beiträge: 29
Registriert: Donnerstag 11. Dezember 2003, 12:58

Hallo!
Puh hab das Kapitel mal durchgearbeitet und ist eldier nicht ganz einafch zu verstehen aber ich hoff ich hab was mitgenommen dort.
Wenn ichs also richtig verteh hab ich mein formular:

Code: Alles auswählen

<dtml-var standard_html_header>

<center><h2><br>Diese Seite ermittelt für Sie die Top 10 der am häufigsten  geladenen Seiten.</h2>
<h1><br></h1> <h3>
<form action="test">
           Bitte Seitenname eingeben. <input type="text" name="x"><br><br></h3>
        <input type="submit">
        <input type=reset value="Eingabe löschen"> 
        <input type=button value="Zur&ck" onClick="history.back()">

</center>
      </form>

<dtml-var standard_html_footer
hier ruf ich dann einfach nur mein python Skript "test" auf und übergeb x.

und in meinem python Skript müßt ich doch dann nur noch mein externes Skript aufrufen über meine externe Methode SodaSeite.

Code: Alles auswählen

request = container.REQUEST
x = request["x"]
"python:here.SodaSeite(x)"
Ist mein Anstz soweit richtig oder hab ich schon wieder einen grundlegenden Denkfehler?
Leider ist in dem Kapitel nicht ganz klar herausgekommen wie man externe Skripte aufruft:(
Leider schein der Syntax wieder nciht ganz richtig zu sein da er anscheinend nicht auf das externe Skript zugreift.
Ich hoff mir kann noch jemand nen Tipp gegen.

Gruß

Basti
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi nochmal,

bei dtml kannst Du dir sogar das mit dem request sparen, da zope da schon die Parameter auswertet, die an das dtml übergeben werden aus dem Forumular.

Code: Alles auswählen

<dtml-var expr="here.SodaSeite(x)">
sollte die Ausgaben der Funktion "SodaSeite" aus Deinem externen Script "here" in das test-dtml schreiben.
ansonst versuches mit

Code: Alles auswählen

<dtml-var expr="here.SodaSeite(REQUEST.form['x'])">

Gruß

Dookie
TripleH
User
Beiträge: 29
Registriert: Donnerstag 11. Dezember 2003, 12:58

Hallo!
Ich bins mal wieder.
Also ich hab nichts an meinem Formular Skript geändert.
Von dort Ruf ich ja das Test Skript auf welches jetzt so aussieht!

Code: Alles auswählen

<dtml-var standard_html_header>
<dtml-var expr="here.SodaSeite(REQUEST.form['x'])">
<dtml-var standard_html_footer>
Mein Problem besteht darin das es so nicht funtioniert.
Du sagst here soll der Name des externen Skripts sein.
Da ich mit vielen externen Skripten im Extensions Ordner arbeite ist meine Frage ob es notwendig ist sie here zu nennen oder ob ich es weiterhin Seitenname nennen kann.
SodaSeite ist bei mir die externe Methode wo der Modulname "Seitenname" und Function "Seite ist.
Ich hab den Aufruf schon angeglichen auf

[coede]<dtml-var standard_html_header>
<dtml-var expr="Seitenname.Seite(REQUEST.form['x'])">
<dtml-var standard_html_footer>[/code]
aber jedes mal kommt der Fehler Seitenname ist not definied.

Ich dachte man müßte nur die externe Methode aufrufen da in ihr ja die ganzen Parameter gespeichert sind und das es dann so aussieht

Code: Alles auswählen

<dtml-var standard_html_header>
<dtml-var expr="SodaSeite(REQUEST.form['x'])">
<dtml-var standard_html_footer>
aber dann kommt diese Fehlermeldung.

Zope has encountered an error while publishing this resource.

Error Type: IndexError
Error Value: list index out of range


Ich hoffe du kannst mir nochmal helfen.

MFG

Basti
TripleH
User
Beiträge: 29
Registriert: Donnerstag 11. Dezember 2003, 12:58

Hallo!
Bitte Dookie hilf mir noch einmal.
Ich versuche es hier schon Tag und Nacht hinzubekommen!

Mein letzter Stand ist immer noch das ich aus meinem Formular Skript in ein anderes Skript springe.
Ich versuchs in DTML und in Python:

In DTML sieht die Seite dann bei mir so aus:

Code: Alles auswählen

<dtml-var standard_html_header>
<dtml-call expr="SodaSeite(x)">

<dtml-var standard_html_footer>
und in Python:

Code: Alles auswählen

request = container.REQUEST 
x = request["x"] 

context.SodaSeite(x)
SodaSeite ist die externe Methode und wenn ich alles richtig verstanden hab wird doch as externe Skript nur über die externe Methode aufgerufen.

Doch jedesmal bei beiden Varianten erscheint dieser Fehler!!

Code: Alles auswählen

Zope Error
Zope has encountered an error while publishing this resource.

Error Type: IndexError
Error Value: list index out of range



--------------------------------------------------------------------------------

Troubleshooting Suggestions

The URL may be incorrect. 
The parameters passed to this resource may be incorrect. 
A resource that this resource relies on may be encountering an error. 
For more detailed information about the error, please refer to the HTML source for this page. 

If the error persists please contact the site maintainer. Thank you for your patience.
Normalerweise hab ich doch jetzt alles richtig übergeben oder?
Und ein Fehler innerhalb meines externen Skripts darf es doch eigentlich nicht sein oder?

Ich hoffe jemand kann mir helfen und mir nen kleinen Tipp geben.

MFG

Basti
Antworten