app-engine-patch是目前在GAE上支持django框架的最好的粘合剂
副标题: 准备将本博用django重构之简要备查信息
前提: 已经安装了Python 和 AppEngine SDK
1) 下载: app-engine-patch . 其实这就已经是可以运行的范例,可以作为项目的开始.
2) 本地运行演示
manage.py runserver
3) 根据运行警告:
WARNING 2009-12-03 14:51:09,358 dev_appserver.py:3370] Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: No module named _imaging
先安装 Python "PIL" module 这可以参考: 安装 PIL
4) 至于manage.py 的常用命令 可以通过
查看命令列表 manage.py help
查看命令详解: manage.py help cmdname
5)创建一个应用程序,比如:guestbook
manage.py startapp guestbook
然后将请将应用程序名称加入 /settings.py 文件的 INSTALLED_APPS 列表中,比如:
INSTALLED_APPS = (
...
'guestbook',
)
6)如果使用的是带关系数据库的 Django,则现在必须运行 manage.py syncdb 以创建必需的数据库表格。对于 App Engine,这一切都是实时进行的。
7)将应用程序加入全局网址路由。更改项目的全局 /urls.py 文件,比如:
urlpatterns = patterns('',
...
(r'^guestbook/', include('guestbook.urls')),
)
那么:; 如果您访问任意以 /guestbook/ 开头的网址,系统都将在应用程序特定的网址配置文件 /guestbook/urls.py 中查找以传送请求。
8) 现在可以开始你自己的开发了.
----------------------------------------------------
相关资源列表:
The Django Book
app-engine-patch Documentation
----------------------------------------------------
下面是零碎的备查信息:
1) 如何在Django Model中进行自定义表名?
答: 在对应表Model添加一个子类定义即可,如:
class Meta:
db_table = "Greeting"
2) 如何扩展Django User Model
答: 这是可以的,
这里有一个篇相关的文章:非profile方式扩展Django User Model可供参考.
为了防止某种原因原文消失,特意转载在此
但是貌似该文中提及的 所谓完美方案,无法实现,总是报: "AttributeError: type object 'User' has no attribute 'add_to_class'"
错误.
算了,还是采用官方提供的扩展方案吧! 无奈何Django官方指导的方式和Django tips: extending the User model
注意: 由于app-engine-patch中整合的Django和原生的Django有所不同,所以前面提及方法不适用了.具体请看 文档: Defining custom user models
简述如下:
yourapp/models.py 中的代码:
#from django.contrib.auth.models import User
from ragendja.auth.hybrid_models import User as OldUser
class User(OldUser):
class Meta:
db_table = "User"
newfield=db.StringProperty(default='blog.chaoskey.com')
注: 红颜色的类名 ,必须是 User,其他的名字会报错. 所以蓝颜色部分必须重命名
yourapp/settings.py 中的必须修改:
#AUTH_USER_MODULE = 'ragendja.auth.hybrid_models'
AUTH_USER_MODULE = 'yourapp.models'
具体使用时依然还是可以导入:
from django.contrib.auth.models import User
但是调用处用到User ,表面是django.contrib.auth.models的User,但实际上已经是 yourapp.models.User 了.
3)







