标题:SAE Python Django试用笔记(二) 出处:Husw!OnRoad 在路上 时间:Mon, 29 Jul 2013 14:03:32 +0000 作者:我就是个世界 地址:https://www.husw.net/blog/post/1492/ 内容: 笔记二: 创建Django APP实战 我的项目名为feifanlv,那么在这个项目下创建一个名为blog的APP。 执行: python manage.py startapp blog 会在项目feifanlv下面创建一个名为blog的目录,里面有四个文件。 __init__.py models.py views.py tests.py 设计数据模型: models.py # -*- coding: utf-8 -*- from django.db import models from django.contrib.auth.models import User class Post(models.Model): author = models.ForeignKey(User, related_name='posts') title = models.CharField(max_length=100) body = models.TextField() pub_date = models.DateTimeField(auto_now_add=True) up_date = models.DateTimeField(auto_now=True) def __unicode__(self): return self.title ----------------------------------------- # -*- coding: utf-8 -*- 这行代码表示py文件可以支持中文。如: title = models.CharField(u"标题", max_length=100) 写完模型就可以同步数据库了。在同步数据库之前,先要进行数据库配置,settings.py的修改: 直接使用mysql数据库。 # -*- coding: utf-8 -*- # Django settings for travelsite project. import os DEBUG = True #同步到SAE的时候记得设置为 False TEMPLATE_DEBUG = DEBUG PROJECT_PATH = os.path.abspath(os.path.dirname(__file__)) ADMINS = ( ('Husw', 'husw.net@xxx.com'), ) MANAGERS = ADMINS if 'SERVER_SOFTWARE' in os.environ: # SAE 用,根据 SAE MYSQL数据库配置填写下面参数,一般都是这样的 import sae.const MYSQL_DB = sae.const.MYSQL_DB MYSQL_USER = sae.const.MYSQL_USER MYSQL_PASS = sae.const.MYSQL_PASS MYSQL_HOST_M = sae.const.MYSQL_HOST MYSQL_HOST_S = sae.const.MYSQL_HOST_S MYSQL_PORT = sae.const.MYSQL_PORT else: # Local 本地调试用,便于导出数据库,根据本地MYSQL数据库填写下面参数 MYSQL_DB = 'SAE_travelsite' MYSQL_USER = 'root' MYSQL_PASS = '123456' MYSQL_HOST_M = '127.0.0.1' MYSQL_HOST_S = '127.0.0.1' MYSQL_PORT = '3306' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': MYSQL_DB, 'USER': MYSQL_USER, 'PASSWORD': MYSQL_PASS, 'HOST': MYSQL_HOST_M, 'PORT': MYSQL_PORT, } } INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', # Uncomment the next line to enable the admin: 'django.contrib.admin', # Uncomment the next line to enable admin documentation: 'django.contrib.admindocs', 'travelsite.blog' ) 其它的省略..... 这样就配置好了数据库,并启用了django admin后台 执行 数据库 同步命令: python manage.py syncdb 启动开发服务器: python manage.py runserver 目前还不能访问后台,因为还没有配置URL 修改travelsite/urls.py from django.conf.urls.defaults import * from django.conf import settings from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^$', 'travelsite.views.hello'), (r'^admin/doc/', include('django.contrib.admindocs.urls')), (r'^admin/', include(admin.site.urls)), ) 在travelsite/urls.py中添加blog的解析: (r'^blog/', include('travelsite.blog.urls')), 在blog中添加文件urls.py,内容如下 from django.conf.urls.defaults import * urlpatterns = patterns('', url(r'^$', 'travelsite.blog.views.index'), ) 在blog/views.py中添加index视图,使得blog首页解析到该视图 from django.http import HttpResponse def index(request): return HttpResponse("Hello, - This is blog firstpage.") 此时,你可以通过http://127.0.0.1:8888/admin/ 访问强大的django管理后台了。 访问blog前台http://127.0.0.1:8000/blog/ 你会看到: Hello, - This is blog firstpage. 然后SVN同步到SAE上,MYSQL数据库内容需要本地导出为SQL文件,然后到SAE该应用首页 》左侧服务管理 》MySQL 》管理MySQL 可以打开phpmyadmin工具(打不开的再刷新一遍就开了,我每次都得刷新一遍才能开),进行导入本地SQL文件。 导入完成后,你就可以访问你的SAE应用了。 http://.sinaapp.com ------------------------------------------------------------------- 这期间遇到了两个问题,第一个用SVN同步的时候经常失败。 可能网络不稳定。 第二,同步到SAE上之后报错。 本地一切正常,上传到SAE后报错,找不到模块No models,或者 TemplateSyntaxError at /admin/blog/post/add/ Caught ViewDoesNotExist while rendering: Could not import blog.views. Error was: No module named blog.views 等等错误的原因都是因为你的相关代码中没有把项目名写进去,例如: INSTALLED_APPS中,你的新应用要这样写 'travelsite.blog' 直接写'blog'是不可以的。 或者urls.py中这样写也是不行的, url(r'^$', 'blog.views.index'), 正确写法是: url(r'^$', 'travelsite.blog.views.index'), 具体原因我认为可能和SAE的django版本有关,SAE默认的django版本是1.2.7. 但是本地装的也是1.2.7,并未出现此问题! 但是看到有人说在最新的1.4版本中,在INSTALLED_APPS中只需要添加app名就可以了,即: 'blog', Generated by Bo-blog 2.1.2 beta 3