如何在Django中新建一個App,連接Mysql數(shù)據(jù)庫,并獲取數(shù)據(jù)。

一. 前言

瀏覽文章之前請確認(rèn)你的電腦已經(jīng)安裝好了python環(huán)境(包括pip),且已經(jīng)成功新建了一個可以正常運行的Django項目,若未新建,請查看我之前寫的一篇文章——如何在Pycharm中新建一個Django項目


二. 創(chuàng)建App

1. 方法一:

  • 點擊pycharm下方的terminal導(dǎo)航欄。

    點擊pycharm下方的terminal導(dǎo)航欄

  • 在控制臺輸入python manage.py startapp app001,app001指的是app的名稱,可以自定義。這句命令行的含義是創(chuàng)建名稱為app001的App。

    輸入python manage.py startapp app001命令

  • 查看項目根目錄,檢查app001是否創(chuàng)建成功。


    查看項目根目錄,檢查app001是否創(chuàng)建成功
  • settings.py中注冊App,打開與項目名稱相同的目錄,找到其中的settings.py文件,雙擊編輯,找到App配置區(qū)域,如下所示。

INSTALLED_APPS = [
    'simpleui',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
  • 我們需要將剛剛創(chuàng)建的App加入到配置文件中,其他配置保持默認(rèn)即可,如下所示。
INSTALLED_APPS = [
    'simpleui',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app001',  # 添加的App
]

2. 方法二:

  • 建議初學(xué)者采用方法一,方法二需要一定的命令行知識,這不是整篇文章的重點。在這里不細(xì)說,大概講一下流程。
  • 首先用cd命令行進入項目根目錄。
  • 在根目錄下執(zhí)行與方法一相同的python manage.py startapp app001的創(chuàng)建App命令行操作。
  • 檢查項目根目錄下的app001是否創(chuàng)建成功。
  • 在settings.py中注冊App

三. 連接數(shù)據(jù)庫

  • 利用pip命令安裝mysqlclient,這是python3用來連接MySQL的驅(qū)動庫,不安裝將無法連接。

  • 下面是具體安裝步驟
    切換至pycharm的terminal導(dǎo)航欄,在命令行窗口輸入pip install mysqlclient,如下圖所示。

    利用pip命令安裝mysqlclient

  • 進入項目根目錄下與你項目名稱相同的文件夾,找到settings.py,雙擊編輯,如下圖所示。

    settings.py

  • 找到DATABASES數(shù)據(jù)庫配置區(qū)域,如下所示。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
  • 因為要連接MySQL數(shù)據(jù)庫,因此需要修改數(shù)據(jù)庫配置,將其修改為如下所示。
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # mysql驅(qū)動
        'NAME': 'test',  # 數(shù)據(jù)庫名稱
        'USER': 'root',  # 登錄帳號
        'PASSWORD': '123456',  # 登錄密碼
        'HOST': '127.0.0.1',  # 主機地址
        'PORT': '3306'  # 端口
    }
}
  • 其中NAME為數(shù)據(jù)庫名稱,USER表示登錄賬戶名,PASSWORD為登錄密碼,HOST表示主機地址(127.0.0.1表示本機),PORT表示端口,默認(rèn)為3306。一般只需修改NAME,USER,PASSWORD,使其與你電腦上的環(huán)境一致,其他保持默認(rèn)即可。

四. 反向生成Model

  • 在pycharm的terminal命令行窗口中輸入python manage.py inspectdb

    圖片.png

  • 如上圖所示,db_table='user'表示的意思是這個實體類與名稱為user這個表相關(guān)聯(lián)。

  • python manage.py inspectdb命令行執(zhí)行的功能是把數(shù)據(jù)庫中的所有表反向生成實體類,一張表對應(yīng)一個實體類,你只需要將生成的實體類信息粘貼到對應(yīng)App目錄下的models.py即可。

  • 將窗口中的整個class粘貼至app01目錄下的models.py中。(models.py用于存放實體類)

    圖片.png


五. 從數(shù)據(jù)庫獲取數(shù)據(jù)

  • 在app001下新建一個文件夾,名稱為templates,不能為其他名字,否則會報錯。這是Django的規(guī)定,app目錄下的temlates文件夾中用來存放模板文件(.html文件)。

  • 在此templates文件夾下新建一個名稱為index.html的網(wǎng)頁(待會兒用來顯示數(shù)據(jù)庫返回的數(shù)據(jù)),如下圖所示。

圖片.png
  • 進入app001目錄下的views.py文件,雙擊編輯

  • views.py中定義一個函數(shù),名稱為get_user,如下所示。

from django.shortcuts import render
from app001.models import User

def get_user(request):
    user_list = User.objects.all()
    return render(request, 'index.html', {'user_list': user_list})
  • user_list = User.objects.all()表示從數(shù)據(jù)庫user表中拿到所有的用戶信息,并將其賦值給user_list這個變量,等價于SQL語句
select * from user
  • render的可以理解成攜帶三個參數(shù)的跳轉(zhuǎn)。第一個參數(shù)是請求request,第二個參數(shù)是需要渲染的模板文件(跳轉(zhuǎn)到哪一個.html文件中),第三個參數(shù)是字典對象(用來存放渲染模板的數(shù)據(jù)),前兩個參數(shù)必須給定,不能省略,第三個參數(shù)可以省略(表示不攜帶數(shù)據(jù)的跳轉(zhuǎn))。

  • 進入與項目根目錄同名文件夾下的urls.py,在urls.py中注冊該函數(shù)和請求路徑,如下所示。

from django.contrib import admin
from django.urls import path
from app001 import views

urlpatterns = [
    path('admin/', admin.site.urls),

    path('', views.get_user)  # 添加路徑對應(yīng)函數(shù),''表示運行首頁訪問路徑
]
  • path()函數(shù)有兩個參數(shù),第一個參數(shù)為請求路徑,指定為空字符串表示項目運行時首頁對應(yīng)的內(nèi)容,第二個參數(shù)表示調(diào)用函數(shù)。path('', views.get_user) 表示當(dāng)瀏覽器請求首頁,調(diào)用views.py中的get_user函數(shù),執(zhí)行g(shù)et_user函數(shù)中的動作。(注意 views.get_user的最后無需加(),否則會報錯

六. 在網(wǎng)頁中顯示

  • 編輯app001中templates目錄下的index.html文件。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% for user in user_list %}
    <h1>{{ user.user_name }}</h1>
{% endfor %}
</body>
</html>

{% for user in user_list %} {% endfor %} 表示循環(huán)作用域,遍歷user_list列表,user表示每次循環(huán)的變量。 {{ user.user_name }} 表示獲取user對象中的user_name。若對django的模板不太了解,可以瀏覽我的博客——蒼茫誤此生博客,我在那里寫了一些關(guān)于django模板的基礎(chǔ)知識。

  • 最后運行項目,點擊pycharm右上角的綠色箭頭。


    2019-07-18 16-58-31屏幕截圖.png
  • 在瀏覽器地址欄中輸入http://127.0.0.1:8000/訪問即可,具體效果圖如下。

    圖片.png


七. 最后

這是我第一次寫那么長的博客,還是有點累的。博客中如果有什么不足和錯誤,希望水友可以指出來。最后播個插曲,最近自己用django建了個網(wǎng)站,有興趣的水友可以幫忙點擊一下。網(wǎng)址是蒼茫誤此生博客,謝謝大家。轉(zhuǎn)載請注明出處簡書-蒼茫誤此生-如何在Django中新建一個App,連接Mysql數(shù)據(jù)庫,并獲取數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,462評論 2 378