我想稍微远离 PHP 并学习 Python。为了使用 Python 进行 Web 开发,我需要一个框架来帮助处理模板和其他事情。
我有一个非生产服务器,用于测试所有 Web 开发内容。它是一个 Debian 7.1 LAMP 堆栈,运行 MariaDB 而不是常见的 MySQL-server 包。
昨天我安装了 Django 并创建了我的第一个项目,名为 firstweb。我还没有更改任何设置。
这是我的第一个大困惑。在教程中,我跟随那个人安装了 Django,开始了他的第一个项目,重新启动了 Apache,从那时起 Django 就开始工作了。他打开浏览器,毫无问题地进入了 Django 默认页面。
但是,我必须 cd 进入我的 firstweb 文件夹并运行
python manage.py runserver myip:port
而且它有效。没问题。但我想知道它是否应该像这样工作,这是否会导致问题?
我的第二个问题是我想设置它以便它使用我的 MySQL 数据库。我进入/firstweb/firstweb 下的 settings.py,我看到了 ENGINE 和 NAME,但我不确定放在这里的内容。
然后在 USER、PASSWORD 和 HOST 区域中,这是我的数据库及其凭据吗?如果我使用 localhost,我可以将 localhost 放在 HOST 区域吗?
最佳答案
MySQL support很容易添加。在您的 DATABASES
字典中,您将有这样的条目:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DB_NAME',
'USER': 'DB_USER',
'PASSWORD': 'DB_PASSWORD',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
}
}
您还可以选择使用 MySQL option files ,从 Django 1.7 开始。您可以通过像这样设置 DATABASES
数组来完成此操作:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/path/to/my.cnf',
},
}
}
您还需要使用与上述类似的设置创建 /path/to/my.cnf
文件
[client]
database = DB_NAME
host = localhost
user = DB_USER
password = DB_PASSWORD
default-character-set = utf8
在 Django 1.7 中使用这种新的连接方法,了解建立连接的顺序很重要:
1. OPTIONS.
2. NAME, USER, PASSWORD, HOST, PORT
3. MySQL option files.
In other words, if you set the name of the database in OPTIONS, this will take precedence over NAME, which would override anything in a MySQL option file.
如果你只是在本地机器上测试你的应用程序,你可以使用
python manage.py runserver
添加 ip:port
参数允许您自己以外的机器访问您的开发应用程序。一旦你准备好部署你的应用程序,我建议你看一下关于 Deploying Django 的章节。在 djangobook
Mysql 默认字符集通常不是 utf-8,因此请确保使用此 sql 创建数据库:
CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin
如果您使用 Oracle's MySQL connector您的 ENGINE
行应如下所示:
'ENGINE': 'mysql.connector.django',
请注意,您首先需要在您的操作系统上安装 mysql。
brew install mysql (MacOS)
另外,python 3 的 mysql 客户端包已更改(MySQL-Client
仅适用于 python 2)
pip3 install mysqlclient
https://stackoverflow.com/questions/19189813/