文档章节

Django+SAE=个人博客 二

卜星星
 卜星星
发布于 2015/10/14 22:40
字数 1357
阅读 231
收藏 1

以下内容中,所有提到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/的内容了,但是呢,现在看到的好像太简陋了,跟我们在本地运行的时候看到的不一样。那么下一节,就来解决这个问题,先睡觉了今天。


© 著作权归作者所有

共有 人打赏支持
卜星星
粉丝 27
博文 111
码字总数 68736
作品 0
海淀
程序员
私信 提问
Django+SAE个人博客 七

以后的博客就记录在我自己的个人博客下了,这是第七节的地址: http://jackerb.sinaapp.com/blog/7/ 扫码关注,更多惊喜

卜星星
2015/10/19
37
0
Django+SAE个人博客 四

参考资料:Django Web开发指南.pdf 2009年5月第1版 以下内容中,所有提到jackerb都是我自己的项目名称,所以需要根据自己的来设定。 已经有了admin后台管理了,那么,现在就增加上blog应用,...

卜星星
2015/10/15
54
0
Django+SAE个人博客 五

参考资料:Django Web开发指南.pdf 2009年5月第1版 以下内容中,所有提到jackerb都是我自己的项目名称,所以需要根据自己的来设定。 上节我们已经可以编辑自己的博客了,那么这一节就把我们的...

卜星星
2015/10/15
39
0
Django+SAE=个人博客 一

本地开发环境: 操作系统:OS X Yosemite Python版本:2.7.6 Django版本:1.5.12 远程: 使用新浪的SAE 参考资料:Django Web开发指南.pdf 2009年5月第1版,根据书中第二章完成,建议先在本地...

卜星星
2015/10/14
114
0
Django+SAE个人博客 九

第九节地址: http://jackerb.sinaapp.com/blog/9/ 扫码,获取更多精彩内容

卜星星
2015/10/19
69
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 源代码和 C 源代码的运行区别

与其他程序的执行方式和编译方式不同。 Java 源代码需要进行编译成字节码后在 Java 虚拟机上运行,这样 Java 程序能够保持独立性和跨平台功特性。 请参考下图。 https://www.cwiki.us/pages...

honeymose
今天
3
0
Apache限定目录解析PHP,限制user_agent,PHP相关的配置

Apache限定目录解析PHP 配置前访问upload/index.php [root@test-a ~]# curl -x192.168.77.139:80 'www.test.com/upload/index.php'This is upload diretory 配置,/usr/local/apache2.4/......

野雪球
今天
5
0
java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
今天
6
0
Kubernetes里的secret最基本的用法

Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。 Secret可以以Volume或者环境变量的方式使用。 使用如下命令...

JerryWang_SAP
昨天
5
0
2018-11-20学习笔记

1. python数据类型: 给变量赋值什么样的值,变量就是什么样的类型 给变量赋值整数,变量就是整数类型 给变量赋值字符串,变量就是字符串类型 123 和“123”一样吗? 在python中 单引号 与双...

laoba
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部