WebPy学习笔记二 解析示例代码,探索谜底

笔记一中实现了简单的示例,其中具体的代码功能还不清楚。

一、Python代码如何响应URL请求?

  示例代码中有一个urls结构

  urls = (
      '/(.*)', 'Control'
)

      第一部分是正则表达式,应该和django处理模式一致。

      第二部分是处理请求的类名称,必须是类来处理吗?

      GET请求处理

      处理类中通过 GET方法来处理GET 请求, /之后的内容将作为参数传给GET方法处理。

      用代码验证下

def GET(self,name):
        
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方法来处理。

INDEXHTML="""
<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文件内容如下:

$def with (name)

<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

<body>
        $if name.username:
            Hello $:name.username   $:name.age
        $else:
            Hello CCTV.
</body>

 则输入的<hr>将会转换为一条横线。


posted @ 2011-01-20 22:12  caoxx  阅读(1141)  评论(0)    收藏  举报