借用django的static一词, 表示: 非模板文件外的文件.
现实中常常会有这样的需要: 访问某一URL的行为时, 有逻辑判断, 听话起来好像是废话! 呵呵。
比如: 访问需要被进行一次权限认证之类的。 A用户访问http://xx.com/information.zip和B访问此URL的結果是不一样的。
可能会想, 既然请求到了python代码里, 有什么不能做的?python返回这个文件不就行了。嗯, 这是可以的。只是framework也去做static文件的分发了。 但是应该professional一点, 让http server去干。 ( 如果http不干, 还要http server干嘛呢? 呵呵)
然后再想, python返回一个redirect HTTP header给proxy, 想办法让proxy去取static 文件。
是这一个好的想法。 不过没有试过。 不知道proxy会不会为这个redirect请求买单。不过, modern proxy是有自己的牛X办法的。就是说:这种需求的确实实在在存在。
如下就使用nginx和django来做一下测试.
django方面:
views里最主要的一段代码:
# 只是做测试, 不算什么URL都下载一个文件iso.img文件
response['X-Accel-Redirect'] = '/protected/iso.img'
return response
urls.py配置:
(r'^(?P<path>attach/.*)$', 'attachment.static.serve', {'document_root': PROJECT_PATH + '/attachment/'}, ),
nginx方面, 做个简单的配置:
location / {
proxy_pass http://127.0.0.1:8000/;
}
location /protected/ {
internal;
alias /tmp/; # note the trailing slash
}
OK, 一切正常~~~~framework只返回HTTP头就可以实现静态文件的处理。
相关技术:防盗链
还有一种常见的URL处理方法: 防盗链, 常见的就是在URL上加一个"变化"的参数. 如:
http://www.fuck.com/down/abc.mp3?key=123
key是会变化的, 比如按时间变化之类的, 这个方法说穿了就是产生一次性的URL.
切记: 数据要比编程逻辑更容易驾驭(The Art of Unix Programming )
Wednesday, December 16, 2009
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment