WebPy学习笔记二 解析示例代码,探索谜底
笔记一中实现了简单的示例,其中具体的代码功能还不清楚。
一、Python代码如何响应URL请求?
示例代码中有一个urls结构
'/(.*)', 'Control'
)
第一部分是正则表达式,应该和django处理模式一致。
第二部分是处理请求的类名称,必须是类来处理吗?
GET请求处理
处理类中通过 GET方法来处理GET 请求, /之后的内容将作为参数传给GET方法处理。
用代码验证下
print(name)
render = web.template.render('templates/')
return render.index(name)
访问 http://127.0.0.1:8080/hello 时,后台会输出 ‘hello'说明 '/'后的内容传入GET方法中。
处理类中是否也有POST方法来处理POST请求? 尝试一个表单提交,看看如何处理。这里又会涉及到表单数据如何提交给POST方法呢。
实验了下,对于POST请求的确有POST方法来处理。
<html>
<head>
<title>POST测试</title>
</head>
<body>
<form action="" method="post">
<input type="text" name="username" />
<input type="submit" value="Submit" />
</form>
</body>
</html>
"""
class index:
def GET(self):
return INDEXHTML
def POST(self):
data = web.input() #获取表单内容
render = web.template.render('templates/')
return render.index(data.username) #传入参数给 HTML模板文件
对应的Index.html文件内容如下:
<html>
<head>
<title>清算系统</title>
</head>
<body>
$if name:
Hello $name
$else:
Hello CCTV.
</body>
</html>
此处有几个问题:
1、参数name 可以直接传入字典或list,比如可以传入 将上面代码中的 render.index(data.username) 修改为 render.index(data),在模板文件中访问 hello $data.username
2、如果在前台输入框中输入 HTML元素会怎么样呢?
如果输入HTML元素,前台会直接显示出来,比如 username 编辑框中输入 <hr> 提交后显示界面中可以看的打印出来的"Hello <hr>". 此情况术语叫 automatically escapes
如果在模板中修改为下面代码:(注意 "$:name" 而非 "$name"),可以关闭 escapes
$if name.username:
Hello $:name.username $:name.age
$else:
Hello CCTV.
</body>
则输入的<hr>将会转换为一条横线。

浙公网安备 33010602011771号