Category Archives: Python
IN:Python Tags: Django, Python Comments:3使用Django 的admin做一个简单的应用:
一、安装WSGI
官方推荐使用WSGI模式,而不是mod_python方式在Apache上运行Django。拿Fedora为例,直接:
yum install mod_wsgi
就可以完成WSGI的安装
二、配置Apache
安装好mod_wsgi后,Apache的服务器配置里面会自动加入mod_wsgi的调用,所以只需要配置Django相关的部分:
#add for mod_wsig
Alias /media “/usr/lib/python2.5/site-packages/django/contrib/admin/media/”
AllowOverride All
Options None
Order allow,deny
Allow from all
WSGIScriptAlias /mmq /var/www/Django/mmq/apache/django.wsgi
这里我们假定项目名为mmq,位置在/var/www/Django/mmq
服务器访问的根目为/mmq(比如你访问这个应用需要使用地址:http://127.0.0.1/mmq/mmq/)
Alias /media是指定了Django访问静态文件的位置,因为我这里用到Django admin,所以需要把它指向Django admin静态文件的位置;当然你自己项目里面的模版文件会自动覆盖上面的设置。比如你可以mmq\templates\admin在这个位置创建一个index.html文件来自定义自己的admin主界面。
三、配置Django项目
刚才我们在http.conf文件中指定了一个django运行的根脚本,现在我们需要创建这个脚本:
django.wsgi:
import os
import sys
sys.path.append(‘/var/www/Django’)
os.environ['DJANGO_SETTINGS_MODULE'] = ‘mmq.settings’
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
urls.py配置:
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
from mmq.views import *
urlpatterns = patterns(”,
(r’^mmq/’, include(admin.site.urls)),
(r’^mmq/admin/’, include(admin.site.urls)),
)
这里把首地址直接指向了admin的登录页面。
settings.py配置:
DATABASE_NAME = ‘/var/www/Django/mmq/mmq.db’
MEDIA_ROOT = ‘/var/www/Django/mmq/’
ADMIN_MEDIA_PREFIX = ‘/media/’
TEMPLATE_LOADERS = (
‘django.template.loaders.filesystem.load_template_source’,
‘django.template.loaders.app_directories.load_template_source’,
# ‘django.template.loaders.eggs.load_template_source’,
)
MIDDLEWARE_CLASSES = (
‘django.middleware.common.CommonMiddleware’,
‘django.contrib.sessions.middleware.SessionMiddleware’,
‘django.contrib.auth.middleware.AuthenticationMiddleware’,
)
ROOT_URLCONF = ‘mmq.urls’
TEMPLATE_DIRS = (
‘/var/www/Django/mmq/templates/’,
)
INSTALLED_APPS = (
‘django.contrib.auth’,
‘django.contrib.sessions’,
‘django.contrib.contenttypes’,
# Uncomment the next line to enable the admin:
‘django.contrib.admin’,
‘mmq’,
)
在Linux上使用sqlite需要指定绝对路径,而且需要给Apache数据库所在父母录的写权限.
整合Django和WSGI有些麻烦,更详细的内容可以参考WSGI官方的文档:
http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango
关于使用Django admin 定制自己的应用在Django官方的文档中讲了不少,这里就不具体描述了。
想更改admin的CSS不过,不能像template里的文件一样,直接在app中写个来覆盖,路过的哪位知道的话麻烦留个言。
Django的设计、使用感觉挺不错的,可惜布署很是麻烦,下个别人写的app半天都运行不起来,自己写个app用Django自带的服务器运行没问题,可是移到Apache上又是一堆问题,如果能象PHP一样简单的布署那么Django应该会有更好的发展。
IN:Python Tags: PyFetion, Python Comments:50年初就看到飞信更新新的版本,但是原来的版本还是照常能用,就一直没理它,最近2008版本的协议据说很多地方用不了,抽空更新了一下PyFetion。移动官方于2010年9月15号发布了飞信2010正式版,所以新的PyFetion也将基于这个版本实现。
网上飞信的实现很多,不过很多要不是不开源,要不是实现过于麻烦;用 Python写这个飞信,的目的是为了方便一些用户订制,把飞信的功能折腾进自己的程序里、部署在服务器上做一些好玩的东西。
很多网上的飞信实现了http://xxx.xx.xx/api?p=136xxxxxxxx&pw=xxxx&t=136xxx&sms=hello这样的WEB接口, 为了安全起见大家在使用这样的接口的时候还是要多加留心。其实在dreamhost之类支持Python的主机上部署一个Python的应用还是很方便的,GAE上使用HTTP方式也是可以的。
svn更新记录:
http://code.google.com/p/pytool/source/detail?r=83
打包下载:
http://code.google.com/p/pytool/downloads/list
大概试了一下登录,发送消息,收消息都可以。还有不太完善的地方我会慢慢修正。
IN:Python Tags: PyFetion, Python Comments:10更新说明:
原引援引移动官方网站的说明:
尊敬的用户:
为了提升飞信系统安全性,于2010年7月25日起,飞信平台将停止对3.3及以下的低版本PC客户端提供支持,您将无法使用3.3及以下的低版本PC客户端登录飞信。您可以访问飞信官网下载频道http://feixin.10086.cn/download/下载并安装最新版本PC客户端后再次尝试登录。
对此给您带来的不便我们深表歉意,期待您一如既往的关注飞信!
飞信官方网站
2010-07-19
原引我飞信发布说明:
PyFetion?新版本发布,协议根据移动09.11.04的飞信版本:Fetion2008 3.5.2(安全加强版)
也就是说08版本的飞信还是能用的,(大家可以试着用08版的官方客户端登录一下)包括原有的登录验证方式,之所以这段时间不能用是移动增加了一个新的登录验证地址:https://uid.fetion.com.cn/ssiportal/SSIAppSignInV2.aspx,移动官方是使用XML的方式来传递这个参数,他们是新下传了一个ssi-app-sign-in-v2,我的程序没有很详细的分析XML,所以出错,现在解决的办法就是把PyFetion.py里面的
self.__sipc_url = “https://uid.fetion.com.cn/ssiportal/SSIAppSignIn.aspx”
改为:
self.__sipc_url = “https://uid.fetion.com.cn/ssiportal/SSIAppSignInV2.aspx”
一切正常。
收到好多邮件,还有博客上的留言,不过最近其它的事情比较多,而且很多人直接说都得换新协议了,所以怕没时间整,今天抽空看了下,发现没那么严重,我一向认为移动还是没腾讯那么狠的。
请移步:http://code.google.com/p/pytool/source/detail?r=79
PS:
amoblin同学修改的主要是针对Linux平台,所以我另外放了一个目录。
tanjelly同学的修改我就删掉了,新的协议似乎整的加密算法太多了,其实安全这个东西,没那么严重:-)
PS:
刚测试发现登录的时候密码简单要求输入验证码,以前只有官方客户端才要求输入,现在看来是强制了,我一会儿再改一下代码,把验证码存起来。但是还是建议改一具复杂点的密码,不然每次输入验证码可就惨了。
IN:Python, 编程相关 Tags: PyFetion, Python Comments:12tanjelly同学更新了PyFetion,原因是移动对认证方式的一些小的变化,并不是以前的协议完全不可以用了。具体的细节可以参考上面的连接。
google code的Issue怎么没有邮件通知呢?还是别人发邮件我才知道的:-(
IN:Python Tags: PyFetion, Python Comments:23可以支持分类(或者叫标签)的导出了。
PyFetion在google code页面加了一个下载连接,方便没有svn时直接下载代码;使用的是r49的版本
这似乎是一篇微博…
IN:Python, 编程相关 Tags: gae, PyFetion, Python Comments:25GAE上有一个cron jobs的功能,类似于Linux下的crontab,可以实现在指定规则的时间里去运行程序。利用这个功能和飞信的短信功能就完成一些简单的小应用,比如天气预报,服务器监控,股票大盘实时行情提醒等等。
拿服务器监控来说,我们先注册一个GAE账户,然后创建一个Application,下载一份GAE 的SDK,接下来就写代码了。
(以上过程请自行google之)
monitor.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#MIT License
#By : cocobear.cn@gmail.com
#
from google.appengine.api import urlfetch
from PyFetion import *
def get():
print('<html><body>')
url = 'http://61.236.244.162'
result = urlfetch.fetch(url)
if result.status_code == 200:
print('OK')
else:
fetion = PyFetion('136xxxx','123456','HTTP')
i = 0
while True:
try:
fetion.login(FetionOnline)
fetion.send_sms('服务器掉了!')
fetion.logout()
except:
if i > 5:
break
continue
print('</body></html>')
if __name__ == '__main__':
get()
很简单的代码,使用GAE的函数urlfetch.fetch来访问这个地址,如果失败调用PyFetion来发短信给自己做通知。
app.yaml:
application: pythoning
version: 1
runtime: python
api_version: 1
handlers:
- url: /console/.*
script: $PYTHON_LIB/google/appengine/ext/admin
login: admin
- url: /monitor
script: monitor.py
- url: /
static_files: index.html
upload: index.html
这里指定url映射的规则,访问pythoning.appspot.com/monitor就会执行monitor.py脚本。application需要填写你申请GAE应用时的名称,也就是这个二级域名pythoning,version:当前代码的版本。
index.html:
首页你可以做别的事,比如放个人主页,然后把自己域名指过来。
cron.yaml:
cron:
- description: watch http server
url: /monitor
schedule: every 1 minutes
timezone: Asia/Shanghai
关键的一个文件,对monitor这个url进行定时执行,这里是每分钟执行一次; 如果你是写天气预报,就可以写为 7:00 every day,每天早上7点发一次天气预报。
写完这些以后,运行命令:
ls demos/test
app.yaml cron.yaml index.html monitor.py PyFetion.py
python appcfg.py update demos/test
把你的代码提交到GAE服务器上,你可以在GAE的后台Cron Jobs看到:
/monitor
watch http server every 1 minutes (Asia/Shanghai)
2009/12/15 14:06:50 on time Success
在GAE上使用r49版本的PyFetion,请注释掉from select import select,如果只是像上面做提醒的话最后去掉下面的代码(824行):
self.get_personal_info()
if not self.get_contactlist():
d_print("get contactlist error")
return False
self.get("compactlist",self.__uri,self.contactlist.keys())
response = self.send()
code = self.get_code(response)
if code != 200:
return False
#self.get("PGGetGroupList",self.__uri)
#response = self.send()
self.get_offline_msg()
这里是获得了好友列表,然后给这些好友发一个上线的通知,如果你不想每次提醒的时飞信上的好友都看到你上线,那么就去掉这些,也会加快发送短信的速度。更进一步的优化,你可以去掉TCP通信的相关代码。
ok, 发挥你的想象力,play with GAE and PyFetion
Page 1 of 812345»...Last »