zoukankan      html  css  js  c++  java
  • web.py尝试性学习!

    首先导入web.py模块!

    import web

    没有的话就:

    pip install web

    web.py的URL结构:

    urls = (
        '/', "index"
    )

    第一部分是一个正则表达式匹配的URL,如"/", "/item/(d+)", 括号表示匹配到的数据可以供后面继续使用。第二部分则是类名称,简而言之,就是会将此次请求发送到第二部分类名的类中。

    有请求就必然少不了,GET和POST!!

    class index:
        def GET(self):
            return "hello,world!"

    只要发送GET请求匹配“/” ,web.py就会调用此函数。

    创建一个指定的url应用程序,并告诉web.py开始提供网页的方法:

    if __name__ == '__main__':
        app = web.application(urls,globals(), "127.0.0.1:8080")
        app.run()

    发现如果不加后面的ip+端口,默认服务ip是0.0.0.0:8080但是无法请求到数据,所以在后面加上了指定的ip以及端口。可以通过此ip端口访问。

    总结:首先,我们告诉web.py使用上面的url创建一个应用程序,在这个文件的全局命名空间查找类。最后,我们确保web.py服务于我们上面创建的应用程序。

    完整的代码:

    import web
    
    urls = (
        '/', "index"
    )
    
    class index:
        def GET(self):
            return "hello,world!"
    
    
    if __name__ == '__main__':
        app = web.application(urls,globals(), "127.0.0.1:8080")
        app.run()

    模版!!

    创建一个新目录(templates)、在此文件夹下创建以html为结尾的新文件(index.html)。

    可以在里面写正常的html:

    <em>Hello</em>,world!

    也可以使用web.py模版语言添加代码:

    $def with(name)
    
    <em>Hello</em>,world!
    
    $if name:
        I just wanted to say <em>hello</em> to $name.
    $else:
        <em>Hello</em>,world!

    template.py的要求是$def 语句必须要在文件的第一行,否则会报语法使用错误。web.py模块会自动转义此处使用的所有变量,因此如果由于某种原因name将其设置为包含某些HTML的值,则会正确转义并显示为纯文本,如果想关闭,写成:$:name而不是$name

    然后在py文件中,加上:

    render = web.template.render('templates/')

    再将GET请求改为:

    def GET(self):
    
        name = "qingqiu"
        return render.index(name)

    index: 这里指的是模版的名称,“name”则是传递给index.html的参数。

    此时再访问“/”时:

     如果在url中传入自己的名字,获取传入的名字信息例如/?name=xiaobai:

    则将GET请求改为:

    def GET(self):
    
        i = web.input(name=None)
        return render.index(i.name)

    web.input()可以获取所有的GET以及POST信息。

    在url中直接写get参数不好,所以可以将urls 改为:

    urls = (
        # '/', 'index'
        '/(.*)', 'index'
    )

    GET函数更改为:

    def GET(self, name):
    
        return render.index(name)

    更改之后的url: 

    结果:

    数据库!!

    使用数据库之前,确保安装了相应的数据库。

    创建一个数据库对象:

    db = web.database(dbn="mysql", user="username", pw="password", db="dbname")

    使用数据库引擎管理界面在数据库中创建一个简单的表:

    CREATE TABLE todo (
      id serial primary key,
      title text,
      created timestamp default now(),
      done boolean default 'f'    );

    第一行:

    INSERT INTO todo (title) VALUES ('Learn web.py');

    再编辑py文件并更改index.GET的内容:

    def GET(self):
        todos = db.select('todo')
        return render.index(todos)

    更改URL处理程序:

    '/', 'index',

    编辑并替换整个内容index.html:

    $def with (todos)
    <ul>
    $for todo in todos:
        <li id="t$todo.id">$todo.title</li>
    </ul>

    再次访问网站,则会看到一个代办事项:“Learn web.py”。

    最后index.html添加:

    <form method="post" action="add">
        <p><input type="text" name="title" /> <input type="submit" value="Add" /></p>
    </form>

    并将网址列表更改为:

    '/', 'index',
    '/add', 'add'

    再添加另一个类:

    class add:
        def POST(self):
            i = web.input()
            n = db.insert('todo', title=i.title)
            raise web.seeother('/')

    web.input 允许你访问用户通过表单提交的任何变量。

    注意:为了以列表的格式(例如:一系列具有属性name="name"的复选框)访问来自多个具有相同名称的项目的数据,请写成如下格式:

    post_data = web.input(name=[])

    db.insert将值插入数据库表todo并返回新行的ID,seeother将用户重定向到该url  ("/").

  • 相关阅读:
    动态二维码
    二维码
    购物车
    logback学习与配置使用
    UML类图几种关系的总结
    java.lang.Excetion,java.lang.RuntimeException,java.lang.Error有什么区别?
    Java编程最差实践
    Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
    从 Java 代码到 Java 堆
    Project configuration is not up-to-date with pom.xml
  • 原文地址:https://www.cnblogs.com/stfei/p/10361936.html
Copyright © 2011-2022 走看看