首先导入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  ("/").

web.py尝试性学习!的更多相关文章

  1. python web.py安装使用

    官方首页:http://webpy.org/) 它的源代码非常整洁精干,学习它一方面可以让我们快速了解python语法(遇到看不懂的语法就去google),另一方面可以学习到python高级特性的使用 ...

  2. Web.py 框架学习笔记 - URL处理

    最近由于工作需要开始学习基于python的web应用框架web.py.为了方便学习,将学习心得逐日记下以便日后复习. URL 模板: web.py提供了一套url处理的模板,在python工程中,只需 ...

  3. 【Python】web.py初识学习

    简单而直接的Python web 框架:web.py 2016年11月03日 14:09:08 擒贼先擒王 阅读数:35157更多 个人分类: Web   From:https://www.oschi ...

  4. web.py学习心得

    1.注意判断数字时,如果是get传递的参数,一定要用int转换.不然出错. 2.$var 定义时,冒号后的内容不是python内容,需加上$符号.如$var naviId:$naviId. 3.各个模 ...

  5. web.py 学习(-)Rocket web框架

    Rocket是一个轻量级,多线程,符合WSGI规范的web框架. Rocket使用一个线程监听连接,接收到连接之后放到Queue中,有worker线程进行处理. Rocket含有以下属性: metho ...

  6. python学习笔记(十 四)、web.py

    使用web.py 通过python进行网页的编写,下面我们来简单了解一哈web.py 的使用 1 url处理 使用特定的url结构来解析我们发送的请求.如下面所示: urls = ( '/login' ...

  7. web.py学习遇到的问题

    刚配置好了web.py运行所需要的环境,试着运行一个入门小实例,结果遇到了异常提示.不知道是什么原因导致的(是环境没配置好?还是……),暂时做个标记,记录一下. 运行的代码 import web ur ...

  8. web.py simpletodo 例子

    一个很好的例子: 许多新手,特别是从 ASP/PHP/JSP 转过来的同学,经常问下面这几个问题: 所有东西都放在一个 code.py 中呀?我有好多东西该如何部署我的代码? 是不是 /index 对 ...

  9. 在OpenShift上托管web.py应用

    一.背景 最近在学习web.py,跟随官网的cookbook和code examples一路敲敲打打,在本地访问了无数遍http://0.0.0.0:8080/,也算是对web.py有了基本的认识.为 ...

随机推荐

  1. 强化学习 平台 openAI 的 gym 安装 (Ubuntu环境下如何安装Python的gym模块)

    openAI 公司给出了一个集成较多环境的强化学习平台  gym , 本篇博客主要是讲它怎么安装. openAI公司的主页: https://www.openai.com/systems/ 从主页上我 ...

  2. 区间DP(总结)

    学长一晚上的耐心讲解,使我明白区间DP这么高级的东西,还是挺容易的.也就是在一段区间内的动态规划. 下面用例题进行总结. 例题:石子归并. 描述 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石 ...

  3. UVA 10815:Andy's First Dictionary(STL)

    题意:给出一段英文,里面包含一些单词,空格和标点,单词不区分大小写,默认都为小写.按照字典序输出这些单词(这些单词不能有重复,字母全部变成小写) stringstream:包含在头文件#include ...

  4. hdu2090-2097

    hdu2090 模拟 #include<stdio.h> int main(){ ]; ,a1,a2; ; while(scanf("%s%lf%lf",b,& ...

  5. HTML第二课——css【2】

    请关注公众号:自动化测试实战 现在继续上一节课的内容,看下面代码: <!DOCTYPE html><html><head>    <meta charset= ...

  6. synchronized (lock) 买票demo 线程安全

    加锁防止多个线程执行同一段代码! /** http://blog.51cto.com/wyait/1916898 * @author * @since 11/10/2018 * 某电影院目前正在上映贺 ...

  7. test20181017 B君的第二题

    题意 分析 考场50分 旁边的L君告诉我,求的就是非升子序列的个数,于是写了个树状数组. 但是\(\mod{2333} > 0\)还需要组合数中没有2333的倍数,所以实际上只得了\(a_i \ ...

  8. nginx php 配置

    nginx php 环境的搭建步骤: 1.nginx 配置: server { listen       4446; server_name  localhost; location / { root ...

  9. SVN、Git设置提交时忽略的文件

    个人正在使用的:global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.pyc *.pyo [Tt]humbs.db [Bb]in [ ...

  10. RabbitMQ消息可靠性分析

    消息中间件的可靠性是指对消息不丢失的保障程度:而消息中间件的可用性是指无故障运行的时间百分比,通常用几个 9 来衡量.不存在绝对的可靠性只能尽量趋向完美.并且通常可靠性也意味着影响性能和付出更大的成本 ...