web.py开发
web.py需要使用python2.X,所以安装python版本2.7.9
web.py 是一个轻量级Python web框架,它简单而且功能强大
web.py安装
安装python
(1)使用pip
pip install web.py
安装的目录Python27\Lib\site-packages
(2) https://github.com/webpy/webpy下载release版本的web.py
下载下来之后,解压,打开cmd,cd到解压目录下,输入
python setup.py install
查看安装是否成功,pip list
web.py 测试
新建hello.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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() |
进入保存的目录
python hello.py
在浏览器输入http://127.0.0.1:8080/
命令窗口显示
第一部分(‘/’)是一个匹配URL 的正则表达式;第二部分(‘index’)是一个类名,匹配的请求将会被发送过去
若要制定另外的端口使用python code.py 后面添加IP 地址/端口
如:http://192.168.5.239:8080/aa
web.py的输出html页面
1 2 3 4 5 6 7 8 9 10 11 12 13 | import web urls = ( '/(.*)' , 'hello' ) app = web.application(urls, globals ()) class hello: def GET( self , name): return open (r 'aa.html' , 'r' ).read() if __name__ = = "__main__" : app.run() |
aa.html页面是已有的html页面
web.py学习
1.URL映射
完全匹配
模糊匹配
带组匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import web urls = ( '/index' , 'index' , '/blog/\d+' , 'blog' , '/(.*)' , 'hello' ) app = web.application(urls, globals ()) class index: def GET( self ): return 'index method' class blog: def GET( self ): return 'blog method' class hello: def GET( self , name): if not name: name = 'World' return 'Hello, ' + name + '!' if __name__ = = "__main__" : app.run() |
注:
范围大的要放在后面
2.请求处理
请求参数获取
web.input()
请求头获取
web.ctx.env
hello.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import web urls = ( '/index' , 'index' , '/blog/\d+' , 'blog' , '/(.*)' , 'hello' ) app = web.application(urls, globals ()) class index: def GET( self ): query = web. input () return query class blog: def POST( self ): data = web. input () return data class hello: def GET( self , name): return open (r 'hello.html' ).read() if __name__ = = "__main__" : app.run() |
hello.html
1 2 3 4 5 6 7 8 9 10 11 12 | <html> <head> <title>hello< / title> <head> <body> <form action = "/blog/123" method = "POST" > < input type = "text" name = "id" value = "" / > < input type = "text" name = "name" value = "" / > < input type = "submit" value = "submit" > < / form> < / body> < / html> |
表单提交后
修改代码获取请求头
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import web urls = ( '/index' , 'index' , '/blog/\d+' , 'blog' , '/(.*)' , 'hello' ) app = web.application(urls, globals ()) class index: def GET( self ): query = web. input () return query class blog: def POST( self ): data = web. input () return data def GET( self ): data1 = web.ctx.env return data1 class hello: def GET( self , name): return open (r 'hello.html' ).read() if __name__ = = "__main__" : app.run() |
3.相应处理
(1)模板文件读取
render.index("参数")
hello.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import web render = web.template.render( "templates" ) urls = ( '/index' , 'index' , '/blog/\d+' , 'blog' , '/(.*)' , 'hello' ) app = web.application(urls, globals ()) class index: def GET( self ): query = web. input () return query class blog: def POST( self ): data = web. input () return data def GET( self ): data1 = web.ctx.env return data1 class hello: def GET( self , name): return render.hello1(name) if __name__ = = "__main__" : app.run() |
在hello.py同级目录下,存在templates/hello1.html
hello1.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ def with(name) <html> <head> <title>hello1< / title> <head> <body> <h1>hello1,$name< / h1> <form action = "/blog/123" method = "POST" > < input type = "text" name = "id" value = "" / > < input type = "text" name = "name" value = "" / > < input type = "submit" value = "submit" > < / form> < / body> < / html> |
(2)结果数据处理
model.select("sql)
安装已编译版本 下载MySQldb ,安装已编译版本
goods.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import web import MySQLdb import MySQLdb.cursors render = web.template.render( "templates" ) urls = ( '/goods' , 'goods' ) app = web.application(urls, globals ()) class goods: def GET( self ): conn = MySQLdb.connect(host = '127.0.0.1' ,user = 'root' ,passwd = 'root' ,db = 'mshop_dev' ,port = 3306 ,charset = "utf8" ,cursorclass = MySQLdb.cursors.DictCursor) cur = conn.cursor() cur.execute( "select * from mshop_goods limit 5" ) r = cur.fetchall() cur.close() conn.close() print r return render.goods(r) if __name__ = = "__main__" : app.run() |
goods.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ def with(r) <html> <head> <meta charset = "utf-8" / > <title>goods< / title> <head> <body> <h1>商品列表< / h1> <ul> $ for l in r: <li>$l.get( 'goods_id' ),$l.get( 'goods_name' ) = >$l.get( 'store_name' )<li> < / ul> < / body> < / html> |
(3)URL跳转
web.seeother("/")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import web import MySQLdb import MySQLdb.cursors render = web.template.render( "templates" ) urls = ( '/index' , 'index' , '/goods' , 'goods' , '/(.*)' , 'hello' ) app = web.application(urls, globals ()) class index: def GET( self ): return web.seeother( "/goods" ) class goods: def GET( self ): conn = MySQLdb.connect(host = '127.0.0.1' ,user = 'root' ,passwd = 'root' ,db = 'mshop_dev' ,port = 3306 ,charset = "utf8" ,cursorclass = MySQLdb.cursors.DictCursor) cur = conn.cursor() cur.execute( "select * from mshop_goods limit 5" ) r = cur.fetchall() cur.close() conn.close() print r return render.goods(r) class hello: def GET( self , name): return web.seeother( "http://baidu.com" ) if __name__ = = "__main__" : app.run() |
输入http://127.0.0.1/index跳转到http://127.0.0.1:8080/goods
输入http://127.0.0.1/hello跳转到https://www.baidu.com/
注:
web.py的静态文件必须放在static文件夹下面
web.py并不具备部署网站的能力,因此对于web.py程序只能在本地访问,如果要进行部署必须要使用apache、nginx、lighttped
通过FastCGI结合lighttpd是web.py,通过该方法可以处理百万次的点击
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)