Django學習筆記02 | 編寫一個Django應用02

一、安裝 MySQL 並在 Pycharm 安裝 pymysql

安裝 MySQL 可以參考我的這篇博客:MySQL 5.7.21 安裝教程

因爲 Python2的mysql庫爲:mysqldb,而Python3的爲:pymysql,所以要在 Pycharm 中安裝 pymysql 。和之前安裝 django 類似,見下圖:

二、數據庫配置

打開 mysite/settings.py,找到 DATABASES ,修改紅框裏面的內容:

輸入代碼:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysql',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

如果 NAME 不寫成 mysql 的話,進行下面操作會報錯:

因爲是 Python3 ,切記要在同級的 __init__.py 文件添加以下代碼:

import pymysql
pymysql.install_as_MySQLdb()

然後在 Terminal 中輸入下面命令:

python manage.py migrate

此時又遇到一個報錯:

根據上圖顯示的文件位置找到 operations.py ,修改 decodeencode 即可,大概在 146 行。

可能也會遇到另一個錯,把 operations.py 同級的一個名爲 base.py 的文件 35、36 這兩行註釋掉:

再次運行一下上面的命令,會看到:

三、創建模型

在這個簡單的投票應用中,需要創建兩個模型:問題 Question 和選項 ChoiceQuestion 模型包括問題描述和發佈時間。Choice 模型有兩個字段,選項描述和當前得票數。每個選項屬於一個問題。

編輯 polls/models.py 文件:

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200) # 問題描述
    pub_date = models.DateTimeField('date published') # 發佈時間


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200) # 選項描述
    votes = models.IntegerField(default=0) # 當前得票數

四、激活模型

在文件 mysite/settings.pyINSTALLED_APPS 子項添加點式路徑:

'polls.apps.PollsConfig',

結果如紅框所示:

然後在 Terminal 中輸入下面命令:

python manage.py makemigrations polls

將會看到類似於下面這樣的輸出:

下面進行遷移:

python manage.py sqlmigrate polls 0001

將會看到:

再次運行 migrate 命令,在數據庫裏創建新定義的模型的數據表:

python manage.py migrate

改變模型需要這三步:

  • 編輯 models.py 文件,改變模型。
  • 運行 python manage.py makemigrations 爲模型的改變生成遷移文件。
  • 運行 python manage.py migrate 來應用數據庫遷移。

五、初試 API

Terminal 輸入下面命令,進入交互式 Python 命令行:

python manage.py shell

成功進入後,試試 database API 吧,試之前先修改一下 models.py 模型代碼:

# Create your models here.

import datetime

from django.db import models
from django.utils import timezone


class Question(models.Model):
    question_text = models.CharField(max_length=200) # 問題描述
    pub_date = models.DateTimeField('date published') # 發佈時間

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200) # 選項描述
    votes = models.IntegerField(default=0) # 當前得票數

    def __str__(self):
        return self.choice_text

然後就可以試試 database API 了:

from polls.models import Choice, Question
Question.objects.all()
from django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())
q.save()
q.id
q.question_text
q.pub_date

需要退出交互式 Python 命令行時,按 Ctrl+Z 即可。

六、創建一個管理員賬號

輸入下面命令:

python manage.py createsuperuser

然後分別輸入用戶名、郵箱、密碼、再次確認。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8TdCp824-1580284363358)(https://cdn.jsdelivr.net/gh/Wonz5130/My-Private-ImgHost/img/Snipaste_2020-01-28_16-59-06.png)]

七、啓動開發服務

Django 的管理界面默認就是啓用的。讓我們啓動開發服務器,看看它到底是什麼樣的。

如果開發服務器未啓動,用以下命令啓動它:

python manage.py runserver

打開瀏覽器,轉到你本地域名的 “/admin/” 目錄, – 比如 “http://127.0.0.1:8000/admin/” 。你應該會看見管理員登錄界面:

輸入剛纔註冊的用戶名和密碼,就能進入管理了:

八、向管理頁面中加入投票應用

發現投票應用沒在索引頁面裏顯示,於是我們需要告訴管理頁面,問題 Question 對象需要被管理。打開 polls/admin.py 文件,把它編輯成下面這樣:

from django.contrib import admin

from .models import Question

admin.site.register(Question)

九、體驗便捷的管理功能

現在我們向管理頁面註冊了問題 Question 類。Django 知道它應該被顯示在索引頁裏,刷新一下頁面就有了:

點擊 “Questions” 。現在看到是問題 “Questions” 對象的列表 “change list” 。這個界面會顯示所有數據庫裏的問題 Question 對象,你可以選擇一個來修改。這裏現在有我們在上一部分中創建的 “What’s up?” 問題。

點擊 “What’s up?” 來編輯這個問題(Question)對象:

通過點擊 “今天(Today)” 和 “現在(Now)” 按鈕改變 “發佈日期(Date Published)”。然後點擊 “保存並繼續編輯(Save and add another)”按鈕。然後點擊右上角的 “歷史(History)”按鈕。你會看到一個列出了所有通過 Django 管理頁面對當前對象進行的改變的頁面,其中列出了時間戳和進行修改操作的用戶名:

十、致謝

編寫你的第一個 Django 應用,第 2 部分

Pycharm數據庫連接錯誤

django.db.utils.OperationalError: (1049, “Unknown database ‘djangodb’”)

發佈了307 篇原創文章 · 獲贊 399 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章