Heim > Artikel > Backend-Entwicklung > Eine kurze Analyse der Einstellungsmethode der URL im web.py-Framework von Python
Es gibt zwei Möglichkeiten, Daten in Webseiten zu übertragen: GET und POST übergibt Parameter in Form von URLs, die in web.py gut übereinstimmen, wenn wir die folgenden URLs konfigurieren
urls =( '/','index', '/weixin/(.*?)','WeixinInterface' )
Ignorieren Sie, was nach /weixin/ kommt, schreiben wir jetzt die Indexklasse
class index: def GET(self): i = web.input(name = 'kevinkelin',age = 100) return render.index(i.name,i.age)
Schreiben Sie eine beliebige index.html-Vorlagendatei
$def with(name,age) $if name: I just want to say <em>hello</em> to $name, he is $age years old $else: <em>hello</em>,world!
Beim Zugriff auf http://127.0.0.1:8080/ werden die Werte für Name und Alter nicht übergeben. Da die Standardwerte für Name und Alter in meiner GET-Funktion definiert sind, übergibt das Programm Kevin und 26 um die folgende Ausgabe in der Vorlage zu erhalten
I just want to say hello to kevinkelin, he is 100 years old
Beim Zugriff auf http://127.0.0.1:8080/?name=yyx&age=26, d. h. bei Übergabe von name = yyx und age = 26 an die GET-Funktion, wird die folgende Ausgabe erhalten
I just want to say hello to yyx, he is 26 years old
Wir können die Standardparameter auch nicht definieren, also als leer definieren
i = web.input(name = None,age = None)
Wenn Sie auf http://127.0.0.1:8080/ zugreifen, erhalten Sie die Ausgabe von „hello, world!“, also dem „else“
in der Vorlage
Wenn Sie jedoch keinen Namen und kein Alter angeben, tritt ein Fehler auf
i = web.input()
Dies liegt daran, dass Sie der Vorlage später i.name und i.age zuweisen, diese beiden Variablen jedoch nicht in den globalen Variablen enthalten sind, sodass ein Fehler gemeldet wird
Aber manchmal möchten wir solche Parameter übergeben, ohne das „?“ hinzuzufügen. Dann müssen wir die URL-Regeln ändern
urls =( '/name=(.*)&age=(.*)','index', '/weixin/(.*?)','WeixinInterface' )
Klassenindex neu schreiben
class index: def GET(self,name,age): return render.index(name,age)
Hier geht es darum, die Parameter der URL durch regulären Abgleich abzugleichen und sie dann an die Parameter von GET in der Indexklasse zu übergeben
Wenn Sie auf http://127.0.0.1:8080/name=yyx&age=26 zugreifen, erhalten Sie
I just want to say hello to yyx, he is 26 years old
Die zweite Methode scheint einfach zu sein, ist aber tatsächlich schwer zu kontrollieren und erfordert einen erhöhten Arbeitsaufwand beim Schreiben regulärer Ausdrücke
Wenn ich wissen möchte, wie viele Parameter über GET übergeben werden, kann ich direkt zurückkehren, um zu sehen, welche übergeben werden
Schauen wir uns als Nächstes die Daten aus dem Beitrag an:
Wir können ein einfaches Formular erstellen oder Fiddler direkt verwenden, um Daten zu erstellen und den Wert POST
def POST(self): data = web.data() return data
Ich möchte den erhaltenen Datentyp sehen
return type(data)
Was Sie erhalten, ist 75499475e0e8ba6fe015e3b5ebb35c0b, was bedeutet, dass web.py die Beitragsdaten in den Typ str konvertiert hat
Dann lass mich versuchen, XML zu übergeben
<xml> <ToUserName>yanxingyang</ToUserName> <FromUserName>study_python</FromUserName> <CreateTime>123456</CreateTime> <MsgType>text</MsgType> <Content>Just a test</Content> </xml>
Tatsächlich wurden einige Änderungen am XML-Format von WeChat vorgenommen. Lassen Sie mich versuchen, es mit lxml zu analysieren
from lxml import etree data = web.data() xml = etree.fromstring(data) content = xml.find(‘Content').text return content
Die erzielten Ergebnisse sind großartig