by 極光python
今天來爲你們介紹 Django 框架的模型部分,模型是真實數據的簡單明確的描述,它包含了儲存的數據所必要的字段和行爲,Django 遵循 DRY Principle 。它的目標是你只須要定義數據模型,而後其它的雜七雜八代碼你都不用關心,它們會自動從模型生成。mysql
Django 中模型是真實數據的簡單明確的描述,它包含了儲存的數據所必要的字段和行爲,在建立模型前須要先配置好數據庫。 Django 對各類數據庫提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle等,Django 爲這些數據庫提供了統一的調用 API。 咱們能夠根據本身業務需求選擇不一樣的數據庫。git
Python 內置 SQLite,因此你無需安裝額外東西來使用它,在 TestProject
項目目錄下,打開 TestProject/settings.py
配置文件, 已經配置了 SQLite 做爲默認數據庫。固然若是在真實項目中,咱們能夠換一個更具擴展性的數據庫,如Mysql等。具體配置操做以下:github
# TestProject/settings.py # Database DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
配置說明:sql
仍是以咱們以前建立的投票應用爲基礎,在這個應用中建立兩個模型--Question和Choice。shell
下面咱們將以上模型描述經過編輯 polls/models.py
文件定義出來。數據庫
# polls/models.py from django.db import models class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('發佈日期') class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
這裏有如下幾點須要注意:django
經過配置上面 models.py
類中建立模型的代碼,已經足夠 Django 爲咱們建立數據庫和相應表結構了,如今咱們將 polls
應用安裝到咱們 TestProject
項目中。
首先再次打開 TestProject/settings.py
配置文件,在配置類 INSTALLED_APPS
中添加 polls
應用的點式路徑 'polls.apps.PollsConfig'
,配置完成以下所示:瀏覽器
# TestProject/settings.py INSTALLED_APPS = [ 'polls.apps.PollsConfig', #新增polls路徑 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
由於 PollsConfig 類寫在文件 polls/apps.py 中,因此它的點式路徑是 'polls.apps.PollsConfig'服務器
保存配置並退出,而後運行 makemigrations
命令, Django 會檢測你對模型文件的修改,而且把修改的部分儲存爲一次遷移
(遷移是 Django 對於模型定義即你的數據庫結構的變化的儲存形式)。
$ python manage.py makemigrations polls Migrations for 'polls': polls/migrations/0001_initial.py - Create model Question - Create model Choice
執行成功後,就能夠再執行 migrate
命令,將你在模型中定義的數據庫修改同步到應用的數據庫表結構上,執行結果以下:
$ python manage.py migrate Operations to perform: Apply all migrations: polls Running migrations: Applying polls.0001_initial... OK
數據庫
遷移
操做被分解成生成和應用兩個命令是爲了讓你可以在代碼控制系統上提交遷移數據並使其能在多個應用裏使用;這不只僅會讓開發更加簡單,也給別的開發者和生產環境中的使用帶來方便。
對模型對象的操做,本質上就是數據庫數據的操做。下面咱們就經過對模型對象操做實現對數據庫記錄基本的CURD操做。
編輯 TestProject
項目下 polls/views.py
文件代碼,經過訪問 URL
在 Question
模型對應表中添加數據。
# polls/views.py from django.shortcuts import render # Create your views here. from django.http import HttpResponse from polls.models import Choice, Question from django.utils import timezone def index(request): return HttpResponse("你好,這是一個投票頁面。") # 增長問題描述信息 def add(request): question = Question(question_text='雙十一你在哪一個平臺剁手?',pub_date=timezone.now()) question.save(); return HttpResponse("新增投票成功!")
再編輯 polls/urls.py
文件代碼,新增一條 add
的路由,代碼以下:
# polls/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('add', views.add, name='add'), #新增add路由 ]
保存後,經過 python manage.py runserver 127.0.0.1:8080
命令啓動本地開發服務器,啓動後在瀏覽器中輸入URL地址 http://127.0.0.1:8080/polls/add
,會返回以下頁面表示新增數據成功。
接下來咱們再刷新下頁面,這樣就會再增長一條數據,而後咱們把這兩條記錄查出來。
Django 提供了多種方式來查詢出數據庫記錄,如查詢上面 Question
模型對應所有數據,某個id的數據以及經過多條件過濾獲得所須要的數據。依然編輯 TestProject
項目下 polls/views.py
文件,增長查詢對應代碼:
# polls/views.py # …… 省略部分代碼 def query(request): # 經過objects這個模型管理器的all()得到全部數據行,至關於SQL中的SELECT * FROM question questionList = Question.objects.all() # 獲取單個對象 response2 = Question.objects.get(id=1) # 至關於SQL中的WHERE id=1,可設置條件過濾 response3 = Question.objects.filter(id=1) #根據id字段排序 response5 = Question.objects.order_by("id") res = "" # 遍歷全部對象 for q in questionList: res += str(q.id) + "." + q.question_text + " <br />" return HttpResponse("查詢全部問題:<br />" + res)
再編輯 polls/urls.py
文件代碼,新增一條 query
的路由,代碼以下:
# polls/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('add', views.add, name='add'), path('query', views.query, name='query'), #新增的query路由 ]
而後再瀏覽器中輸入 URL http://127.0.0.1:8080/polls/query
,看到以下圖所求請求結果:
能夠看到出現兩條同樣的記錄,可是 id
不一樣,不過這正符合咱們的預期,下面咱們將對第一條數據進行修改和刪除。
修改和刪除數據能夠操做一條或多條記錄,這取決於你的查詢條件,再次編輯 TestProject
項目下 polls/views.py
文件,增長修改和刪除對應代碼:
# polls/views.py # …… 省略部分代碼 #修改數據 def update(request): question1 = Question.objects.get(id=1) question1.question_text = '天貓和京東你會選哪一個?' question1.save() # 經過條件過濾的方式也能夠更新一條或多條數據 # Question.objects.filter(id=1).update(question_text='天貓和京東你會選哪一個?') return HttpResponse("更新id=1:" + question1.question_text) #刪除數據 def delete(request): question2 = Question.objects.get(id=2) question2.delete() # 經過條件過濾的方式也能夠刪除一條或多條數據 # Question.objects.filter(id=2).delete() # 刪除全部數據 # Question.objects.all().delete() res3 = '' questionList = Question.objects.all() # 遍歷全部對象 for q in questionList: res3 += str(q.id) + "." + q.question_text + " <br />" return HttpResponse("刪除後查詢:<br />" + res3)
再編輯 polls/urls.py
文件代碼,新增一條 query
的路由,代碼以下:
# polls/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('add', views.add, name='add'), path('query', views.query, name='query'), path('update', views.update, name='update'), # 新增update路由 path('del', views.delete, name='del'), # 新增del路由 ]
完成以上代碼配置,咱們就能夠經過訪問 URL http://127.0.0.1:8080/polls/update
實現第一條數據的更新操做,請求後返回頁面以下:
這樣咱們就把第一條數據的問題描述更新了,再次經過 URL http://127.0.0.1:8080/polls/query
查詢下全部數據,能夠看到返回頁面以下:
好,更新成功後,咱們再試下刪除數據了,經過查看刪除相關代碼是把 id
爲2的數據刪除了,此次咱們訪問的 URL http://127.0.0.1:8080/polls/del
,而後返回刪除後再次查詢全部記錄的頁面,以下圖:
能夠看到只剩下一條數據,說明咱們已經刪除成功了。
本文爲你們介紹了 Django 的模型,經過上面學習咱們瞭解到模型功能的強大,爲咱們基於數據庫的開發節省了大量工做量。Django還有模板,表單,路由,認證,基本的數據庫管理等等內建功能,接下來將進一步的介紹 Django 提供的其餘功能。
參考
示例代碼:https://github.com/JustDoPython/python-100-day
關注公衆號:python技術,回覆"python"一塊兒學習交流