[web.py-1]初识web.py及简单使用

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/'))

你可能感兴趣的:([web.py-1]初识web.py及简单使用)