此文延續第一個Django應用程序_part1。html
打開mystic/settings.py。這是一個普通的Python模塊,其模塊變量表示Django配置 默認狀況下,配置使用SQLite。若是你是數據庫新手,或者你只是嘗試Django,這是最簡單的。SQLite包含在Python中,因此你不須要安裝其它任何東西來支持你的數據庫。
若是但願使用其它數據庫,在DATABASE'default'項目中修改如下的配置,以匹配你的數據庫鏈接設置:python
項目目錄中。os.path.join(BASE_DIR, 'db.sqlite3')。mysql
當鏈接到其它數據庫後端時,如Mysql,Oracle或PostagreSQL,將須要額外的鏈接參數。有關ENGINE如何指定其它數據庫類型,請參閱下面的設置,這個例子使用於Mysql:更多信息點我查看sql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite',
'USER': 'root',
'PASSWORD': '123',
'HOST': '192.168.56.31',
'PORT': '3306',
}
}
在和settings.py同級的__init__.py文件中添加以下內容:數據庫
告訴Django使用pymysql連接mysql數據庫django
import pymysql pymysql.install_as_MySQLdb()
若是使用SQLite以外的數據庫,請確保您已經建立了一個數據庫。在數據庫的交互式提示符中使用"CREATE DATABASE database_name';還要確保mysite/settings.py中提供的數據庫用戶具備"建立數據庫"權限,這容許自動建立測試數據庫。若是您使用的是SQLite,則無需事先建立任何內容-數據庫文件將在須要時自動建立。後端
當您編輯mysite/settings.py時,將TIME_ZONE設置爲您的時區。瀏覽器
另外,請注意文件INSTALLED_APPS的頭部設置,它包含在此Django項目中激活的全部Django應用程序的名稱。應用程序能夠在多個項目中使用,您能夠將其打包分發給其它項目。服務器
默認狀況下,INSTALLED_APPS包含如下應用程序,因此這些應用程序都附帶在Django中:session
其中一些應用程序至少須要一個數據庫表,所以咱們須要在數據庫中建立表,而後才能使用它們,請運行如下命令:
python3 manage.py migrate
migrate命令用來查看INSTALLED_APPS設置,並根據mysite/settings.py文件中的數據庫設置建立全部須要的數據庫表,應用程序還須要數據庫遷移。
在咱們的polls應用程序中,咱們將建立兩個模型:Question和Choice。Question有question和publication date兩個字段。Choice有兩個字段:choice text和vote tally。每一個
Chocie與Question對應。
編輯polls/models.py文件,以下所示:
from django.db import models # Create your models here. class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Chocie(models.Model): question = models.ForeignKey(Question,on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
每一個Model有一個類django.db.models.Model的類表示。每一個Model都有一個變量,每一個變量都表示模型中的數據庫字段。
每一個字段由字段類的實例表示,例如字符字段的CharField和數據時間的DateTimeField。這告訴Django每一個字段擁有什麼類型的數據。
每一個Field實例(例如question_text或pub_date)是該字段的名稱,以機器友好的格式。您將在您的Python代碼中使用此值,而且您的數據庫將使用它做爲列名稱。
您可使用可選的第一個位置參數Field來指定一我的類可讀的名稱。在Django的一些內省部分使用,它能夠做爲文檔。若是未提供此字段,Django
將使用機器可讀的名稱。在這個例子中,咱們只爲Question.pub_date定義了一個可讀的名字。對於該模型中的全部其它字段,該字段的機器可讀名稱將足以做爲其可讀的名稱。
一些字段類具備必須的參數。例如,CharField要求您給它一個max_length。這不只在數據庫模式中使用,並且用於驗證。
最後,請注意使用ForeignKey定義關係。這告訴Django每一個Chocie與Question對應。Django支持全部常見的數據關係:多對一,多對多和一一對應。
模型代碼給了Django不少信息,有了它,Django可以:
但首先咱們須要告訴咱們的項目,安裝polls應用程序。
提示:Django應用程序是「可插拔的」:您能夠在多個項目中使用應用程序,您能夠分發應用程序,由於它們沒必要與給定的Django安裝綁定。
要將該應用程序包含在咱們的項目中,咱們須要在設置中添加對其配置類的應用INSTALLED_APPS。PollsConfig類是在polls/apps.py文件中,所以其「點路徑」
爲"polls.apps.PollConfig"。編輯mysite/settings.py文件,並將"點路徑"添加到INSTALLED_APPS設置中。
INSTALLED_APPS = [ 'polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
如今Django知道包含polls應用程序。咱們運行另外一個命令:
python3 manage.py makemigrations polls
你應該看到相似如下內容:
Migrations for 'polls': polls/migrations/0001_initial.py - Create model Chocie - Create model Question - Add field question to chocie
經過運行makemigrations,你能夠告訴Django您對模型進行了一些更改(在這種狀況下,您已經建立了新的模型)。而且但願將更改存儲爲遷移。
遷移是Django如何存儲對模型(以及數據庫模式)的更改-它們只是磁盤上的文件。它是文件polls/migrations/001_initial.py。
有一個命令能夠爲您運行遷移並自動管理數據庫模式-這就是migrate。sqlmigrate命令接受遷移名稱並返回其SQL:
python3 manage.py sqlmigrate polls 0001
你應該看到相似如下內容:
BEGIN;
--
-- Create model Chocie
--
CREATE TABLE `polls_chocie` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `choice_text` varchar(200) NOT NULL, `votes` integer NOT NULL);
--
-- Create model Question
--
CREATE TABLE `polls_question` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `question_text` varchar(200) NOT NULL, `pub_date` datetime(6) NOT NULL);
--
-- Add field question to chocie
--
ALTER TABLE `polls_chocie` ADD COLUMN `question_id` integer NOT NULL;
ALTER TABLE `polls_chocie` ADD CONSTRAINT `polls_chocie_question_id_9c0a43fe_fk_polls_question_id` FOREIGN KEY (`question_id`) REFERENCES `polls_question` (`id`);
COMMIT;
請注意如下幾點:
自增量(SQLite)將自動爲您處理。引用字段名稱也是如此,例如使用引號雙引號或單引號。
是否有須要SQL腳本進行更改的數據庫,而不進行遷移或操做數據庫。
如今,再次運行migrate以在數據庫中建立這些模型表:
python3 manage.py migrate
你會看到如下相似信息:
Operations to perform: Apply all migrations: admin, auth, contenttypes, polls, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying polls.0001_initial... OK Applying sessions.0001_initial... OK
migrate命令接受全部未應用的遷移(Django使用名爲django_mirgrations的數據庫中的特殊表來跟蹤哪些遷移)並根據您的數據庫運行它們-基本上將您對模型所作
的更改與數據庫中的模式進行同步。
遷移很是強大,隨着時間的推移,您能夠隨時更改模型,而無需刪除數據庫或表並建立新的數據庫-他專門用於實時升級數據庫,而不會丟失數據。
進行模型更改的三步指南:
建立一個登陸管理站點的用戶。運行如下命令:
python3 manage.py createsuperuser
輸入所需的用戶名,而後按Enter鍵。
Username (leave blank to use 'h'): admin
而後根據提示輸入所需的電子郵件地址:
Email address: admin@example.com
最後一步是輸入你的密碼。你將被要求輸入密碼兩次,第二次做爲第一次的確認。
Password: Password (again): Superuser created successfully.
默認狀況下,Django管理員站點被激活。
若是服務器沒有啓動就運行如下命令:
python manage.py runserver
打開瀏覽器,而後轉到本地域的「/admin/」 例如:http://127.0.0.1:8000/admin/
輸入上面建立的帳號及密碼登陸
咱們須要告訴管理員Question對象有一個管理員界面。所以,打開polls/admin.py文件,而後將其編輯爲以下所示:
from django.contrib import admin # Register your models here. from .models import Question admin.site.register(Question)
如今咱們註冊了Question項目,Django知道應該顯示在管理員索引頁面上。
點擊「POLLS」下的add 輸入以下圖所示信息:時間選擇今天、如今,而後點擊save--點擊Home
點擊「Question」。如今您在「更改列表」頁面尋找問題。此頁面顯示數據庫中的全部問題,並讓您選擇一個來更改它。咱們以前建立的「What's up?」
點擊"What's up?"問題編輯它
注意事項:
頁面底部提供了幾個選項:
若是"Date published"的值與Tutorial 1中建立問題的時間不匹配,則可能意味着你忘記爲TIME_ZONE設置正確的值。
更改它,從新加載頁面,並檢查確認頁面。
點擊"Today"和"Now"快捷方式更改"Date published'。而後點擊「Save and continue editing」。而後點擊右上角的"History"。你將看到一個頁面,其中列出了
經過Django管理員對此對象所作全部更改,以及進行更改的人員的時間戳和用戶名: