Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Analyse der Einstellungsmethode der URL im web.py-Framework von Python

Eine kurze Analyse der Einstellungsmethode der URL im web.py-Framework von Python

WBOY
WBOYOriginal
2016-08-04 08:55:511325Durchsuche

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/(.*&#63;)','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

2016711194530065.png (698×539)

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

2016711194622132.png (244×124)

Stellungnahme:
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