Size: 6720
Comment:
|
Size: 8429
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 297: | Line 297: |
=== 使用基本认证,设置页面访问权限 === 增加一个权限函数_baseAuth,将protect页面设置访问权限 {{{ #!python def _charsetGB2312(fn): '''函数包装函数,将页面设为gb2312''' def _init(dgn,*args): dgn.set_charset('gb2312') return fn(dgn,*args) return _init def _baseAuth(dgn,func,realm='Protected'): t=dgn.get_baseauth() if t is not None and t==('1','1'): result=None else: dgn.set_status(401) dgn.set_charset('gb2312') dgn.set_header('WWW-Authenticate', 'Basic realm="%s"' % realm) result='密码虽然弱智,你还是访问不了' return result #--------------------- def index(wkp): wkp.set_content_type("text/html") result="<html><body>" result+='<a href="/hello">Hello World</a><br><br>' result+='<a href="/protect">你能进来算你牛</a><br><br>' result+='<a href="http://1:[email protected]:8080/protect">都告诉密码了还能进不来</a><br><br>' result+='</body></html>' return result index=_charsetGB2312(index) def helloworld(wkp): return 'Hello World' def protect(wkp): return '哈哈,你进来了' protect._q_access=__baseAuth import os.path def images(wkp,*args): return wkp.StaticDirectory(os.path.join(os.path.dirname(__file__),'images'),*args) def favicon(wkp): return wkp.StaticFile(os.path.join(os.path.dirname(__file__),'favicon.ico'),mime_type='image/x-icon') def root(): result=index result.hello=helloworld result.images=images result.protect=protect result.favicon_ico=favicon #使用扩展名为.ico return result }}} |
如何利用 WukooPy 进行Web 发布 ::-- ZoomQuiet [DateTime(2005-07-16T07:05:19Z)]
建立一个wukoo_helloworld包
所有应用项目均以python包方式发布,在这里建立python包的方法很多,不再详述。用于测试,比较偷赖的方法是:
1)在系统site-packages子目录下建立wukoo_helloworld子目录
2)在wukoo_helloworld下建立一个init.py
这样我们就建立了一个wukoo_helloworld包,下面如不特指,一切操作均在wukoo_helloworld子目录下进行
建立项目
建立发布内容
增加一个helloword.py文件,内容:
这样我们就做了一个函数发布的页面,页面内容为Hello World,wkp参数为api调用入口
制作页面发布接口
建立发布内容后,就要建立url调用逻辑,这种系统指定使用一个root函数,修改文件为
制作项目发布接口
每个项目均应制作一个内容发布接口函数create_publisher,该函数调用不用的语法规则(使用不用的publisher),上页内容增加为:
wukoopy下内置quixote1,quixote2,wukoopy,karrigell四种发布方式,Publisher 参数为:
第一个参数:项目入口,每种publisher的入口形式均不一样,wukoopy为root函数
session_manager:为使用sessions,不加则不使用
config:配置文件
logger:log记录
**kwargs :其它配置
到此我们的项目基本做完了
选择不同方式发布
在wukoo.server下有不同的server发布方式
1)选择simple方式
(1)在命令行下执行
python \*\*\simple_server.py --factory wukoo_helloworld.helloworld.create_publisher
(2)使用python程序
建立一个run_simple.py文件,内容
运行后,访问http://localhost:8080/
2)选择cgi访问
建立一个run_cgi.cgi文件,并放在apache可以访问的地方
3)选择fast cgi访问
建立一个run_cgi.fcgi文件,并放在apache可以访问的地方(apache配置不详述)
4)选择xitami访问
建立一个run_xitami.py文件
5)选择mod_python访问
配置apache.conf
<LocationMatch "^/helloworld(/|$)"> SetHandler python-program PythonHandler wukoopy.server.mod_python_handler PythonOption quixote-publisher-factory wukoo_helloworld.helloworld.create_publisher PythonInterpreter wukoo_helloworld.helloworld PythonDebug On </LocationMatch>
6)选择scgi方式
(略)
7)server下还用几种发布方式,参照上述进行。(有一些还是半成品,文件名中有todo)
更多特性
加入子页面
增加一个index,初步展示调用api的方法:
发布一个静态目录
建立一个images子目录,并发布这个目录为/images
1 def index(wkp):
2 wkp.set_content_type("text/html")
3 result="<html><body>"
4 result+='<a href="/hello">Hello World</a><br><br>'
5 result+='</body></html>'
6 return result
7
8 def helloworld(wkp):
9 return 'Hello World'
10
11 import os.path
12 def images(dgn,*args):
13 return dgn.StaticDirectory(os.path.join(os.path.dirname(__file__),'images'),*args)
14
15 def root():
16 result=index
17 result.hello=helloworld
18 result.images=images
19 return result
发布一个静态文件
在目录下放一个favicon.ico文件,并发布这个favicon,发布为/favicon.ico
1 def index(wkp):
2 wkp.set_content_type("text/html")
3 result="<html><body>"
4 result+='<a href="/hello">Hello World</a><br><br>'
5 result+='</body></html>'
6 return result
7
8 def helloworld(wkp):
9 return 'Hello World'
10
11 import os.path
12 def images(wkp,*args):
13 return wkp.StaticDirectory(os.path.join(os.path.dirname(__file__),'images'),*args)
14
15 def favicon(wkp):
16 return wkp.StaticFile(os.path.join(os.path.dirname(__file__),'favicon.ico'),mime_type='image/x-icon')
17
18 def root():
19 result=index
20 result.hello=helloworld
21 result.images=images
22 result.favicon_ico=favicon #使用扩展名为.ico
23 return result
动态改态页面属性
增加一个函数包装函数_charsetGB2312,将index改为GB2312发布
1 def _charsetGB2312(fn):
2 '''函数包装函数,将页面设为gb2312'''
3 def _init(dgn,*args):
4 dgn.set_charset('gb2312')
5 return fn(dgn,*args)
6 return _init
7
8 #---------------------
9 def index(wkp):
10 wkp.set_content_type("text/html")
11 result="<html><body>"
12 result+='<a href="/hello">Hello World</a><br><br>'
13 result+='</body></html>'
14 return result
15 index=_charsetGB2312(index)
16
17 def helloworld(wkp):
18 return 'Hello World'
19
20 import os.path
21 def images(wkp,*args):
22 return wkp.StaticDirectory(os.path.join(os.path.dirname(__file__),'images'),*args)
23
24 def favicon(wkp):
25 return wkp.StaticFile(os.path.join(os.path.dirname(__file__),'favicon.ico'),mime_type='image/x-icon')
26
27 def root():
28 result=index
29 result.hello=helloworld
30 result.images=images
31 result.favicon_ico=favicon #使用扩展名为.ico
32 return result
使用基本认证,设置页面访问权限
增加一个权限函数_baseAuth,将protect页面设置访问权限
1 def _charsetGB2312(fn):
2 '''函数包装函数,将页面设为gb2312'''
3 def _init(dgn,*args):
4 dgn.set_charset('gb2312')
5 return fn(dgn,*args)
6 return _init
7
8 def _baseAuth(dgn,func,realm='Protected'):
9 t=dgn.get_baseauth()
10 if t is not None and t==('1','1'):
11 result=None
12 else:
13 dgn.set_status(401)
14 dgn.set_charset('gb2312')
15 dgn.set_header('WWW-Authenticate', 'Basic realm="%s"' % realm)
16 result='密码虽然弱智,你还是访问不了'
17 return result
18 #---------------------
19 def index(wkp):
20 wkp.set_content_type("text/html")
21 result="<html><body>"
22 result+='<a href="/hello">Hello World</a><br><br>'
23 result+='<a href="/protect">你能进来算你牛</a><br><br>'
24 result+='<a href="http://1:[email protected]:8080/protect">都告诉密码了还能进不来</a><br><br>'
25 result+='</body></html>'
26 return result
27 index=_charsetGB2312(index)
28
29 def helloworld(wkp):
30 return 'Hello World'
31
32 def protect(wkp):
33 return '哈哈,你进来了'
34 protect._q_access=__baseAuth
35
36 import os.path
37 def images(wkp,*args):
38 return wkp.StaticDirectory(os.path.join(os.path.dirname(__file__),'images'),*args)
39
40 def favicon(wkp):
41 return wkp.StaticFile(os.path.join(os.path.dirname(__file__),'favicon.ico'),mime_type='image/x-icon')
42
43 def root():
44 result=index
45 result.hello=helloworld
46 result.images=images
47 result.protect=protect
48 result.favicon_ico=favicon #使用扩展名为.ico
49 return result
暂时到这:)