django|python中图形验证码的实现

作者 : admin 于 2010年03月23日, 14:01:08
2010
03-23

python自己并没有带图型库,需要借助第三方的图形库来实现。原来习惯的就是php下的gd库,但网上搜索后普遍说gd的python接口不好用,又考虑php也即将抛弃dg,就选择了很多人推荐的 PIL(python image library) 库。

首先是安装此库,http://www.pythonware.com/products/pil/index.htm

选择自己相应版本和平台进行安装,安装文档写的还算清楚。

然后是代码实现:

  1. import Image, ImageDraw, ImageFont, md5, random,cStringIO,util
  2. def show(request):
  3.     im = Image.new('RGBA',(52,18),(50,50,50,50))
  4.     draw = ImageDraw.Draw(im)
  5.     rands = util.rand(4)  //自己写的一个取随机字符串的函数
  6.     draw.text((2,0), rands[0], font=ImageFont.truetype("tahomabd.TTF", random.randrange(12,18)), fill='white')
  7.     draw.text((14,0), rands[1], font=ImageFont.truetype("tahomabd.TTF", random.randrange(12,18)), fill='yellow')
  8.     draw.text((27,0), rands[2], font=ImageFont.truetype("tahomabd.TTF", random.randrange(12,18)), fill='yellow')
  9.     draw.text((40,0), rands[3], font=ImageFont.truetype("tahomabd.TTF", random.randrange(12,18)), fill='white') 
  10.     del draw
  11.     request.session['checkcode'] = rands
  12.     buf = cStringIO.StringIO()
  13.     im.save(buf, 'gif')
  14.     return HttpResponse(buf.getvalue(),'image/gif')

修改urls.py文件

  1. #check code
  2.     (r'^checkcode/','view.checkcode.show'),

再访问 http://127.0.0.1/checkcode/ 既可看到效果。

官方的手册写的比较惨,属于找什么没什么。顺便把网上找到的一个写的不错的文档传送来:http://nadiana.com/pil-tutorial-basic-advanced-drawing

django中关于静态文件那些事

作者 : admin 于 2010年03月20日, 17:10:12
2010
03-20

那个500错误快把我整死了,结果才分析可能django把静态文件当脚本处理了。

对于线上部署,完全可以用rewrite的方式进行解决。可本机调试,用的是自带的server,可搞死人了。

不过搜索后发现,django解决这个问题了,使用一个叫做 django.views.static.serve 的方法处理这些静态文件。

实现代码如下:

  1. 在/urls.py 文件中
  2. from os import path
  3. 底下增加
  4. if settings.DEBUG:
  5.     urlpatterns += patterns('', (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': path.join(path.dirname(__file__),'static')}), )
  6. </path>

然后,把所有静态文件放到 static 目录下,即可。

不过这种方式只适合开发环境,在线上的时候还是需要把这个问题交给httpserver

小改EditPlus打造python开发环境

作者 : admin 于 2010年01月10日, 21:00:44
2010
01-10

editplus默认是不支持python开发的,但官方提供了相关的支持:

http://www.editplus.com/dn.cgi?python3.zip

在 菜单->工具选择->语法 中,可以新建语法类型 python,扩展名 py,语法文件为python.stx,自动完成文件为python.acp

即可。

django进程管理器

作者 : admin 于 2009年12月16日, 16:42:49
2009
12-16

nginx+php,php有个进程管理器,为php-fpm,Django没有,网上大概看了看,找出了几段,小改一下,能用了。

  1. #!/bin/bash
  2. siteroot="/home/project/sun"
  3. sitename="http://python.sunboyu.cn"
  4. cd $siteroot
  5. if [ $# -lt 1 ];then
  6.     echo "Usages: server.sh [start|stop|restart]"
  7.     exit 0
  8. fi
  9.  
  10. if [ $1 = start ];then
  11.     isrun=`ps aux|grep "manage.py runfcgi"|grep -v "grep"|wc -l`
  12.     if [ $isrun -eq 1 ];then
  13.         echo $sitename" has running!"
  14.         exit 0
  15.     else
  16.         python manage.py runfcgi method=threaded host=127.0.0.1 port=8000 --settings=settings
  17.         echo $sitename"is running!!"
  18.     fi
  19. elif [ $1 = stop ];then
  20.     djid=`ps aux|grep "manage.py runfcgi"|grep -v "grep"|awk '{print $2}'`
  21.     kill -9 $djid
  22.     echo $sitename" is stop!"
  23. elif [ $1 = restart ];then
  24.     djid=`ps aux|grep "manage.py runfcgi"|grep -v "grep"|awk '{print $2}'`
  25.     kill -9 $djid
  26.     echo $sitename" is stop!!"
  27.     python manage.py runfcgi method=threaded host=127.0.0.1 port=8000 --settings=settings
  28.     echo $sitename" is start!!"
  29. else
  30.     echo "Usages: server.sh [start|stop|restart]"
  31. fi

django+nginx的部分配置

作者 : admin 于 2009年12月16日, 11:26:55
2009
12-16

nginx的配置,特别感谢爱词霸吕同学,发扬了开源共享的精神,大大缩短了我的调试成本。

  1. server {
  2.     listen 80;
  3.     server_name python.sunboyu.cn;
  4.     location / {
  5.           fastcgi_pass 127.0.0.1:8000;
  6.           fastcgi_buffers      16  128k;
  7.           fastcgi_ignore_client_abort  on;
  8.           fastcgi_read_timeout 60;
  9.  
  10.           fastcgi_param PATH_INFO $fastcgi_script_name;
  11.           fastcgi_param REQUEST_METHOD $request_method;
  12.           fastcgi_param QUERY_STRING $query_string;
  13.           fastcgi_param CONTENT_TYPE $content_type;
  14.           fastcgi_param CONTENT_LENGTH $content_length;
  15.           fastcgi_param SERVER_PROTOCOL  $server_protocol;
  16.           fastcgi_param SERVER_PORT      $server_port;
  17.           fastcgi_param SERVER_NAME  $server_name;
  18.  
  19.           fastcgi_pass_header Authorization;
  20.           fastcgi_intercept_errors off;
  21.  
  22.     }
  23. }

同时附上一个额外的文档,nginx变量跟cgi协议的对应关系。
注:在配置中,并不是所有的变量必须加上,而是根据环境选择其中应该有的变量,至于具体加哪些变量,得求助高人了。

  1. #    Fast CGI param reference
  2. #    fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  3. #    fastcgi_param    QUERY_STRING  $query_string;
  4. #    fastcgi_param    REQUEST_METHOD  $request_method;
  5. #    fastcgi_param    CONTENT_TYPE  $content_type;
  6. #    fastcgi_param    CONTENT_LENGTH  $content_length;
  7. #    fastcgi_param    GATEWAY_INTERFACE  CGI/1.1;
  8. #    fastcgi_param    SERVER_SOFTWARE  nginx;
  9. #    fastcgi_param    SCRIPT_NAME  $fastcgi_script_name;
  10. #    fastcgi_param    REQUEST_URI  $request_uri;
  11. #    fastcgi_param    DOCUMENT_URI  $document_uri;
  12. #    fastcgi_param    DOCUMENT_ROOT  $document_root;
  13. #    fastcgi_param    SERVER_PROTOCOL  $server_protocol;
  14. #    fastcgi_param    REMOTE_ADDR  $remote_addr;
  15. #    fastcgi_param    REMOTE_PORT  $remote_port;
  16. #    fastcgi_param    SERVER_ADDR  $server_addr;
  17. #    fastcgi_param    SERVER_PORT  $server_port;
  18. #    fastcgi_param    SERVER_NAME  $server_name;

django笔记3-DEMO篇

作者 : admin 于 2009年12月15日, 21:06:11
2009
12-15

1、创建一个project(可理解为站点)

django-admin.py startproject project1

发现新建了一个文件夹 project1

2、创建一个app(可理解为一个……)

python manage.py app1

发现多了一个文件夹 app1

3 、vi ./app1/views.py 增加代码

  1. from django.http import HttpResponse
  2. def index(self,request):
  3.     return HttpResponse('hello test')

4、vi ./urls.py 增加代码
( r’^tests/’ , ‘project1.app1.views.index’ ),

5、启动服务

python manage.py runserver domain.com:8000

然后在浏览器打 domain.com:8000/tests

如果能看到 hello test则证明配置成功。

如果不成功,看debug信息吧,debug默认是开启的。

另外我自己配置使用fastcgi方式运行python,python manage.py runfcgi host=127.0.0.1 port=8000,然后用nginx代理访问。两种方式还有所不同,具体的不同点暂时还不知道,希望知道这些差别的大大们多加提示,继续研究中。

django笔记2-配置篇

作者 : admin 于 2009年12月15日, 20:37:59
2009
12-15

1、升级linux的python为最新版本

ln -s /usr/bin/python /opt/python**{your install path}**/bin/python

2、设置django-admin.py至系统命令

ln -s /opt/python**{your install path}**/lib/python2.5/site-packages/django/bin/django-admin.py /usr/bin/django-admin.py

然后查看 django-admin.py –version

回显版本正确,则证明系统配置成功。

django笔记1-安装篇

作者 : admin 于 2009年12月14日, 19:02:47
2009
12-14

1、安装django,当然要安装python,我安装的python2.5

./configure –prefix=你的路径

2、安装mysqldb

这个可以看这篇文章 http://www.sunboyu.cn/2009/04/22/python25mysqldb122%E5%AE%89%E8%A3%85.shtml

3、安装easl_install

http://pypi.python.org/pypi/setuptools 我下的源码,按照提示安装就行

4、使用easl_install安装flup

地址 http://www.saddi.com/software/flup/dist/flup-1.0.2-py2.5.egg

5、安装django1.1

python setup install

到这里大体就算安装完了,底下配置。

Python写的数据库备份程序

作者 : admin 于 2009年04月22日, 01:55:00
2009
04-22

下载地址:mysqlbak

  1. #!/var/opt/python-2.5/bin/python
  2. import os
  3. import time
  4. import MySQLdb
  5.  
  6.  
  7. CFG = {}
  8. CFG['root'] = {}
  9. CFG['root']['hostname'] = 'localhost'
  10. CFG['root']['username'] = 'root'
  11. CFG['root']['password'] = 'test'
  12.  
  13.  
  14. CFG['mysqldump'] = '/opt/mysql-5.0.22/bin/mysqldump'
  15.  
  16. CFG['time'] = time.strftime("%Y-%m-%d", time.localtime(time.time()) )
  17.  
  18. CFG['bakpath'] = '/tmp/' + CFG['time']
  19. CFG['mainbak'] = '/home/sunboyu/databak/' + CFG['time']
  20.  
  21.  
  22. if os.path.exists( CFG['bakpath'] ) == False:
  23.     os.mkdir( CFG['bakpath'] )
  24. if os.path.exists( CFG['mainbak'] ) == False:
  25.     os.mkdir( CFG['mainbak'] )
  26.  
  27. def mysql_database_bak( database ):
  28.     global CFG
  29.     DIR = CFG['bakpath'] + "/" + database
  30.     if os.path.exists( DIR )==False:
  31.         os.mkdir( DIR )
  32.     conn = MySQLdb.connect( host = CFG['root']['hostname'] , user = CFG['root']['username'] , passwd = CFG['root']['password'] , db = database )
  33.     db = conn.cursor()
  34.     sql = "show tables";
  35.     db.execute( sql )
  36.     result = {}
  37.     for recordline in db.fetchall():
  38.         os.system( CFG['mysqldump'] + " --opt  " + database + " " + recordline[0] + " -u" + CFG['root']['username'] + " -p" + CFG['root']['password'] + " > " + DIR + "/" + database + "_" + recordline[0] + ".sql" )
  39.     os.system( "tar cvf " + CFG['bakpath'] + "/" + database + ".tar.gz " +  CFG['bakpath'] + "/" + database )
  40.     os.system( "mv " + CFG['bakpath'] + "/" + database + ".tar.gz " + CFG['mainbak'] + '/' )
  41.  
  42.  
  43. conn = MySQLdb.connect( host = CFG['root']['hostname'] , user = CFG['root']['username'] , passwd = CFG['root']['password'] , db = 'test' )
  44. sql = "show databases";
  45. db = conn.cursor()
  46. db.execute( sql )
  47. result = {}
  48. bigcount = 0
  49. for recordline in db.fetchall():
  50. littlecount = 0
  51. result[bigcount] = {}
  52. for colnum in db.description:
  53.     result[bigcount][colnum[0]] = recordline[littlecount]
  54.     littlecount += 1
  55. bigcount += 1
  56.  
  57.  
  58. for tables in result:
  59.     mysql_database_bak( result[tables]['Database'] )
  60.  
  61. os.system( "rm -rf /tmp/" + CFG['time'] )  #警告 rm -rf 这个命令相当危险,使用一定要谨慎

python2.5+MySQLdb1.2.2安装

作者 : admin 于 2009年04月22日, 00:04:12
2009
04-22

最近比较喜欢用python写一些shell,又因为要跟mysql交互,所以安装python2.5+MySQLdb1.2.2。

选择python而没有选择perl,c之类,是因为python语法相对简单,适合我。其实php也可以,但linux默认安装python并大量使用,而并不默认安装PHP。

在安装过程中遇到很多问题,暂不罗列,google是半万能的,多尝试。

使用这两个版本,是因为在编译过程中的问题,逼我仔细阅读了产品稳当,发现版本依赖性很强,最终选择的这两个。

python编译很简单 ./configure –prefix=/***** 就OK了。

MySQLdb的安装也很简单,但首先要修改site.cfg的参数,其中threadsafe和mysql_config的值要根据情况修改。

python setup.py build
(如果必要,中间运行这个 ln -s /opt/mysql-5.0.22/lib/libmysqlclient.a ./build/lib.linux-x86_64-2.4/_mysql.so 路径自己调整)
python setup.py install

 Page 1 of 2  1  2 »