恢復內容開始 從上個隨筆停止的地方開始,我們將設置資料庫,創建第一個模型。並快速介紹django自動生成的管理站點。 資料庫設置: 打開文件mysite/settings.py 預設情況下,配置使用SQLite。這是新手最簡單的選擇。 雖然你不暫時不用其他資料庫,但是還是要說明一下的: ENGINE ...
---恢復內容開始---
從上個隨筆停止的地方開始,我們將設置資料庫,創建第一個模型。並快速介紹django自動生成的管理站點。
資料庫設置:
打開文件mysite/settings.py
預設情況下,配置使用SQLite。這是新手最簡單的選擇。
雖然你不暫時不用其他資料庫,但是還是要說明一下的:
ENGINE
-
'django.db.backends.sqlite3'
-
'django.db.backends.mysql'
-
'django.db.backends.oracle'等
NAME
- 資料庫名稱,如果sqlLite,name表示該文件的完整路徑。包括文件名。預設將文件存儲到你的項目目錄中。
- 如果使用其他資料庫,需要額外的設置user password host。
在文件底部還有個TIME-ZONE設置。這個代表時區。一般改為:TIME_ZONE = 'Asia/Shanghai'
在文件頂部有個INSTALLED_APP設置。它包含django實例中激活的所以應用程式的名稱,應用程式可以用於多個項目。
- django.contrib.admin--管理網站
- django.contrib.auth--一個認證系統
- django.contrib.contenttyoes--內容寫的框架
- django.contrib.sessions--會話框架
- django.contrib.messages--消息傳遞框架
- django.contrib.staticfile--一個管理靜態文件的框架
但是其中一些應用程式至少使用了一個資料庫表,所以我們需要在資料庫中創建表格,然後才能使用它們。為此,請運行以下命令:
python manage.py migrate
創建模型
創建兩個模型:
question:問題,日期
choice:選擇文本,票數每個choice關聯一個question。
polls/models.py文件編寫代碼:
1 from django.db import models 2 3 # Create your models here. 4 class Question(models.Model): 5 question_text=models.CharField(max_length=200) #問題 6 pub_date=models.DateTimeField('date published') #日期 7 8 class Choice(models.Model): 9 choice_text=models.CharField(max_length=200) #選擇 10 votes=models.IntegerField(default=0) #票數 11 question=models.ForeignKey(Question,on_delete=models.CASCADE) #常見的資料庫關係,多對一,多對多,一對一
激活模型
剛剛models.py可以為此應用程式創建資料庫,create table.。
但我們還要告訴項目,該polls程式已安裝。
回到settings.py文件的INSTALLED-APPS修改代碼:
'polls.apps.PollsConfig',
現在django知道polls程式,運行另一個命令:
python manage.py makemigrations polls
生成了遷移文件。有一個命令可以執行遷移,migrate。
但先看看遷移的sql將運行啥。sqlmigrate採用遷移名稱並返回它們的sql:
python manage.py sqlmigrate polls 0001
當然,輸出決定於你選擇的資料庫,大同小異。
說明:sqlmigrate實際不會執行遷移,只是將其列印到屏幕。
現在,migrate再次運行來執行遷移:
python manage.py migrate
遷移非常強大,後面你可以隨時更改模型,而無需刪除資料庫或表,並創建新的資料庫,它專門用於實時升級資料庫,而不會丟失數據。
總結:
- 改變模型--models.py
- 生成遷移文件--python manage.py makemigrations 程式名
- 執行遷移--pytho manage.py migrate
使用
現在,我們來跳入python shell互動式,並使用django提供的免費API。
python manage.py shell
#導入兩個模型類 In [1]: from polls.models import Question,Choice #查詢。返回的是對象。為空,因為沒有任何數據 In [2]: Question.objects.all() Out[2]: <QuerySet []> #導入django工具包,時區相關 In [5]: from django.utils import timezone #創建一個Question對象。參數就是欄位內容 In [7]: q=Question(question_text="What's new",pub_date=timezone.now()) #保存 In [8]: q.save() #id In [9]: q.id Out[9]: 1 #查詢欄位 In [10]: q.question_text Out[10]: "What's new" In [11]: q.pub_date Out[11]: datetime.datetime(2018, 6, 4, 7, 39, 40, 677255, tzinfo=<UTC>) #修改欄位 In [12]: q.question_text="What's up?" In [13]: q.save() #In [15]: Question.objects.all() Out[15]: <QuerySet [<Question: Question object>]>
你有沒有發現。這是一個無益的對象。解決問題。在models.py文件中修改
class Question(models.Model): #... def __str__(self): return self.question_text class Choice(models.Model): #... def __str__(self): return self.choice_text
說明:向模型中添加__str__方法非常重要。
重新進入shell命令:
n [5]: Question.objects.filter(id=1) Out[5]: <QuerySet [<Question: What's up?>]> In [6]: current_year=timezone.now().year In [7]: Question.objects.get(pub_date__year=current_year) Out[7]: <Question: What's up?> In [8]: Question.objects.get(pk=1) Out[8]: <Question: What's up?> In [9]: q=Question.objects.get(pk=1) In [10]: q.choice_set.create(choice_text='Not much',votes=0) Out[10]: <Choice: Not much> In [12]: q.choice_set.create(choice_text='The sky',votes=0) Out[12]: <Choice: The sky> In [13]: q.choice_set.create(choice_text='Just hacking again',votes=0) Out[13]: <Choice: Just hacking again> In [14]: c=q.choice_set.create(choice_text='xjm',votes=1) In [15]: c.question Out[15]: <Question: What's up?> In [16]: q.choice_set.count() Out[16]: 4 In [17]: q.choice_set.all() Out[17]: <QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>, <Choice: xjm>]> In [18]: c Out[18]: <Choice: xjm> In [19]: q Out[19]: <Question: What's up?>
創建一個管理員
D:\學習歷程\django學習\mysite>python manage.py createsuperuser Username (leave blank to use 'xjm'): admin Email address: 1510261589@qq.com Password: Password (again): Superuser created successfully. D:\學習歷程\django學習\mysite>
執行命令後,會提示輸入用戶名、郵箱、密碼、密碼確認。
啟動開發伺服器
python manage.py runserver
打開web瀏覽器輸入:https://127.0.0.1:8000/admin/。
輸入用戶名、密碼登錄。
如果忘了密碼,可以修改:
D:\學習歷程\django學習\mysite>python manage.py changepassword admin #後面跟用戶名 Changing password for user 'admin' Password: Password (again): Password changed successfully for user 'admin'
但是,你有沒有發現。我們的民意調查在哪裡,並沒有出現。只需做一件事。告訴管理員。
打開polls/admin.py文件編寫代碼:
1 from django.contrib import admin 2 from .models import Question 3 4 # Register your models here. 5 admin.site.register(Question) #註冊question對象
此刻,你看到你想要看到的了:
其餘不多展示了,自己欣賞:
---恢復內容結束---