内容正在载入中,请稍后……
公告
搜索
统计
其他
29 Jul.2013

SAE Python Django试用笔记(二) 雨

作者: 我就是个世界   分类:技术&学习 » Django   出处:本站原创            | |
笔记二: 创建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', 分享到QQ空间
最后编辑: 我就是个世界 编辑于July 29, 2013 14:05
时间:14:03 评论(0) 引用(0) 阅读(8621) Tags: , , ,
发表评论
  昵称 [注册]
  密码 (游客无需密码)
  网址
  电邮
OpenID登入 权限选项 表情