python web.py安装使用
官方首页:http://webpy.org/)
它的源代码非常整洁精干,学习它一方面可以让我们快速了解python语法(遇到看不懂的语法就去google),另一方面可以学习到python高级特性的使用(譬如反射,装饰器),而且在webpy中还内置了一个简单HTTP服务器(文档建议该服务器仅用于开发环境,生产环境应使用apache之类的),对于想简单了解下HTTP服务器实现的朋友来说,这个是再好不过的例子了(并且在这个服务器代码中,还可以学习到线程池,消息队列等技术),除此之外webpy还包括模板渲染引擎,DB框架等等,这里面的每一个部分都可以单独拿出来学习.
在JavaWeb开发中有Servlet规范,那么Python Web开发中有规范吗?
答案就是:WSGI,它定义了服务器如何与你的webapp交互
关于WSGI规范,可以参看下面这个链接:
http://ivory.idyll.org/articles/wsgi-intro/what-is-wsgi.html (非常好的web.py源码学习:
【Python】Webpy 源码学习(一))
安装:
安装web.py, 请先下载:
http://webpy.org/static/web.py-0.37.tar.gz
或者获取最新的开发版:
https://github.com/webpy/webpy/tarball/master
解压并拷贝 web 文件夹到你的应用程序目录下。 或者,为了让所有的应用程序都可以使用,运行:
python setup.py install (
注意: 在某些类unix系统上你可能需要切换到root用户或者运行:
sudo python setup.py install
查看 推荐设置.
另外一个选择是使用Easy Install. Easy Install 使用如下:
easy_install web.py
或者 PIP
sudo pip install web.py
我下的是0.37版本。
建立一个hello.py:
import web
urls = ('/hello', 'hello',
)
class hello(object):
def GET(self):
return 'hello world'
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
urls是映射规则(类似servlet映射)。hello是请求处理。
运行该文件:
python hello.py
我运行报错:
F:\pythonSource>python webpyFirst.py
Traceback (most recent call last):
File "webpyFirst.py", line 12, in <module>
app.run()
File "D:\ProgramFiles\python2.7\lib\site-packages\web\application.py", line 31
3, in run
return wsgi.runwsgi(self.wsgifunc(*middleware))
File "D:\ProgramFiles\python2.7\lib\site-packages\web\wsgi.py", line 55, in ru
nwsgi
server_addr = validip(listget(sys.argv, 1, ''))
File "D:\ProgramFiles\python2.7\lib\site-packages\web\net.py", line 108, in va
lidip
if validip6addr(ip): return (ip,port)
File "D:\ProgramFiles\python2.7\lib\site-packages\web\net.py", line 33, in val
idip6addr
socket.inet_pton(socket.AF_INET6, address)
AttributeError: 'module' object has no attribute 'inet_pton'
解决方法,修改Python安装目录下Lib\site-packages\web\net.py文件的第32到第35行:
(原来的是:
try:
socket.inet_pton(socket.AF_INET6, address)
except socket.error:
return False
)
改成:
try:
socket.inet_pton(socket.AF_INET6, address)
except:
return False
参考:https://github.com/webpy/webpy/pull/195#issuecomment-19143945
改正后运行下面的命令:
F:\pythonSource>python webpyFirst.py
http://0.0.0.0:8080/
输入网址http://0.0.0.0:8080/ 可是访问不了,网上搜了下可以指定ip:host,例如python hello.py 127.0.0.1:1234 即可正常访问。
输入:
127.0.0.1:1234/hello
即可输出hello world.
后来发现,不指定参数,直接用localhost也可以访问:
官方教程:http://webpy.org/tutorial3.zh-cn
任何网站最重要的部分就是它的URL结构。你的URL并不仅仅只是访问者所能看到并且能发给朋友的。它还规定了你网站运行的心智模型。在一些类似del.icio.us的流行网站 , URL甚至是UI的一部分。 web.py使这类强大的URL成为可能。
在开始你的web.py程序之前,打开一个文本文件(文件名为code.py)输入:
import web
这条语句会导入web.py模块。
现在我们需要把我们的URL结构告诉web.py。让我从下面这个简单的例子开始:
urls = (
'/', 'index'
)
第一部分是匹配URL的正则表达式,像/、/help/faq、/item/(\d+)等(\d+将匹配数字)。圆括号表示捕捉对应的数据以便后面使用。第二部分是接受请求的类名称,像index、view、welcomes.hello (welcomes模块的hello类),或者get_\1。\1 会被正则表达式捕捉到的内容替换,剩下来捕捉的的内容将被传递到你的函数中去。
这行表示我们要URL/(首页)被一个叫index的类处理。
现在我们需要创建一个列举这些url的application。
app = web.application(urls, globals())
这会告诉web.py去创建一个基于我们刚提交的URL列表的application。这个application会在这个文件的全局命名空间中查找对应类。
code.py:
import web urls = (
'/', 'index'
) class index:
def GET(self):
return "Hello, world!" if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
模板
在 Python 中写 HTML 不是聪明的选择,相反在 HTML 中写 Python 则有趣的多。幸运的是,web.py 让这件事情做得简单而又漂亮。
注意: 老版本的 web.py 使用 Cheetah 模板系统,你可以也欢迎使用其他模板系统,但它可能不会被长久支持。
给模板新建一个目录(命名为 templates),在该目录下新建一个以 .html 结尾的文件,内容如下:
<em>Hello</em>, world!
你也可以在模板中使用 web.py 模板支持代码:
$def with (name)
$if name:
I just wanted to say <em>hello</em> to $name.
$else:
<em>Hello</em>, world!
如上,该模板看起来就像 python 文件一样,除了顶部的 def with (表示从模板将从这后面取值)和总是位于代码段之前的$。当前,template.py 首先请求模板文件的首行 $def 。当然,你要注意 web.py 将会转义任何任何用到的变量,所以当你将 name 的值设为是一段 HTML 时,它会被转义显示成纯文本。如果要关闭该选项,可以写成 $:name 来代替 $name。
回看再看 code.py。在第一行之下添加:
render = web.template.render('templates/')
这会告诉web.py到你的模板目录中去查找模板。然后把 index.GET改成: 告诉 web.py 在你的模板目录下查找模板文件。修改 index.GET :
name = 'Bob'
return render.index(name)
('index' 是模板的名字,'name' 是传入模板的一个参数)
访问站点它将显示 hello Bob。
但是如果我们想让用户自行输入他的名字,么办?如下:
i = web.input(name=None)
return render.index(i.name)
访问 / 将显示 hello world,访问 /?name=Joe 将显示 hello Joe。
URL 的后面的 ? 看起来不好看?修改下 URL 配置:
'/(.*)', 'index'
然后修改下 index.GET:
def GET(self, name):
return render.index(name)
现在访问 /Joe 看看,它会显示 hello Joe。
如果学习更多关于 web.py 的模板处理,请访问 web.py 模板.
python web.py安装使用的更多相关文章
- python web py安装与简单使用
web.py是一个轻量级的python web框架,简单而且功能强大.相对flask和Django,web.py更适合初学者来学习和了解web开发的基础知识. 安装: pip install we ...
- 【Python】【web.py】python web py入门-4-请求处理(上)
python web py入门-4-请求处理(上) 2017年09月05日 23:07:24 Anthony_tester 阅读数:2907 标签: webpy入门请求处理 更多 个人分类: Pyth ...
- mac OS X 配置Python+Web.py+MySQLdb环境
MAC默认支持Python 2.7所以不用安装. 1.安装pip sudo easy_install pip 2.安装Web.py sudo pip install Web.py 3.安装MySQLd ...
- Python Web.py
安装Web.py root@bt:~# sudo pip install web.py Downloading/unpacking web.py Downloading web.py-0.37.tar ...
- web.py安装
web.py 是python的一个web插件,用于发布web服务安装下载web.py https://github.com/webpy/webpy 安装 解压下载的rar 打开控制台并定位到此文件夹输 ...
- web.py 安装
安装 安装web.py, 请先下载: http://webpy.org/static/web.py-0.37.tar.gz 或者获取最新的开发版: https://github.com/webpy/w ...
- python web.py实现简单的get和post请求
使用web.py框架,实现简单的get和post请求: py文件名:mytest.py import web urls = ( '/', 'hello' ) app = web.application ...
- 【Python】【Web.py】python web py入门-5-请求处理(下)
前面一篇,我们演示了如何获取GET和POST请求的参数信息,这篇我们介绍如何获取请求的头部信息,这个方法我们在前面一篇文章已经给出了.直接来看一个例子,首先,我们在hello.py文件新增一个方法,用 ...
- Python——Web.py詳解
ubuntu安裝Web.py sudo pip install web.py 測試代碼: import web urls = ( '/(.*)','hello' ) app = web.applica ...
随机推荐
- (转)Maven实战(四)生命周期
1. 三套生命周期 Maven拥有三套相互独立的生命周期,它们分别为clean,default和site. 每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和 ...
- SKShapeNode类
继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架 /System/L ...
- HDU 2639 Bone Collector II(01背包变型)
此题就是在01背包问题的基础上求所能获得的第K大的价值. 详细做法是加一维去推当前背包容量第0到K个价值,而这些价值则是由dp[j-w[ i ] ][0到k]和dp[ j ][0到k]得到的,事实上就 ...
- Android布局属性详解剖析
View的布局显示方式有下面几种: 线性布局(LinearLayout) 相对布局(RelativeLayout) 表格布局(TableLayout) 网格视图(GridView) 标签布局(TabL ...
- Linux crontab 命令详解(含配置文件路径)
编辑/etc/crontab 文件配置cron cron 服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服 ...
- (转)xml节点和元素的关系 .
XML节点是什么呢?当我们在处理XML文件的时候必须要明白XML节点的概念,那么从这里的讲述,你将会了解XML节点对于XML文件的意义,希望对你有所帮助. 在我们学习LINQ删除XML节点之前我们先来 ...
- Android Studio 将工程作为第三方类库的步骤
一.将工程的module名称修改为自己要添加的类库名称 1.选中module文件夹右键到Rename项 2.选中Rename module项 3.修改为自己的名称,如VolleyLibary 二.修改 ...
- WordPress程序流程分析
index.php 统一入口文件 包含wp-blog-heaer.php 包含wp-load.php 包含wp-config.php 数据库.语言包配置等 包含wp-setting.php 对各种运行 ...
- 使用PHP CURL的POST数据
使用PHP CURL的POST数据 curl 是使用URL语法的传送文件工具,支持FTP.FTPS.HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP.cur ...
- Flume 1.4.0 User Guide
Apache Flume is a distributed, reliable, and available system for efficiently collecting, aggregatin ...