SAE Python Django试用笔记(二)
作者:我就是个世界
发表于:2013-07-29
笔记二: 创建Django APP实战
我的项目名为feifanlv,那么在这个项目下创建一个名为blog的APP。
执行: python manage.py startapp blog
会在项目feifanlv下面创建一个名为blog的目录,里面有四个文件。
[code]
__init__.py
models.py
views.py
tests.py
[/code][separator]
设计数据模型: models.py
[code]
# -*- 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
[/code]
-----------------------------------------
[code]# -*- coding: utf-8 -*-[/code]
这行代码表示py文件可以支持中文。如:
[code]title = models.CharField(u"标题", max_length=100)[/code]
写完模型就可以同步数据库了。在同步数据库之前,先要进行数据库配置,settings.py的修改:
直接使用mysql数据库。
[code]
# -*- 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'
)
其它的省略.....
[/code]
这样就配置好了数据库,并启用了django admin后台
执行 数据库 同步命令: python manage.py syncdb
启动开发服务器: python manage.py runserver
目前还不能访问后台,因为还没有配置URL
修改travelsite/urls.py
[code]
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)),
)
[/code]
在travelsite/urls.py中添加blog的解析:
[code](r'^blog/', include('travelsite.blog.urls')),[/code]
在blog中添加文件urls.py,内容如下
[code]
from django.conf.urls.defaults import *
urlpatterns = patterns('',
url(r'^$', 'travelsite.blog.views.index'),
)
[/code]
在blog/views.py中添加index视图,使得blog首页解析到该视图
[code]
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, - This is blog firstpage.")
[/code]
此时,你可以通过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,或者
[code]
TemplateSyntaxError at /admin/blog/post/add/
Caught ViewDoesNotExist while rendering: Could not import blog.views. Error was: No module named blog.views
[/code]
等等错误的原因都是因为你的相关代码中没有把项目名写进去,例如:
INSTALLED_APPS中,你的新应用要这样写
[code]'travelsite.blog'[/code]
直接写'blog'是不可以的。
或者urls.py中这样写也是不行的,
[code]url(r'^$', 'blog.views.index'),[/code]
正确写法是:
[code]url(r'^$', 'travelsite.blog.views.index'),[/code]
具体原因我认为可能和SAE的django版本有关,SAE默认的django版本是1.2.7.
但是本地装的也是1.2.7,并未出现此问题!
但是看到有人说在最新的1.4版本中,在INSTALLED_APPS中只需要添加app名就可以了,即:
'blog',
我的项目名为feifanlv,那么在这个项目下创建一个名为blog的APP。
执行: python manage.py startapp blog
会在项目feifanlv下面创建一个名为blog的目录,里面有四个文件。
[code]
__init__.py
models.py
views.py
tests.py
[/code][separator]
设计数据模型: models.py
[code]
# -*- 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
[/code]
-----------------------------------------
[code]# -*- coding: utf-8 -*-[/code]
这行代码表示py文件可以支持中文。如:
[code]title = models.CharField(u"标题", max_length=100)[/code]
写完模型就可以同步数据库了。在同步数据库之前,先要进行数据库配置,settings.py的修改:
直接使用mysql数据库。
[code]
# -*- 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'
)
其它的省略.....
[/code]
这样就配置好了数据库,并启用了django admin后台
执行 数据库 同步命令: python manage.py syncdb
启动开发服务器: python manage.py runserver
目前还不能访问后台,因为还没有配置URL
修改travelsite/urls.py
[code]
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)),
)
[/code]
在travelsite/urls.py中添加blog的解析:
[code](r'^blog/', include('travelsite.blog.urls')),[/code]
在blog中添加文件urls.py,内容如下
[code]
from django.conf.urls.defaults import *
urlpatterns = patterns('',
url(r'^$', 'travelsite.blog.views.index'),
)
[/code]
在blog/views.py中添加index视图,使得blog首页解析到该视图
[code]
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, - This is blog firstpage.")
[/code]
此时,你可以通过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://
-------------------------------------------------------------------
这期间遇到了两个问题,第一个用SVN同步的时候经常失败。 可能网络不稳定。 第二,同步到SAE上之后报错。
本地一切正常,上传到SAE后报错,找不到模块No models,或者
[code]
TemplateSyntaxError at /admin/blog/post/add/
Caught ViewDoesNotExist while rendering: Could not import blog.views. Error was: No module named blog.views
[/code]
等等错误的原因都是因为你的相关代码中没有把项目名写进去,例如:
INSTALLED_APPS中,你的新应用要这样写
[code]'travelsite.blog'[/code]
直接写'blog'是不可以的。
或者urls.py中这样写也是不行的,
[code]url(r'^$', 'blog.views.index'),[/code]
正确写法是:
[code]url(r'^$', 'travelsite.blog.views.index'),[/code]
具体原因我认为可能和SAE的django版本有关,SAE默认的django版本是1.2.7.
但是本地装的也是1.2.7,并未出现此问题!
但是看到有人说在最新的1.4版本中,在INSTALLED_APPS中只需要添加app名就可以了,即:
'blog',
请发表您的评论