web.py是轻量级的web框架,用来入门web开发。
一、安装
1、安装web.py
方法一:直接使用pip安装,python -m pip install web.py
此方法我自己没有安装成功,提示需要import一些包,可能是有些包没有下载下来。
方法二:官网(https://github.com/webpy/webpy)下载zip包,解压后,进入解压目录下,输入 python setup.py install
2、测试安装成功。
命令行下运行 import web 无错误提示即可。
3、官网(http://webpy.org/)可以查看教程,查看入门的例子。
import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
class hello:
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
if __name__ == "__main__":
app.run()
4、运行入门的例子,顺便验证环境安装完毕。
python code.py
访问:http://localhost:8080/
二、熟悉基本使用规则
1、在官网(http://webpy.org/docs/0.3/api)可以了解到web.py的api
2、研究例子文件,了解Python之 %s %d %f的用法,很实用。
3、修改默认端口
在启动服务器的时候,如果你不想使用默认端口,你可以使用这样的命令来指定端口号: python code.py 8888。
4、调试
直接添加一行 web.internalerror = web.debugerror 即可。
5、使用模板创建网页 (http://webpy.org/docs/0.3/templetor.zh-cn)
例子:
import web
render = web.template.frender('C:\\Users\\yanjx\\Desktop\\templates\\index.html')
urls = (
'/', 'index'
)
class index:
def GET(self):
name='Bob'
return render(name)
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
方法一:用render方法,从文件夹下匹配模板文件
render = web.template.render('../templates/')
调用模板 return render.index(movies) #index代表templates文件夹下的index.html文件
方法二:用frender方法,直接定位到模板文件
render = web.template.frender('templates/hello.html') render index('world')
方法三:用Template方法:直接用字符串定义模板
template = "name"
index= web.template.Template(template)
return index('world')
6、模板文件的编写
1、render=web.template.render(“templates”)表示创建一个模板对象,模板是存放于templates目录下,然后就可以用所创建的 render 对象来访问相应的模板
2、templates目录下的index.html就是用render.index来表示(实际上是匹配寻找index.*文件,第一个匹配的就认为是所对应的模板文件),如果templates下还有个a目录,a目录下有个pagea.html,那么访问这个pagea模板就要用render.a.pagea的形式
3、在index.html第一行 $def with (name)表示本模板接受一个名为name的参数
4、页面接收的参数可以多于一个,也可以没有,如果不需要参数,则就不需要$def with (name)这样的代码,删除掉这一句,同时修改模板中对name变量的引用,修改index类最后一句为return render.index()就可以了。
5、如果有参数,那么模板的第一行代码就必须是这个 $def with (…),可以多于一个参数,比如是这样$def with (gname, fname)
6、模板接受的这个参数也可以是一个元组,比如像下面这样:return render.index((“Lisa”,”Hayes”)),在模板中可以如下以元组方式访问参数数据:Hi, $name[0] $name[1]
7、使用到$符号表明这不是文本而是模板代码。也就是每当用到程序代码、对象的时候就必须用$来与html代码和页面显示文本相区别
8、向对象赋值时需要在$与对象名之间留空格
$ vara = “apple”
9、引用对象的时候直接使用 $+对象名的形式,如$vara。
$varb = 1
$varc = 2
用$varb+$varc的形式,页面上只会得到1+2而不是3,这时也就需要把两个对象放在括号里,如$(varb+varc)的形式才能得到正确答案3
10、对象赋值语句必须独占一行,前面或后面有其他代码则会程序出错
11、单行注释,以$#符号开始到行末都是注释内容。
如:$#This is comment
12、模板内置for循环的变量
loop.index: 循环次数计数 (1-开始)
loop.index0: 循环次数计数(0-开始)
loop.first: 如果是第一次循环则为True
loop.last: 如果是最后一次循环则为True
loop.odd: 如果是第奇数次循环则为True
loop.even: 如果是第偶数次循环则为True
loop.parity: 如果循环次数为奇数值为“odd” ,反之为 “even”
loop.parent: 本循环的外层循环对象
例:$for a in ["a", "b", "c", "d"]:
$loop.index,$loop.index0,$loop.first,$loop.last,$loop.odd,$loop.even,$loop.parity
输出:
1,0,True,False,True,False,odd
2,1,False,False,False,True,even
3,2,False,False,True,False,odd
4,3,False,True,False,True,even
13、在模板中,用户可以直接使用python的内建函数和变量
14、非内建功能,要在创建render的时候显式指定所需要的功能函数
globals = {'markdown': markdown.markdown}
render =web.template.render('templates', globals=globals)
15、模板复用
render=web.template.render("templates",base="layout")
return render.index("Lisa", "Hayes")
这个layout表示要以templates下的layout.html模板为通用模板框架,具体使用,等用到了再百度吧,就是镶嵌模板看起来用着很方便。
16、在web.py模板中使用jQuery
在jQuery中$也是一个关键字,这样的话如果在模板中使用jQuery就会冲突,这时候只需要用$做一下转义就可以了
转载自https://blog.csdn.net/qq_22194315/article/details/79114533等,感谢作者分享
三、运行时遇到的问题
问题1:执行时提示inconsistent use of tabs and spaces in indentation
原因:这个报错就是混用了tab和4个空格造成的
解决方法:检查代码,要不全部用tab,要不全部用4个空格,或者用idle编辑器校正
问题2:引用模板时提示No template named index
问题原因:就是路径错了找不到,要熟悉一下文件路径的使用
解决方法:我用第一种方法可以成功,后两种方法没有成功
1)绝对路径
render = web.template.render('C:\Users\yanjx\Desktop\templates')
render = web.template.render('C:/Users/yanjx/Desktop/templates')
2)相对路径
render = web.template.render('../templates/')
3)另辟蹊径
root = os.path.dirname(file)
render = web.template.render(os.path.join(root, '..', 'templates/'))