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',

分享:

扫一扫在手机阅读、分享本文

请发表您的评论