• Python web 框架:web.py


    From:https://www.oschina.net/question/5189_4306

    Web.py github 地址:https://github.com/webpy/webpy        https://pypi.python.org/pypi/web.py

    Web.py Cookbook 简体中文版:http://webpy.org/cookbook/index.zh-cn

    web.py 0.3 新手指南:http://webpy.org/docs/0.3/tutorial.zh-cn

    webpy 官网文档:http://webpy.org/

    web.py 十分钟创建简易博客:http://blog.csdn.net/freeking101/article/details/53020728

    一个简单的web.py论坛:http://www.cnblogs.com/russellluo/p/3240564.html

    Web.py Cookbook 简体中文 https://webpy.org/cookbook/index.zh-cn

     1 import web # pip install web.py
     2 
     3 urls = (
     4     '/(.*)', 'index'
     5 )
     6 
     7 app = web.application(urls, globals())
     8 render = web.template.render('templates/')
     9 
    10 '''
    11 # 强制指定模版
    12 render=web.template.frender("templates/index.html")
    13 return render("Lisa")
    14 
    15 # 直接在代码中写出模版
    16 template = "$def with (name)
    Hello $name"
    17 render = web.template.Template(template)
    18 return render("Lisa")
    19 '''
    20 
    21 class index:
    22     def GET(self, name):
    23         # i = web.input(name=None)
    24         # return render.index(i.name)
    25 
    26         return render.index("Chidao")
    27 
    28 if __name__ == "__main__":
    29     web.internalerror = web.debugerror  # 调试
    30     app.run()
    31 
    32 # http://localhost:8080/
    33 # python template.py port

    上面就是一个基于web.py 的完整的Web 应用。将上面的代码保存为文件code.py,在命令行下执行python code.py。然后打开你的浏览器,打开地址:http://localhost:8080

    修改默认端口:

    在启动服务器的时候,如果你不想使用默认端口,你可以使用这样的命令来指定端口号: python code.py 8888

    模版文件 index.html

     1 $def with (name)
     2 
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     4 <html xmlns="http://www.w3.org/1999/xhtml">
     5 <head>
     6     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     7     <title>Template</title>
     8 </head>
     9 <body>
    10     Hi, $name
    11 </body>
    12 </html>

    以def with 语句开始,但在关键字前需要添加”$“。

    注意:在模板内的变量,如果包含有HTML 标记,以$ 方式引用变量的话,HTML 标记只会以纯文本的显示出来。要想HTML 标记产生效果,可以用$: 引用变量。

    -- 模版含义:

    在index.html第一行 $def with (name)表示本模板接受一个名为name的参数,也就是对应index类中return render.index(“Lisa”)中的Lisa。

    而render=web.template.render(“templates”)表示创建一个模板对象,模板是存放于templates目录下,然后就可以用所创建的 render 对象来访问相应的模板

    比如templates目录下的index.html就是用render.index来表示(实际上是匹配寻找index.*文件,第一个匹配的就认为是所对应的模板文件),如果templates下还有个a目录,a目录下有个pagea.html,那么访问这个pagea模板就要用render.a.pagea的形式了。

    页面参数:

    页面接收的参数可以多于一个,也可以没有,如果不需要参数,则就不需要$def with (name)这样的代码,删除掉这一句,同时修改模板中对name变量的引用,修改index类最后一句为return render.index()就可以了。

    如果有参数,那么模板的第一行代码就必须是这个 $def with (…),可以多于一个参数,比如是这样$def with (gname, fname)。

    模板下面的那行字改为Hi, $gname $fname。

    同时Index类GET返回的时候赋予对应两个参数return render.index(“Lisa”,”Hayes”)。

    这样,页面最后显示的是打印出Hi, Lisa Hayes的字样。

    另外,模板接受的这个参数也可以是一个元组,比如像下面这样:return render.index((“Lisa”,”Hayes”))

    在模板中可以如下以元组方式访问参数数据:Hi, $name[0] $name[1]

    模板语法:

    模板语法与python语法基本一致,主要差别可以从上面的代码中看到,要使用到$符号表明这不是文本而是模板代码。也就是每当用到程序代码、对象的时候就必须用$来与html代码和页面显示文本相区别。

    对象赋值:

    向对象赋值时需要在$与对象名之间留空格,如为一个名为vara的字符串对象赋值apple的代码为$ vara = “apple”。
    另外,对象赋值语句必须独占一行,前面或后面有其他代码则会程序出错。

    对象引用:

    引用对象的时候直接使用 $+对象名的形式,如$vara。
    另外引用对象时还可以用{}或()将对象进行明确的分组,如$(vara)s就会表示apples,如果没有括号,程序则会把 $varas作为一个整体,也就变成对varas对象的引用而发生错误。另如果像如下定义两个数字型对象:

    $varb = 1

    $varc = 2

    然后希望计算两个值的和,如果用$varb+$varc的形式,页面上只会得到1+2而不是3,这时也就需要把两个对象放在括号里,如$(varb+varc)的形式才能得到正确答案3

    注释:

    模板中支持单行注释,以$#符号开始到行末都是注释内容。
    $#This is comment
    注释前面可以有其他内容,但是不可以有赋值代码。
    如下代码是正确的:Hi $#This is comment
    但下面的则会出错:$ vara = “apple” $#This is comment

    打印$符号:

    由于$符号在模板中有特殊用途,所以在页面上输出$时需要进行转义操作,用连续两个$表示在页面上输出一个$符号。

    Can you lend me $50?

    控制代码(循环、条件判断):

    模板中支持for、while、if、elif、else,用法与在python一致,只是控制代码行要以$开始(包括break和continue命令),$开始的代码行中对象不需要在前面再加$符号,同时要注意缩进规则,如:

     1 $def with (toUser,fromUser,createTime,articleCnt,articles)
     2 <xml>
     3     <ToUserName><![CDATA[$toUser]]></ToUserName>
     4     <FromUserName><![CDATA[$fromUser]]></FromUserName>
     5     <CreateTime>$createTime</CreateTime>
     6     <MsgType><![CDATA[news]]></MsgType>
     7     <ArticleCount>$articleCnt</ArticleCount>
     8     <Articles>
     9         $for a in articles:
    10             <item>
    11                 <Title><![CDATA[$a['title']]]></Title>
    12                 <Description><![CDATA[$a['desc']]]></Description>
    13                 <PicUrl><![CDATA[$a['picUrl']]]></PicUrl>
    14                 <Url><![CDATA[$a['url']]]></Url>
    15             </item>
    16     </Articles>
    17 </xml>

    if else判断:

    $if times > max:
        Stop! In the name of love.
    $else:
        Keep on, you can do it.
    

    在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: 本循环的外层循环对象
    1 $for a in ["a", "b", "c", "d"]: 
    2     $loop.index,$loop.index0,$loop.first,$loop.last,$loop.odd,$loop.even,$loop.parity<br/>

    将在页面上打印出:

    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
    
  • 相关阅读:
    从零开始unity3D (1) 折腾环境
    QT环境搭建 (1)
    wpf调用VC++ dll
    Bluetooth 笔记(摘抄)
    android (SharedPreferences、Intent)笔记
    黄油刀使用笔记
    mavlink安装
    Eclipse alt+/ 失效 解决
    Spring IOC, DI, AOP 原理和实现
    工程目录结构
  • 原文地址:https://www.cnblogs.com/chidao/p/12957732.html
Copyright © 2020-2023  润新知