web.py--1
web.py
web.py 是一个轻量级Python web框架,它简单而且功能强大。web.py是一个开源项目。该框架由已故美国作家、Reddit联合创始人、RSS规格合作创造者、著名计算机黑客Aaron Swartz开发
安装web.py
下载web.py包
需要注意的是python27和python3.0对应的web.py版本不一样
在线安装
cmd命令输入: pip install web.py
离线安装web.py
- 将下载的解压缩后
将所有文件复制粘贴到python安装目录
Python\Python36\Lib\site-packages
会提示覆盖文件,直接默认确定即可cmd命令行
输入python setup.py install
然后会自动安装
第一个webapp
# 导入web模块
import web
# URl映射 使用正则表达式进行映射相关的对象和方法
# 'index','index':表示对应index的class
urls = (
'/(.*)','hello'
)
app = web.application(urls,globals())
class index:
def GET(self):
return "this is index"
# 模糊匹配blog
class blog:
def GET(self):
return "this is blog"
class hello:
def GET(self,name):
return "hello!"
if __name__ == '__main__':
app.run()
在浏览器输入:http://127.0.0.1:8080/index
将会进入页面并显示”hello!”
更改端口号
web.py默认端口号是8080
,的你是由于我电脑上安装了tomcat服务器也是8080
,所以改成了8089
修改的方法:
- 在web.py的安装目录下,即
Python\Python36\Lib\site-packages\web
下面找到net.py
- 使用记事本打开该文件(我用的是notpad++)在
85行:def validip(ip, defaultaddr="0.0.0.0", defaultport=8080):
这一行的defaultport
修改为8089
重新运行python的web程序就好了。
url映射
在测试web.py的时候用到了一个urls
的元组,里面存放了两个值urls = ( '/(.*)','hello' )
其中(/.*)
是正则表达式,表示浏览器请求的路径,后面的'hello'
是映射的处理类
在程序下面有一个class hello:
的类使用def GET(self):...
方法进行请求处理。
看到这里我们大概清楚web.py
的运行原理了,那就是在元组中,第一个参数是url请求路径,第二个参数是处理请求的对应类
如果我们修改对应的请求路径和处理类,可以得到我们想要处理自定义请求的效果。
测试代码:
# 导入web模块
import web
# URl映射 使用正则表达式进行映射相关的对象和方法
# 'index','index':表示对应index的class
urls = (
'/index','index', # 精准匹配
'/blog/\d+','blog', # 模糊匹配使用正则
'/(.*)','hello' # 注意此处的是默认匹配,当之前的匹配都不存在的时候,进行该匹配,该匹配不能放在前面否则会覆盖
)
app = web.application(urls,globals())
# index 映射
class index:
def GET(self):
return "this is index"
# 模糊匹配blog
class blog:
def GET(self):
return "this is blog"
class hello:
def GET(self,name):
index = open(r'test.html','r').read()
return index
if __name__ == '__main__':
app.run()
测试页面test.html:
<html>
<head>
<title>Test.html</title>
<style type="text/css">
div{width:100px;height:100px;border:1px red solid;}
div:hover{
width:105px;height:105px;
}
</style>
</head>
<body>
<h1>Hello!</h1>
<div></div>
</body>
</html>
测试结果
当我们在浏览器输入对应的请求地址时,程序会进行对应的处理
例如:
- 我们输入:http://127.0.0.1:8080/index
浏览器或返回一个页面显示this is index
- 输入:http://127.0.0.1:8080/blog/123
的时候浏览器返回this is blog
- 当我们什么都不输入的时候会执行默认的hello
处理,此时返回读取的指定的html页面内容
需要注意:
我们在定义urls元组的时候默认的'(.*)','hello'
要放在最后,否则会覆盖自定义的映射。
request请求
处理request请求有两个方法
请求参数获取:
web.input()
请求头获取:
web,ctx.env
测试代码;
import web
# url 映射
urls = ('/index','index','/blog/\d+','blog','/(.*)','hello')
# 创建webapp对象
app = web.application(urls,globals())
# 映射的处理函数
class hello:
def GET(self,name):
return open('1.html','r').read()
class index:
def GET(self):
return web.input()
class blog:
def GET(self):
return web.input()
def POST(self):
return web.input()
# main 函数运行webapp
if __name__ == '__main__':
app.run()
1.html:
<html>
<head>
<title>1.html</title>
</head>
<body>
<form method="post" action="/blog/123">
name:<input type="text" name="name" />
passwd:<input type="password" name="passwd" />
<input type="submit" value="submit"/>
</form>
</body>
</html>
注意此处的1.html
文件中的form
表单定义了action
是/blog/123
而且该请求是post
请求
测试:
输入:http://127.0.0.1:8089/
点击确认测试post请求
上一篇: 怎样利用JS自定义哈希表和顺序列表
推荐阅读