存档

‘Web’ 分类的存档

在Django模板中使用css、javascript 等静态文件

2010年7月27日

在使用Django开发的Web项目中是避免不了使用css、javascript、js等静态文件的,而对于这些静态文件的处理,django官网这样写:Django itself doesn’t serve static (media) files, such as images, style sheets, or video. It leaves that job to whichever Web server you choose.就是说django本身不处理类似于图片、样式表、视频等静态文件,它将此项工作交给了你选择的Web服务器。

在网上搜索到的django项目处理静态文件的示例中,大家似乎都在使用如下的方法让django处理静态文件:

?View Code PYTHON
urlpatterns += patterns('',
      (r'^static/(?P.*)$', 'django.views.static.serve',
      {'document_root':  settings.MEDIA_ROOT}),
    )

而对于django.views.static.serve方法,django官网说得很清楚:Using this method is inefficient and insecure. Do not use this in a production setting. Use this only for development.就是说这种方法是低效且不安全的,不要在生产环境使用此方法,只在开发环境使用。

这时对于静态文件的处理,我们只能使用我们选择的Web服务器来处理了。比如使用nginx服务器的话,可以如下设置:

先设置settings.py,如下,

设置settings.py

设置settings.py

然后设置nginx的相应网站配置部分,如下,

配置nginx

配置nginx

如此配置以后,就可以让web服务器来高效的处理静态文件,而让django来处理动态内容。

分享家:Addthis中国

Web , ,

尝试一下WordPress的导出功能

2010年6月30日

  在GAE上开了个新博客http://zhangwenjienet.appspot.com,尝试将此博客的数据导出并导入到新博客。

  结果在使用导出功能时出错,看了一下,原来是这个功能和codbox插件有冲突,只能暂停wp-codebox插件后再导出。

  

分享家:Addthis中国

Web ,

Python环境的easy_install配置

2010年5月8日

  对于Python环境下库的安装,无疑使用easy_install最方便。这里我们详细说一下如何配置easy_install,这个方法对Linux和windows平台均适用。

  安装easy_install

  存在一个叫ez_setup.py的脚本,使easy_install的安装相当方便。你可以从网上找此脚本,或从这里下载ez_setup。然后运行以下的命令安装easy_install:

?View Code PYTHON
      /usr/local/python265/bin/python  ez_setup.py

  稍候你就会看到安装成功的提示。
  将easy_install放置到系统路径中

  安装easy_install完成后,要成功运行easy_install来安装库文件一般需要在/usr/local/python265/bin/目录下运行easy_install,或者要输入长长的路径名。为了可以在任何目录下运行此工具来安装python库,我们需要将此路径放置到PATH环境中去。方法如下是,修改.bashrc文件(这是一个隐藏文件),在文件最后添加如下代码:

?View Code PYTHON
      export PATH=$PATH:/usr/local/python265/bin 

  然后再执行 source .bashrc就可以了。

  实例演示

  安装并配置好easy_install后,让我们试验一下easy_install安装库文件的方便之处。比如我们想安装MySQL-python库文件,在任意路径下这样输入:

?View Code PYTHON
      easy_install  MySQL-python
?View Code PYTHON
  然后会看到如下显示:
easy_install安装MySQL-python

easy_install安装MySQL-python

  可以看到easy_install成功安装了MySQL-python库。

  

  原创文章如转载,请注明:转载自张文杰的博客http://zhangwenjie.net ]

  本文链接地址:http://zhangwenjie.net/archives/388.html

分享家:Addthis中国

Web ,

Linux下Python 2.6.5安装MySQL-python的问题

2010年5月8日

  由于RHEL 5.3系统自身带有Python2.4.3,且系统中的一些服务依赖此版本的Python,所以又在/usr/local/python265目录下安装了一个Python 2.6.5版本的Python。

  由于想在Python环境下连接MySQL读数据,且我的RHEL 5.3机器源代码安装的MySQL 5.1.36。这下问题来了,且似乎没有解决办法。

  当我使用Python的easy_install安装MySQL-python包时,一切似乎正常,没有出错。但我在交互环境下import MySQLdb时,出错如下:

MySQL-python导入错误

MySQL-python导入错误

  错误告诉我libmysqlclient_r.so.15没有找到。我在我安装MySQL的目录下搜索后,发现有libmysqlclient_r.so.16文件,但没有错误提示的那个文件。我将这个16的文件罗链接到/usr/lib目录下也没有效果。在网上找了找,发现也有人遇到此问题,他的解决办法是删除当前安装的高版本MySQL,然后重新安装一个MySQL 5.0的,可以编译出libmysqlclient_r.so.15的MySQL版本。除此之外,没有找到其他的解决办法。

  为了一个MySQL-python包,重新安装一个低版本的MySQL实在划不来。我想说的是MySQL-python包由于严重依赖libmysqlclient_r.so.15文件,是不是导致只能使用MySQL 5.0版本,其它的或高或低的MySQL将无法使用?或许去找一个libmysqlclient_r.so.15放到/usr/lib目录下,以迎合MySQL-python的要求来连接MySQL服务器,不知道是否可行?我没有办法试验。

  另外,除了使用MySQL-python,在Python环境下好像再没有其它方式连接MySQL。或许是我孤陋寡闻,希望有办法的朋友不吝赐教。谢谢!

  

  原创文章如转载,请注明:转载自张文杰的博客http://zhangwenjie.net ]

  本文链接地址:http://zhangwenjie.net/archives/384.html

分享家:Addthis中国

Web , ,

也谈Zend构架与Smarty的集成配置

2010年4月11日

  Zend架构是一个成熟、强大的PHP Web MVC的开发框架,而smarty是一个灵活、强大的模板引擎。如果将两者结合起来,将会使PHP的Web开发轻松不少,且上手也快。

  对于Zend构架与Smarty的集成配置,网上也有不少文章说到,但我自己觉得都不够完整,且并不是真正、深入集成。我这里所说的方法,是彻底的集成,程序写法是Zend本身的带的view写法是一样的。

  首先说一下总体目录结构:

Zend目录结构

Zend目录结构

  其中,application目录中包括config目录、controllers目录、models目录等;cache目录用于smarty缓存;compile目录用于smarty编译目录;config目录放置smarty的配置;library目录放置Zend框架库及smarty库;public目录放置引导文件及js、css、images等公共文件;template目录放置.tpl模板文件。

  首先修改配置文件来支持smarty模板库(就是application/configs/application.ini文件),添加如下内容:

  

  smarty.class_path = "Smarty/Smarty.class.php"
  smarty.left_delimiter = "<*"
  smarty.right_delimiter = "*>"
  smarty.template_dir = APPLICATION_PATH "/../template"
  smarty.compile_dir = APPLICATION_PATH "/../compile"
  smarty.cache_dir = APPLICATION_PATH "/../cache"
  smarty.cache_lifetime = 600
  smarty.caching = 0
  smarty.config_dir = APPLICATION_PATH "/../config"

  第二,创建一个模板类文件Template,里面旋转初始smarty库的内容。这个文件里的类名我写为Zend_Templater,我把它放到library/Zend/下,这样它就会被自动加载:

<?php
class Zend_Templater extends Zend_View_Abstract
    {
        protected $_path;
        protected $_engine;
 
        public function __construct()
        {
           $config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/application.ini', 'production');
           require_once $config->smarty->class_path;
 
            $this->_engine = new Smarty();
            $this->_engine->template_dir = $config->smarty->template_dir;
            $this->_engine->compile_dir = $config->smarty->compile_dir;
            $this->_engine->cache_dir = $config->smarty->cache_dir;
            $this->_engine->cache_lifetime = $config->smarty->cache_lifetime;
            $this->_engine->caching = $config->smarty->caching;
            $this->_engine->left_delimiter = $config->smarty->left_delimiter;
            $this->_engine->right_delimiter = $config->smarty->right_delimiter;
            $this->_engine->config_dir  = $config->smarty->config_dir;
        }
 
        public function getEngine()
        {
            return $this->_engine;
        }
 
        public function __set($key, $val)
        {
            $this->_engine->assign($key, $val);
        }
 
        public function __get($key)
        {
            return $this->_engine->get_template_vars($key);
        }
 
        public function __isset($key)
        {
            return $this->_engine->get_template_vars($key) !== null;
        }
 
        public function __unset($key)
        {
            $this->_engine->clear_assign($key);
        }
 
        public function assign($spec, $value = null)
        {
            if (is_array($spec)) {
                $this->_engine->assign($spec);
                return;
            }
 
            $this->_engine->assign($spec, $value);
        }
 
        public function clearVars()
        {
            $this->_engine->clear_all_assign();
        }
 
        public function render($name)
        {
            return $this->_engine->fetch(strtolower($name));
        }
 
        public function _run()
        { }
    }
?>

  其实也可以不放置到Zend目录且支持自动加载此文章,请见另一篇文章让Zend框架自己加载自定义的类
  第三,修改引导文件,完成smarty与Zend的集成。修改Zend的引导文件index.php,添加支持smarty的视图类:

  $vr = new Zend_Controller_Action_Helper_ViewRenderer();
  $vr->setView(new Zend_Templater());
  $vr->setViewSuffix('tpl');
  Zend_Controller_Action_HelperBroker::addHelper($vr);

  到这里,已经完成Zend与smarty的集成。这样在controller文件中,可以如下的方式写代码:

  $this->view->name = 'Zend与smarty的集成';

  然后在你的tpl文件中,像如下的方式访问设置的变量:

  <*if $name*>
     <*$name*>
  <*/if*>

  

  原创文章如转载,请注明:转载自张文杰的博客http://zhangwenjie.net ]
  本文链接地址:http://zhangwenjie.net/archives/355.html

分享家:Addthis中国

Web , ,

让Zend框架自己加载自定义的类

2010年4月6日

  在用Zend框架编写Web程序的过程中,我们有时候需要让框架自动加载我们自己编写的一些工具类代码。我们都知道,Zend框架对以Zend_为前缘的类会自动加载的。知道这个原理后,对于我们自己的类让框架去自动加载,那么有两种方法:

  让我们自己的类也以Zend_为前缀,并将类文件放到library/Zend目录下

  这个方法是可行的。但一个缺点是,对于会让多个Web项目引用的类库来说,大家都向Zend目录放自定义的类文件是不合适的。对于一些多个项目都需要,即是非常共有的类文件,这样做一般是比较合适的,可以节约空间,也可以减少其它项目的开发时间。

  通过配置入口文件,让Zend框架自己加载我们的类文件

  这个方法需要对入口文件,即index.php文件做一些修改,这样框架就会自动加载我们的类。这个方法对只有本项目才会用到的类比较适用。

  首先创建一个include目录,和application目录(此目录包含controller、model等二级目录)同级,include目录用来放置我们在项目中需要的自定义类。然后修改入口文件index.php:

//此代码添加到包含library库路径的代码下面。这个代码向包含路径中添加我们的include目录路径
 
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../include'),
    get_include_path(),
)));
 
//中间的其它代码
 
//然后在$application->bootstrap()->run();代码的上面添加如下代码
 
Zend_Loader_AutoLoader::getInstance()->setFallbackAutoLoader(true);
 
$application->bootstrap() ->run();

  这样就完成了index.php文件对自定义类加载的修改。以后项目中的工具类、自定义的特殊类等等就可以放到include目录,在controller文件及model文件中就可以自动加载并使用了。

  

  原创文章如转载,请注明:转载自张文杰的博客http://zhangwenjie.net ]

  本文链接地址:http://zhangwenjie.net/archives/352.html

分享家:Addthis中国

Web , ,

搭建Sphinx搜索引擎的几个问题说明

2010年4月2日

  Sphinx及Coreseek

  Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP、Python、Perl、Ruby等,同时为MySQL也设计了一个存储引擎插件phinxSE。关于更多sphinx的信息,请访问这里

  CoreSeek是基于sphinx的加入了中文分词搜索的开源软件。更多信息见这里

  Coreseek及spinx的安装请到网上搜索,教程很多。我只在这里说说安装过程中的几个问题及解决。

  关于csft(这是Coreseek基于sphinx加入中文分词的产品名称)在make时,出现”undefined reference to libiconv_open”的问题

  sphinx依赖于libiconv实现编码转换。所以在机器上提前要安装libiconv库。然后有configure完成后,使用命令 vim src/Makefile(在csft目录里),找到 LIBS = -lm -lexpat -L/usr/local/lib 改为LIBS = -lm -lexpat -liconv -L/usr/local/lib重新make就可以了。网上有其它人将宏#define USE_LIBICONV改为0,表示不使用libiconv。虽然可以解决问题,但不推荐此方法。

  关于在使用命令”bin/indexer”创建索引时,出现”error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory”的问题

  在出现这个问题时,先看是否在 /usr/lib下有libiconv.so.2文件或此文件的软(硬)连接。没有的话就做一下连接(前提是安装了libiconv)。然后执行如下的命令:echo   /usr/lib >> /etc/ld.so.conf 接着执行ldconfig。这时就没有问题了。

  

  原创文章如转载,请注明:转载自张文杰的博客http://zhangwenjie.net ]

  本文链接地址:http://zhangwenjie.net/archives/348.html

分享家:Addthis中国

Web , , , ,

在Zend框架中结合Zend_Paginator和Smarty实现分页

2010年3月30日

  在一般的Web程序中都要用到分页的功能。对于使用了Zend框架的Web程序来说,结合Zend自身的View和Zend_Paginator组件,实现分页是比较轻松的事。但在Zend中整合了Smarty模板语言后,又如何使用Zend_Paginator来实现分页呢。

  其实,我们在分析了Zend_Paginator源代码后,会发现其实实现分页也是比较容易的。下面我们具体来看一下。

  首先在Controller文件中,写如下的代码:
  

  //这里写生成$paginator的代码,我省略了.直接写输出代码
  Zend_Paginator::setDefaultScrollingStyle('Sliding'); //设置分页方式
  $this->view->pages = $paginator->getPages(); //获取关于分页的信息,又如当前是第几页,一共多少页等
  $this->view->items = $paginator->getIterator(); //获取可以迭代的具体数据

  然后在 tpl文件中如此写:

   //输出具体数据 <**>是我的smarty模板中设置的输出界定符
 
  <* if $items *>
   <*foreach name = index1 from = $items*>
      <*foreach name = index2 from = $index1*>
        <*$index2*>
      <*/foreach*>
   <*/foreach*>

  下面输出页码:

<* if $pages->pageCount*>
<div>
<!-- Previous page link -->
<* if $pages->previous *>
  <a href="/index/<* $pages->previous*>">
    < Previous
  </a> |
<*else*>
  <span>&lt; Previous</span> |
<*/if*>
 
<!-- Numbered page links -->
<* foreach from = $pages->pagesInRange name = page*>
  <* if $page != $pages->current *>
    <a href="/index/<*$page*>">
        <*$page*>
    </a> |
  <*else*>
    <*$page*> |
  <*/if*>
<* /foreach*>
 
<!-- Next page link -->
<* if $pages->next *>
  <a href="/index/<* $pages->next*>">
    Next >;
  </a>
<*else*>
  <span>Next &gt;</span>
<*/if*>
</div>
<*/if*>

  如此就完成了在Smarty下使用Zend_Paginator实现的效果。总结一下,在使用smarty时,controller文件中必须使用$paginator->getPages()和$paginator->getIterator()来获取分页信息及实际数据。然后在smarty模板文件中使用foreach语句输出就完成了。这个方式在我linux机器上测试成功。如果大家使用中还有什么问题,请留言。

  原创文章如转载,请注明:转载自张文杰的博客http://zhangwenjie.net ]

  本文链接地址:http://zhangwenjie.net/archives/339.html

分享家:Addthis中国

Web , , ,

500美元/个!!!谷歌悬赏Chrome漏洞

2010年1月30日

  大家想通过Chrome赚钱吗?怎么通过Chrome赚钱呢?现在机会来了,谷歌500美元/个悬赏Chrome漏洞。如果你对Chrome浏览器有研究,可以通过找漏洞来赚钱。

  本周,互联网巨头谷歌公司为旗下的Chrome浏览器建立基金项目,向发现普通漏洞的研究人员支付500美元,最高可达1337美元。

  据Chrome安全小组成员克里斯·伊万透露,谷歌成立该项目是为了进一步提高Chrome浏览器和Chromium软件的安全性。由于谷歌软件坚持开源原则,大部分代码都向公共开放,这也给产品的安全带来一定隐患。

  但该项目暂时不包括还处在研发阶段的ChromeOS。伊万表示,此举主要是为了鼓励更多研究人员关注谷歌产品,谷歌会给予适当的物质奖励。

  业界分析师阿米尼也认为,物质奖励会吸引更多的人参与到发现漏洞的活动中。上周,微软发布的八个IE重要漏洞中,至少有五个已经被ZDI安全机构发现,但并没有引起足够重视。

  相比其他浏览器竞争对手,Chrome只能算是后起之秀。Chrome浏览器在各项浏览器性能测试中表现出色,得分高居榜首。它在不到两年的发展中,占据主流产品第三的位置但市场份额增长缓慢,与排名前列的IE和Firefox差距还很大。

  据了解,谷歌并不是第一次作出这样尝试的大公司。微软早在数年前就已经启动类似的项目,而Mozilla基金会也在2004年开设过“最先值得赞助奖”。

  不可否认,Google在向微软和Mozilla基金会学习此方法以提高Chrome浏览器的性能、质量及速度。

  

  首发张文杰的博客:zhangwenjie.net (转载请保留,谢谢)

分享家:Addthis中国

Web, 互联网 , , ,

网易(163)也要开通微博了

2010年1月21日

  已知网易微博今天开始内部测试。地址是http://t.163.com

  目前呢,你可以通过上面的域名访问网易微博,等你使用已有的通行证登录后,会出现一个页面告诉你微博地址是什么,但要真正登录微博还需要邀请码,那邀请码哪里来呢,我也不知道。因为现在网易微博邀请码还没开放。具体开放日不确定,但是有内部消息是在2月7日前会通过博客活动发放一批微博邀请码。

163微博
  慢慢期待网易微博吧,目前曝光的图片没啥新意,跟新浪的差不多。其实天下的微博都差不多。现在的问题是像主流门户如新浪开通了微博,那163也不能太落后,一定要及时跟上。

  目前所知你可以通过一下三种方式获得邀请码:

  一、网易现在正在搞口号征集活动,有千元的奖励还有激活获得网易微薄邀请码。
    活动地址:http://bbs.163.com/special/001543L5/slogan.html

  二、通过博客途径获取网易微博邀请码。
    活动地址:http://news.163.com/special/00013R06/micro.html

  三、通过发有趣的事情获得网易微博邀请码。
    地址:http://service.bbs.163.com/bbs/doings/163330479,1.html

  首发张文杰的博客:http://zhangwenjie.net(转载请保留,谢谢)

分享家:Addthis中国

Web, 互联网 , ,