globals参数中传递的是一个字典,key以字符串表示模块在模板中使用时的名称,value部分就是这个要在模块中使用的模块或对象的真实名称了。
最后在要使用此模块的模板中就可以用$m1来引用此模块了。比如在index.html中添加下面一行代码:
$m1.hello_from_m1(gname)
就会调用module1中的hello_from_m1函数,在页面上打印出: hello Lisa, this is module1
4.9在web.py模板中使用jQuery
在jQuery中$也是一个关键字,这样的话如果在模板中使用jQuery就会冲突,这时候只需要用$$做一下转义就可以了,比如:
5用户输入
在web.py中,要响应用户使用GET或POST方法向服务器提交数据需要用到web.input方法。Input方法生成一个web.storge对象,其中的数据以字典形式存在,其键值对就是在GET和POST时对应的参数名和参数值。
5.1GET
我们先从GET方法开始,以http://your.domain.name/input?gname=Lisa&fname=Hayes 的形式提交数据。
在这里也就是有两个参数,分别为gname和fname,传递给服务器的值分别为Lisa和Hayes。 为了响应这个请求,我们在main.py中新建个类inputpage: class inputpage: def GET(self):
render=web.template.render(“templates”,base=”layout”) input_data=web.input(gname=”\
return render.inputpage(input_data.gname,input_data.fname)
在创建input对象的时候赋给参数的值是作为链接中没有此参数值的时候的缺省参数值。 当然别忘了修改urls对象: urls = (“/”, “index”, “/input”, “inputpage”)
新建Inputpage.html模板,这个模板也作为layout.html的内容嵌入,其中写入: $def with(gname,fname) $var title:This is inputpage.html hi, $gname $fname
刷新页面,就会根据fname和gname的参数值打印出响应的文本。
5.2POST
然后我们用POST方法来提交数据,也就是用form。 把刚才的用的inputpage.html改成以下内容: $def with(gname,fname) $var title:This is inputpage.html hi, $gname $fname
这里有一个form,其中有两个文本框用于输入文本内容,并将这两个文本框中的值作为gname和fname参数的值以POST模式提交给input页面。
同时把inputpage类的GET函数改成POST函数,内容不动,只是把函数的名字改一下就行。 然后用http://your.domain.name/input 访问这个新页面,在两个文本输入框中输入文本,点击submit按钮,看看页面发生什么变化。
5.3上传文件
首先创建一个新的模板页面,叫做upload.html,其中写入如下代码: $def with(message)
$message
也就是在页面里放置一个上传文件的form,从浏览器中选择要上传的文件,点击提交按钮将文件提交给服务器,由本页面的对应post请求处理函数处理这个上传文件。 那么对应着我们就在main.py中新建一个upload类: class upload: def GET(self):
render=web.template.render(“templates”) return render.upload(“”) def POST(self):
render=web.template.render(“templates”)
x = web.input(myfile={})
filedir = “./” #上传文件保存的目录 if “myfile” in x:
filepath=x.myfile.filename.replace(?\\\\?,'/?) # 将windows格式的路径分隔符\\转换为unix格式的/ filename=filepath.split(?/?)[-1] # 从文件的完整路径中取出单独的文件名 fout = open(filedir +?/'+ filename,?wb?) # 创建上传保存的文件 fout.write(x.myfile.file.read()) # 把上传的文件写入指定的文件中 fout.close() # 关闭文件对象,上传完毕 return render.upload(“upload succeed.”)
GET函数也就是显示上面的那个模板,在页面中提交上传请求后就由POST函数来处理,将上传的文件保存在filedir目录下,在这里也就是网站的根目录下。要注意的是fout = open(filedir +?/'+ filename,?wb?) 这一句中,文件类型参数应该是”wb”,而cookbook中的是”w”,也就是按照文本格式处理,结果上传的文件会被修改,大概就是回车换行处理出的问题,而换成二进制处理文件就正常了。 限制上传文件大小
Web.py中可以利用cgi模块来限制上传文件的大小。 import cgi
cgi.maxlen = 10 * 1024 * 1024 # 10MB class upload: def GET(self):
render=web.template.render(“templates”) return render.upload(“”)
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库webpy(4)在线全文阅读。
相关推荐: