《笨办法学Python》笔记38-----从浏览器中获取输入
2016-07-24 本文已影响208人
大猫黄
从浏览器中获取输入
web原理
web流- 在浏览器输入网址url(统一资源定位器),浏览器透过电脑的网卡发出请求A
- 网卡将请求发送到互联网B到达服务器C
- 服务器接收请求后,web应用程序处理请求,python代码运行index.GET
- 代码return时,python服务器会发出响应,透过网络发送回请求的浏览器
从url获取输入
url:http://localhost:8080/hello?name=Frank
这个地址中问号后面是参数和值,需要修改上节中的app.py才能解析这个地址中的?部分
#app.py
import web
urls = ('/hello','Index')
app = web.application(urls,globals())
render = web.template.render('templates/')
class Index(object):
def GET(self):
form = web.input(name="Nobody")
greeting = "Hello ,%s"%form.name
return render.index(greeting = greeting)
if __name__ == '__main__':
app.run()
效果如图:
url中带参数从表单获取输入
从url中发送数据给服务器,毕竟不适合普通用户。
所以,可以做一个网页表单给用户填写,然后提交给服务器。
新建一个hello_form.html文件到templates目录下
<html>
<head>
<title>Sample Web Form</title>
</head>
<body>
<h1>Fill Out This Form</h1>
<form action="/hello" method="POST">
A Greeting: <input type="text" name="greet">
<br/>
Your Name: <input type="text" name="name">
<br/>
<input type="submit">
</form>
</body>
</html>
用浏览器单独打开这个文件,效果如下图:
表单要获取表单的值,app.py也需要修改
import web
urls = ('/hello','Index')
app = web.application(urls,globals())
render = web.template.render('templates/')
class Index(object):
def GET(self):
return render.hello_form()
def POST(self):
form = web.input(name="Nobody",greet= 'Hello')
greeting = "%s,%s"%(form.greet,form.name)
return render.index(greeting = greeting)
if __name__ == '__main__':
app.run()
填写表单
服务器返回
GET与POST
get与post是客户端与服务器之间的两种常用交互方法
布局模板
一个网页分上中下左右等区域,有的网页的某个区域会固定显示某些内容,如logo,标题等,将这些固定的内容单独拿出来做成一个文件,当网页被请求时,用该文件包裹其他网页内容出现在客户端,这个文件就是布局模板。
剥离index.html和hello_form.html的部分内容,并以templates/layout.html文件形式出现
#index.html
$def with (greeting)
$if greeting:
I just wanted to say <em style="color: green; font-size:2em;">$greeting</em>.
$else:
<em>Hello</em>, world!
#hello_form.html
<h1>Fill Out This Form</h1>
<form action="/hello" method="POST">
A Greeting: <input type="text" name="greet">
<br/>
Your Name: <input type="text" name="name">
<br/>
<input type="submit">
</form>
#layout.html
$def with (content)
<html>
<head>
<title>Gothons From Planet Percal #25</title>
</head>
<body>
$:content
</body>
</html>
要使模板调用生效,还需修改app.py中的render对象
render = web.template.render('templates/',base='layout')