访问用户输入

在构建web应用程序时,一个基本而重要的事情是响应发送到服务器的用户输入。

网页.py方便访问是否是url中的参数 (GET 请求)或表单数据 (POSTPUT 请求)。这个 web.input() 方法返回类似字典的对象(更具体地说是 web.storage 对象),它包含用户输入,无论请求方法是什么。

访问URL参数(?键=值) web.input 对象,使用 web.input().key .

GET

一个看起来像 /page?id=1&action=edit ,你会的

class Page(object):
    def GET(self):
        data = web.input()
        id = int(data.id)   # all the inputs are now strings. Cast it to int, to get integer.
        action = data.action
        ...

KeyError 如果出现以下情况,则引发异常 key 在URL参数中没有。网页.py使用默认值网络输入().

class Page(object):
    def GET(self):
        data = web.input(id=1, action='read')
        id, action = int(data.id), data.action
        ...

POST

它的工作方式与POST方法完全相同。如果你有表格 namepassword 元素,你会的

class Login(object):
    def POST(self):
        data = web.input()
        name, password = data.name, data.password
        ...

多个同名输入

如果你有一个 /page?id=1&id=2&id=3 或者你有一个有多重选择的表单?会怎样 web.input().id 给我们?它只是吞没了所有的价值,只有一个价值。但是让网络输入()知道我们期望更多的同名值很简单。就这样过去 [] 作为该名称的默认参数。

class Page(object):
    def GET(self):
        data = web.input(id=[])
        ids = data.id         # now, `ids` is a list with all the `id`s.
        ...

文件上传

上传文件很容易网页.py. web.input() 也会处理好的。只需确保上传表单具有属性enctype=“multipart/formdata”。这个 input() 给你 filenamevalue ,分别是上传的文件名和内容。为了让事情更简单,它也给你 file ,一个类似文件的对象 myfile={{}} 在哪里? myfile 是表单中输入元素的名称。:

class Upload(object):
    def GET(self):
        return render.upload()

    def POST(self):
         data = web.input(myfile={})
         fp = data.myfile
         save(fp)   # fp.filename, fp.read() gives name and contents of the file
         ...

class Upload(object):
    ...

    def POST(self):
         data = web.input() # notice that `myfile={}` is missing here.
         fp = data.myfile
         save(fp.filename, fp.value)
         ...