Django+SAE=个人博客 二
Django+SAE=个人博客 二
卜星星 发表于2年前
Django+SAE=个人博客 二
  • 发表于 2年前
  • 阅读 213
  • 收藏 1
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

以下内容中,所有提到jackerb都是我自己的项目名称,所以需要根据自己的来设定。

参考资料:Django Web开发指南.pdf 2009年5月第1版


现在我们来启用Django的admin功能,并且连接上sae上的mysql

  1. 编辑jackerb/settings.py文件

在INSTALLED_APPS里面,去掉django.contrib.admin前面的#,如下所示:

2. 编辑jackerb/urls.py文件

去掉admin行的注释,如下所示:

3. 编辑jackerb/settings.py文件,增加mysql设置

import os


if 'SERVER_SOFTWARE' in os.environ:

    from sae.const import (

        MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASS, MYSQL_DB

    )

else:

    # Make `python manage.py syncdb` works happy!

    MYSQL_HOST = 'w.rdc.sae.sina.com.cn'

    MYSQL_PORT = '3307'

    MYSQL_USER = '你自己的Access Key'

    MYSQL_PASS = '你自己的Secret Key'

    MYSQL_DB   = 'app_jackerb'


from sae._restful_mysql import monkey

monkey.patch()


DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.

        'NAME': MYSQL_DB,                      # Or path to database file if using sqlite3.

        # The following settings are not used with sqlite3:

        'USER': MYSQL_USER,

        'PASSWORD': MYSQL_PASS,

        'HOST': MYSQL_HOST,                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.

        'PORT': MYSQL_PORT,                      # Set to empty string for default.

    }

}


现在设置完这些文件了,那么就要在SAE上开启mysql服务吧

  1. 在SAE上oncedo应用左侧点击mysql,然后选择共享型Mysql,直接选择初始化mysql,之后点击,管理mysql,现在你可以看到,你有一个数据库名叫app_jackerb,和你在settings.py里设置的MYSQL_DB名字一样。

现在就可以在本地执行python manage.py syncdb,这样就可以远程创建各种表了。这里会让我们设置用户名和密码,就是登录admin需要用到的。现在是本地执行,但是操作的是SAE上的mysql,如果想要使用本地的mysql可以这样设置:

MYSQL_HOST = 'localhost'

MYSQL_PORT = '3306'

MYSQL_USER = 'root'

MYSQL_PASS = 'root'

MYSQL_DB   = 'app_jackerb'

就是把else下面的换成这些,就可以在本地mysql建表了,我一开始就是这么做的,我本来想在本地Mysql建表,之后导出sql,直接去SAE上的mysql里执行,但是搞了好久,也查了很多,就是建出来后不能用。最后我放弃了,使用了本地直接操作SAE上mysql的办法。在使用本地的mysql时,设置好了,这时执行python manage.py syncdb,有可以遇到一个问题,我自己遇到过,报错是这样的:

Traceback (most recent call last):

  File "manage.py", line 10, in <module>

    execute_from_command_line(sys.argv)

  File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 453, in execute_from_command_line

    utility.execute()

  File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 392, in execute

    self.fetch_command(subcommand).run_from_argv(self.argv)

  File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 272, in fetch_command

    klass = load_command_class(app_name, subcommand)

  File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 77, in load_command_class

    module = import_module('%s.management.commands.%s' % (app_name, name))

  File "/Library/Python/2.7/site-packages/django/utils/importlib.py", line 35, in import_module

    __import__(name)

  File "/Library/Python/2.7/site-packages/django/core/management/commands/syncdb.py", line 8, in <module>

    from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal

  File "/Library/Python/2.7/site-packages/django/core/management/sql.py", line 9, in <module>

    from django.db import models

  File "/Library/Python/2.7/site-packages/django/db/__init__.py", line 40, in <module>

    backend = load_backend(connection.settings_dict['ENGINE'])

  File "/Library/Python/2.7/site-packages/django/db/__init__.py", line 34, in __getattr__

    return getattr(connections[DEFAULT_DB_ALIAS], item)

  File "/Library/Python/2.7/site-packages/django/db/utils.py", line 93, in __getitem__

    backend = load_backend(db['ENGINE'])

  File "/Library/Python/2.7/site-packages/django/db/utils.py", line 27, in load_backend

    return import_module('.base', backend_name)

  File "/Library/Python/2.7/site-packages/django/utils/importlib.py", line 35, in import_module

    __import__(name)

  File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 17, in <module>

    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Users/xx/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.10-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

  Referenced from: /Users/xx/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.10-intel.egg-tmp/_mysql.so

  Reason: image not found

这其实就是mysql的lib没有在搜索路径里,位置在/usr/local/mysql/lib,所以把这个加入搜索路径就可以了,执行:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

然后就可以执行python manage.py syncdb了,效果如下:

执行完后,在SAE上的mysql中数据库app_jackerb里就有了很多表了。

现在就去看看我们的admin吧,地址是这样的:

http://jackerb.sinaapp.com/admin/

怎么样,是不是出问题了,问题大概是这些内容:

Traceback (most recent call last):
  File "/usr/local/sae/python/lib/python2.7/site-packages/sae/__init__.py", line 18, in new_app
    return app(environ, start_response)
  File "/usr/local/sae/python/3rd/django-1.5/django/core/handlers/wsgi.py", line 236, in __call__
    self.load_middleware()
  File "/usr/local/sae/python/3rd/django-1.5/django/core/handlers/base.py", line 45, in load_middleware
    for middleware_path in settings.MIDDLEWARE_CLASSES:
  File "/usr/local/sae/python/3rd/django-1.5/django/conf/__init__.py", line 52, in __getattr__
    self._setup(name)
  File "/usr/local/sae/python/3rd/django-1.5/django/conf/__init__.py", line 47, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/sae/python/3rd/django-1.5/django/conf/__init__.py", line 132, in __init__
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'oncedo.settings' (Is it on sys.path?): No module named _restful_mysql

这个问题当时困扰我好久,开始我就在网上各种查,就是没有合适的方法解决,后来,我仔细一看报错信息,

No module named _restful_mysql

这里提到了_restful_mysql,在setting.py设置mysql时,有这样两句:

from sae._restful_mysql import monkey

monkey.patch()

既然找不到这个模块,那么我就把这两句注释掉了(前面加上#号),那么注释掉就可以了吗?

注释掉我们就可以正常的访问http://jackerb.sinaapp.com/admin/了,但是如果我们需要同步数据库的时候,还是需要

打开这两句的注释,因为没有这两句,就执行不了python manage.py syncdb。所以,在我们需要用这个命令的时候,要打开这两句的注释。不用的时候再注释掉。


OK了,现在就可以正常的看到http://jackerb.sinaapp.com/admin/的内容了,但是呢,现在看到的好像太简陋了,跟我们在本地运行的时候看到的不一样。那么下一节,就来解决这个问题,先睡觉了今天。


共有 人打赏支持
粉丝 23
博文 110
码字总数 68736
×
卜星星
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: