Jaypei

爱生活,爱python

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理

2008年9月8日 #

配置Django

 

先装好mod_python,然后LoadModule:

LoadModule python_module modules/mod_python.so

 

然后设置PythonPath:

# django/project/path是项目的根目录,比如存在X:/django/mysite/setting.py文件,此目录应该设置X:/django而不是X:/django/mysite,也不能写成X:/django/
PythonPath "['/django/project/path'] + sys.path"


然后:

PythonHandler django.core.handlers.modpython
# mysite是project的名字
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAutoReload Off
PythonDebug On
# 这个目录需要设置,以免外层设置了DocumentRoot中有 rewrite
DocumentRoot "/project/path"

 

 

配置media

 

urls.py中如果使用了mysite.extlibs.static.serve,最好改为:


# Debug URLs
if settings.DEBUG:
    urlpatterns 
+= patterns('',
        (r
'^my_media/(?P<path>.*)$''mysite.extlibs.static.serve'
                {
'document_root''./media/'"show_indexes": True}),        
    )

 

在Apache中配置这个目录。

Alias /mymedia "media绝对路径"
<Directory "media绝对路径">
    AllowOverride None
    Options Indexes FollowSymLinks Includes
    Order allow,deny
    Allow 
from all
</Directory>
<Location "/mymedia/">
    SetHandler None
</Location>

 

 

配置admin的media同理。

posted @ 2008-09-08 18:24 Jaypei 阅读(28) | 评论 (0)编辑

2008年9月4日 #

 

Django本身是不支持静态文件的,网上找了些资料,用Django自带的static.py解决了问题。

 

 

How to do it

在URLconf中如下代码:

(r'^site_media/(?P<path>.*)$''django.views.static.serve', {'document_root''/path/to/media'}),

 

site_media是URL根地址,/path/to/media是网站文件目录根地址。

比如:

 

  • 文件 /path/to/media/foo.jpg 在URL /site_media/foo.jpg 可用.
  • 文件 /path/to/media/css/mystyles.css 在URL /site_media/css/mystyles.css 可用.
  • 文件 /path/bar.jpg 访问不到, 因为它不在规则范围内.

 

 

目录列表

设置serve的show_indexes参数可以在访问指定URL根地址的时候显示文件列表。

(r'^site_media/(?P<path>.*)$''django.views.static.serve', {'document_root''/path/to/media''show_indexes': True}),

 

 

可以定义static/directory_index自定义显示文件列表的样式,参数如下:

directory-目录名称, file_list-文件列表

也可以复制static.py文件到项目文件中做显示功能上的定制(如文件大小等)。

 

例子1:添加 static/directory_index文件

# ......

DEFAULT_DIRECTORY_INDEX_TEMPLATE 
= """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="en-us" />
    <meta name="robots" content="NONE,NOARCHIVE" />
    <title>Index of {{ directory|escape }}</title>
  </head>
  <body>
    <h1>Index of {{ directory|escape }}</h1>
    <ul>
      {% for f,f_size in file_list.items %}
      <li><a href="{{ f|urlencode }}">{{ f|escape }}</a> <span style="color:green">{{ f_size }} bytes</span></li>
      {% endfor %}
    </ul>
  </body>
</html>
"""

def directory_index(path, fullpath):
    
try:
        t 
= loader.get_template('static/directory_index')
    
except TemplateDoesNotExist:
        t 
= Template(DEFAULT_DIRECTORY_INDEX_TEMPLATE, name='Default directory index template')
    files 
= {}
    
for f in os.listdir(fullpath):
        
if not f.startswith('.'):
            f_size 
= 0
            full_name 
= os.path.join(fullpath, f)
            
if os.path.isdir(full_name):
                f 
+= '/'
            
else:
                f_size 
= os.stat(full_name)[6]
            files[f] 
= f_size
    c 
= Context({
        
'directory' : path + '/',
        
'file_list' : files,
    })
    
return HttpResponse(t.render(c))

# ......

 

 

 

 

使用例二的时候不要直接修改django/view/static.py,最好复制到项目中做修改然后在urls.py中使用项目中的static.py

 

仅当DEBUG=True的时候使用

可是仅在DEBUG=True的时候开启目录浏览功能:

 

# import 项目setting

if settings.DEBUG:
    urlpatterns 
+= patterns('',
        (r
'^site_media/(?P<path>.*)$''django.views.static.serve', {'document_root''/path/to/media'}),
    )

 

 

 

 

参考资料:

http://www.djangoproject.com/documentation/static_files/

posted @ 2008-09-04 14:48 Jaypei 阅读(13) | 评论 (0)编辑

2008年8月31日 #

在.net中定义WebService时做以下改动
// 注释掉此句
//[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 加上这句
[SoapDocumentService(Use=System.Web.Services.Description.SoapBindingUse.Encoded)]


用SOAPpy.WSDL.Proxy而不是SOAPpy.SOAPProxy

调用函数时要写上参数名称,如:
<Do_Func>
     
<UserName>string</UserName>
     
<Password>string</Password>
</Do_Func>
调用的时候函数应该这么写:
srv.Do_Func(UserName=u"string", Password=u"string")



传递字符串参数的时候需要转成unicode,返回值中如果有字符串也是unicode型的
#参数
lambda x: x.decode("cp936")
#返回值
lambda x: x.encode("cp936")
posted @ 2008-08-31 23:29 Jaypei 阅读(30) | 评论 (0)编辑

2008年8月25日 #

NuSOAP 调用 Web Service 出现乱码的原因:

 

通常我们进行  Web Service 开发时都是用的 UTF-8 编码,这时我们需要设置 :

$client->soap_defencoding = 'utf-8'; 

 

同时,需要让 xml 以同样的编码方式传递:

$client->xml_encoding = 'utf-8';

 

NuSOAP 调用 Web Service 出现乱码的解决方法:

实际上,开启了调试功能的朋友,相信会发现 $client->response 返回的是正确的结果,为什么 $result = $client->call($action, array('parameters' => $param)); 却是乱码呢?

 

研究过 NuSOAP 代码后我们会发现,当 xml_encoding 设置为 UTF-8 时,NuSOAP 会检测 decode_utf8 的设置,如果为 true ,会执行 PHP 里面的 utf8_decode 函数,而 NuSOAP 默认为 true,因此,我们需要设置:

$client->soap_defencoding = 'utf-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'utf-8';

 

 

 

原文地址:

http://www.codebit.cn/pub/html/php_mysql/problem/nusoap_web_service/

posted @ 2008-08-25 18:08 Jaypei 阅读(8) | 评论 (0)编辑

2008年8月7日 #

posted @ 2008-08-07 12:44 Jaypei 阅读(18) | 评论 (0)编辑

2008年6月16日 #

新建app.yaml
application: jaypei
version: 1
api_version: 1
runtime: python

handlers:
- url: .*
  script: main.py

main.py文件:
#!/usr/bin/evn python

import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template

class Shout(db.Model):
    message 
= db.StringProperty(
                                required
=True)
    who 
= db.StringProperty(
                                required
=False)
    when 
= db.DateTimeProperty(
                                auto_now_add
=True)

class MyHandler(webapp.RequestHandler):
    
def get(self):
        shouts 
= db.GqlQuery("SELECT * FROM Shout "
        
"ORDER BY when DESC")
        values 
= {"shouts" : shouts}
        values[
"var1"= "Jaypei"
        self.response.out.write(template.render(
"main.html", values))
    
def post(self):
        shout 
= Shout(
                    message 
= self.request.get('message'),
                    who 
= self.request.get('who'))
        shout.put()
        self.redirect(
'/')
        
def main():
    app 
= webapp.WSGIApplication([
            (r
".*", MyHandler)], debug=True)
    wsgiref.handlers.CGIHandler().run(app)
    
    
    
if __name__=="__main__":
    main()

模板文件main.html
<h1>Hello {{var1}}.</h1>

{% for shout in shouts %}

<div>
    {{shout.message}}
    from
    {% ifequal shout.who None %}
        Anonymous
    {% else %}
        {{shout.who}}
    {% endifequal %}
</div>

{% endfor %}


<form action="" method="post" accept-charset="utf-8">
<p>Message: <input type="text" name="message" id="message" /></p>
<p>From: <input type="text" name="who" id="who" /></p>
<p><input type="submit" value="shout!" /></p>
</form>

然后可使用dev_appserver.py进行本地测试:
dev_appserver.py --port 2000 jaypei\
INFO     2008-06-16 01:29:44,687 appcfg.py] Server: appengine.google.com
INFO     
2008-06-16 01:29:44,697 appcfg.py] Checking for updates to the SDK.
INFO     
2008-06-16 01:29:45,555 appcfg.py] The SDK is up to date.
WARNING  
2008-06-16 01:29:45,878 dev_appserver.py] Could not initialize images A
PI; you are likely missing the Python 
"PIL" module. ImportError: No module named
 PIL
INFO     
2008-06-16 01:29:45,905 dev_appserver_main.py] Running application jayp
ei on port 
2000: http://localhost:2000

使用appcfg.py上传到服务器:
appcfg.py update jaypei\
Loaded authentication cookies from C:\Users\Jaypei/.appcfg_cookies
Scanning files on local disk.
Initiating update.

Email: ***
@gmail.com
Password 
for ***@gmail.com:
Saving authentication cookies to X:\Users\***
/.appcfg_cookies
Cloning 
3 application files.
Closing update.
Uploading index definitions.

可以使用http://jaypei.appspot.com进行访问了。
posted @ 2008-06-16 09:40 Jaypei 阅读(66) | 评论 (0)编辑

2008年6月14日 #

JS中上入:
AjaxPro.timeoutPeriod = 1000 * 60 * 60;  //毫秒为单位
posted @ 2008-06-14 17:27 Jaypei 阅读(42) | 评论 (0)编辑

2008年6月6日 #

加入成员变量:

IOleInPlaceActiveObject *m_pOleInPlaceActiveObject;

设置Application->OnMessage方法指针:
Application->OnMessage = this->MsgHandler;

在MsgHandler方法中进行实现:
void __fastcall TMainForm::MsgHandler(tagMSG &Msg, bool &Handled)
{
    
if(webbrowserMain == NULL)
    {
        Handled 
= false;
        
return;
    }
    Handled 
= IsDialogMessage(webbrowserMain->Handle, &Msg);
    
if(Handled && !webbrowserMain->Busy)
    {
        
if(!m_pOleInPlaceActiveObject)
        {
            _di_IDispatch pDispatch 
= webbrowserMain->Application;
            
if(pDispatch)
            {
                IOleInPlaceActiveObject 
*pIOIPAO;
                pDispatch
->QueryInterface(IID_IOleInPlaceActiveObject, (void**)&pIOIPAO);
                
if(pIOIPAO)
                    m_pOleInPlaceActiveObject 
= pIOIPAO;
            }
        }

        
if(m_pOleInPlaceActiveObject)
        {
            
if(Msg.message==WM_KEYDOWN || Msg.message==WM_KEYUP)
            {
                
if(Msg.wParam==VK_LEFT || Msg.wParam==VK_RIGHT || Msg.wParam==VK_BACK ||
                    Msg.wParam
==VK_UP || Msg.wParam==VK_DOWN || (Msg.wParam>=0x30 && Msg.wParam<=0x39||
                    (Msg.wParam
>=0x41 && Msg.wParam<=0x42|| (Msg.wParam>=0x44 && Msg.wParam<=0x55||
                    (Msg.wParam
>=0x59 && Msg.wParam<=0x5A|| Msg.wParam==0x57)
                {

                }
                
else
                    m_pOleInPlaceActiveObject
->TranslateAccelerator(&Msg);
            }
            
else
            {
                m_pOleInPlaceActiveObject
->TranslateAccelerator(&Msg);
            }
        }

    }
}
posted @ 2008-06-06 13:45 Jaypei 阅读(22) | 评论 (0)编辑

2008年6月5日 #

构造函数:

OleInitialize(NULL);

析构函数:
OleUninitialize();

就解决了。。。
posted @ 2008-06-05 18:50 Jaypei 阅读(20) | 评论 (0)编辑

2008年5月29日 #

php5魔术函数、魔术常量


魔术函数

1。__construct()
实例化对象时被调用,
当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。

2。__destruct()


当删除一个对象或对象操作终止时被调用。

3。__call()
对象调用某个方法,
若方法存在,则直接调用;
若不存在,则会去调用__call函数。

4。__get()
读取一个对象的属性时,
若属性存在,则直接返回属性值;
若不存在,则会调用__get函数。

5。__set()
设置一个对象的属性时,
若属性存在,则直接赋值;
若不存在,则会调用__set函数。

6。__toString()


打印一个对象的时被调用。如echo $obj;或print $obj;

7。__clone()


克隆对象时被调用。如:$t=new Test();$t1=clone $t;

8。__sleep()


serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。

9。__wakeup()


unserialize时被调用,做些对象的初始化工作。

10。__isset()
检测一个对象的属性是否存在时被调用。如:isset($c->name)。

11。__unset()
unset一个对象的属性时被调用。如:unset($c->name)。

12。__set_state()
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。

13。__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。

魔术常量

1。__LINE__
返回文件中的当前行号。

2。__FILE__
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。

3。__FUNCTION__
返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

4。__CLASS__
返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

5。__METHOD__
返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。





(1)初识魔术方法

Php5.0发布以来为我们提供了很多面向对象的特性,尤其是为我们提供了好多易用的魔术方法,这些魔术方法可以让我们简化我们的编码,更好的设计我们的系统。今天我们就来认识下php5.0给我们提供的魔术方法。

3,__get() 当试图读取一个并不存在的属性的时候被调用。
如果试图读取一个对象并不存在的属性的时候,PHP就会给出错误信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中反射的各种操作。

class Test 

 
public function __get($key
 { 
  
echo $key . " 不存在"
 } 



$t = new Test(); 
echo $t->name; 

就会输出:
name 不存在


4,__set() 当试图向一个并不存在的属性写入值的时候被调用。
class Test 

 
public function __set($key,$value
 { 
  
echo ''.$key . "附值".$value
 } 



$t = new Test(); 
$t->name = "aninggo"

就会输出:
对 name 附值 aninggo
5,__call() 当试图调用一个对象并不存在的方法时,调用该方法。
class Test 

 
public function __call($Key, $Args
 { 
  
echo "您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true); 
 } 


$t = new Test(); 
$t->getName(aning,go);

程序将会输出:
您要调用的 getName 方法不存在。参数是:Array
(
[0] => aning
[1] => go
)

6,__toString() 当打印一个对象的时候被调用
这个方法类似于java的toString方法,当我们直接打印对象的时候回调用这个函数

class Test 

 
public function __toString() 
 { 
  
return "打印 Test"
 } 



$t = new Test(); 

echo $t

运行echo $t;的时候,就会调用$t->__toString();从而输出
打印 Test

7,__clone() 当对象被克隆时,被调用

class Test 


 
public function __clone() 
 { 
  
echo "我被复制了!"
 } 
}

$t = new Test(); 
$t1 = clone $t;

程序输出:
我被复制了!


转自:
http://blog.csdn.net/eroswang/archive/2008/03/27/2223016.aspx
posted @ 2008-05-29 17:27 Jaypei 阅读(54) | 评论 (0)编辑