웹 페이지에서 데이터를 전송하는 방법에는 GET과 POST의 두 가지가 있습니다. GET은 URL 형식으로 매개변수를 전달하며 이는 web.py에서 잘 일치합니다
urls =( '/','index', '/weixin/(.*?)','WeixinInterface' )
/weixin/ 뒤에 오는 내용은 무시하고 이제 인덱스 클래스를 작성해 보겠습니다
class index: def GET(self): i = web.input(name = 'kevinkelin',age = 100) return render.index(i.name,i.age)
index.html 템플릿 파일 작성
$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!
http://127.0.0.1:8080/에 접속하면 이름과 나이 값이 전달되지 않습니다. 기본 이름과 나이 값은 내 GET 함수에 정의되어 있으므로 프로그램은 kevinkelin과 26을 전달합니다. 템플릿에서 다음 출력을 얻으려면
I just want to say hello to kevinkelin, he is 100 years old
http://127.0.0.1:8080/?name=yyx&age=26에 접속하면, 즉 name = yyx, age = 26을 GET 함수에 전달하면 다음과 같은 출력을 얻습니다
I just want to say hello to yyx, he is 26 years old
기본 매개변수는 정의할 수 없습니다. 즉, 비어 있는 매개변수로 정의할 수 있습니다.
i = web.input(name = None,age = None)
http://127.0.0.1:8080/에 액세스하면 템플릿의 else
인 hello, world!가 출력됩니다.
하지만 이름과 나이를 정의하지 않으면 오류가 발생합니다
i = web.input()
나중에 템플릿에 i.name과 i.age를 할당했는데 이 두 변수가 전역 변수에 없어 오류가 보고되기 때문입니다
하지만 때로는 "?"를 추가하지 않고 이와 같은 매개변수를 전달하고 싶을 때도 있습니다. 그러면 URL 규칙을 변경해야 합니다
urls =( '/name=(.*)&age=(.*)','index', '/weixin/(.*?)','WeixinInterface' )
클래스 인덱스 다시 작성
class index: def GET(self,name,age): return render.index(name,age)
정규 매칭을 통해 URL의 매개변수를 일치시킨 후 인덱스 클래스의 GET 매개변수에 전달하는 방법입니다
http://127.0.0.1:8080/name=yyx&age=26에 접속하면
을 얻게 됩니다.
I just want to say hello to yyx, he is 26 years old
두 번째 방법은 간단해 보이지만 실제로는 제어하기 어렵고 정규식을 작성하는 작업량도 늘어납니다
GET을 통해 몇 개의 매개변수가 전달되는지 알고 싶다면 어떤 매개변수가 전달되었는지 직접 확인할 수 있습니다
다음으로 게시물의 데이터를 살펴보겠습니다.
간단한 양식을 만들거나 Fiddler를 직접 사용하여 데이터를 구성하고 값을 POST할 수 있습니다
def POST(self): data = web.data() return data
얻은 데이터 유형을 보고 싶습니다
return type(data)
얻는 것은 3f101342681027e5bd1639543505866a입니다. 이는 web.py가 게시물 데이터를 str 유형으로 변환했음을 의미합니다
그럼 XML을 전달해 보겠습니다
<xml> <ToUserName>yanxingyang</ToUserName> <FromUserName>study_python</FromUserName> <CreateTime>123456</CreateTime> <MsgType>text</MsgType> <Content>Just a test</Content> </xml>
사실 WeChat의 XML 형식이 일부 변경되었습니다. lxml을 사용하여 구문 분석해 보겠습니다.
from lxml import etree data = web.data() xml = etree.fromstring(data) content = xml.find(‘Content').text return content
결과가 훌륭합니다