如何在Django中新建一個(gè)App卜录,連接Mysql數(shù)據(jù)庫(kù)戈擒,并獲取數(shù)據(jù)。

一. 前言

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


二. 創(chuàng)建App

1. 方法一:

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

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

  • 在控制臺(tái)輸入python manage.py startapp app001柑土,app001指的是app的名稱(chēng),可以自定義绊汹。這句命令行的含義是創(chuàng)建名稱(chēng)為app001的App冰单。

    輸入python manage.py startapp app001命令

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


    查看項(xiàng)目根目錄,檢查app001是否創(chuàng)建成功
  • settings.py中注冊(cè)App,打開(kāi)與項(xiàng)目名稱(chēng)相同的目錄浴栽,找到其中的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é)者采用方法一,方法二需要一定的命令行知識(shí)球碉,這不是整篇文章的重點(diǎn)蜓斧。在這里不細(xì)說(shuō),大概講一下流程睁冬。
  • 首先用cd命令行進(jìn)入項(xiàng)目根目錄挎春。
  • 在根目錄下執(zhí)行與方法一相同的python manage.py startapp app001的創(chuàng)建App命令行操作。
  • 檢查項(xiàng)目根目錄下的app001是否創(chuàng)建成功豆拨。
  • 在settings.py中注冊(cè)App

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

  • 利用pip命令安裝mysqlclient直奋,這是python3用來(lái)連接MySQL的驅(qū)動(dòng)庫(kù),不安裝將無(wú)法連接施禾。

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

    利用pip命令安裝mysqlclient

  • 進(jìn)入項(xiàng)目根目錄下與你項(xiàng)目名稱(chēng)相同的文件夾邮绿,找到settings.py,雙擊編輯拓巧,如下圖所示斯碌。

    settings.py

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
  • 因?yàn)橐B接MySQL數(shù)據(jù)庫(kù)傻唾,因此需要修改數(shù)據(jù)庫(kù)配置,將其修改為如下所示承耿。
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # mysql驅(qū)動(dòng)
        'NAME': 'test',  # 數(shù)據(jù)庫(kù)名稱(chēng)
        'USER': 'root',  # 登錄帳號(hào)
        'PASSWORD': '123456',  # 登錄密碼
        'HOST': '127.0.0.1',  # 主機(jī)地址
        'PORT': '3306'  # 端口
    }
}
  • 其中NAME為數(shù)據(jù)庫(kù)名稱(chēng)冠骄,USER表示登錄賬戶(hù)名,PASSWORD為登錄密碼加袋,HOST表示主機(jī)地址(127.0.0.1表示本機(jī))凛辣,PORT表示端口,默認(rèn)為3306职烧。一般只需修改NAME扁誓,USER防泵,PASSWORD,使其與你電腦上的環(huán)境一致蝗敢,其他保持默認(rèn)即可捷泞。

四. 反向生成Model

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

    圖片.png

  • 如上圖所示寿谴,db_table='user'表示的意思是這個(gè)實(shí)體類(lèi)與名稱(chēng)為user這個(gè)表相關(guān)聯(lián)锁右。

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

  • 將窗口中的整個(gè)class粘貼至app01目錄下的models.py中牧抵。(models.py用于存放實(shí)體類(lèi))

    圖片.png


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

  • 在app001下新建一個(gè)文件夾狞山,名稱(chēng)為templates,不能為其他名字拉岁,否則會(huì)報(bào)錯(cuò)惠桃。這是Django的規(guī)定浦夷,app目錄下的temlates文件夾中用來(lái)存放模板文件(.html文件)。

  • 在此templates文件夾下新建一個(gè)名稱(chēng)為index.html的網(wǎng)頁(yè)(待會(huì)兒用來(lái)顯示數(shù)據(jù)庫(kù)返回的數(shù)據(jù))辜王,如下圖所示劈狐。

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

  • views.py中定義一個(gè)函數(shù)呐馆,名稱(chēng)為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ù)庫(kù)user表中拿到所有的用戶(hù)信息汹来,并將其賦值給user_list這個(gè)變量续膳,等價(jià)于SQL語(yǔ)句
select * from user
  • render的可以理解成攜帶三個(gè)參數(shù)的跳轉(zhuǎn)。第一個(gè)參數(shù)是請(qǐng)求request收班,第二個(gè)參數(shù)是需要渲染的模板文件(跳轉(zhuǎn)到哪一個(gè).html文件中)坟岔,第三個(gè)參數(shù)是字典對(duì)象(用來(lái)存放渲染模板的數(shù)據(jù)),前兩個(gè)參數(shù)必須給定摔桦,不能省略社付,第三個(gè)參數(shù)可以省略(表示不攜帶數(shù)據(jù)的跳轉(zhuǎn))。

  • 進(jìn)入與項(xiàng)目根目錄同名文件夾下的urls.py邻耕,在urls.py中注冊(cè)該函數(shù)和請(qǐng)求路徑鸥咖,如下所示。

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

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

    path('', views.get_user)  # 添加路徑對(duì)應(yīng)函數(shù)兄世,''表示運(yùn)行首頁(yè)訪問(wèn)路徑
]
  • path()函數(shù)有兩個(gè)參數(shù)啼辣,第一個(gè)參數(shù)為請(qǐng)求路徑,指定為空字符串表示項(xiàng)目運(yùn)行時(shí)首頁(yè)對(duì)應(yīng)的內(nèi)容御滩,第二個(gè)參數(shù)表示調(diào)用函數(shù)鸥拧。path('', views.get_user) 表示當(dāng)瀏覽器請(qǐng)求首頁(yè)党远,調(diào)用views.py中的get_user函數(shù),執(zhí)行g(shù)et_user函數(shù)中的動(dòng)作住涉。(注意 views.get_user的最后無(wú)需加()麸锉,否則會(huì)報(bào)錯(cuò)

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

  • 編輯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對(duì)象中的user_name媳握。若對(duì)django的模板不太了解,可以瀏覽我的博客——蒼茫誤此生博客磷脯,我在那里寫(xiě)了一些關(guān)于django模板的基礎(chǔ)知識(shí)蛾找。

  • 最后運(yùn)行項(xiàng)目,點(diǎn)擊pycharm右上角的綠色箭頭赵誓。


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

    圖片.png


七. 最后

這是我第一次寫(xiě)那么長(zhǎng)的博客俩功,還是有點(diǎn)累的幻枉。博客中如果有什么不足和錯(cuò)誤,希望水友可以指出來(lái)诡蜓。最后播個(gè)插曲熬甫,最近自己用django建了個(gè)網(wǎng)站,有興趣的水友可以幫忙點(diǎn)擊一下蔓罚。網(wǎng)址是蒼茫誤此生博客椿肩,謝謝大家。轉(zhuǎn)載請(qǐng)注明出處豺谈,簡(jiǎn)書(shū)-蒼茫誤此生-如何在Django中新建一個(gè)App郑象,連接Mysql數(shù)據(jù)庫(kù),并獲取數(shù)據(jù)茬末。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厂榛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子团南,更是在濱河造成了極大的恐慌噪沙,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吐根,死亡現(xiàn)場(chǎng)離奇詭異正歼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拷橘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)局义,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)喜爷,“玉大人,你說(shuō)我怎么就攤上這事萄唇¢菡剩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵另萤,是天一觀的道長(zhǎng)湃密。 經(jīng)常有香客問(wèn)我,道長(zhǎng)四敞,這世上最難降的妖魔是什么泛源? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮忿危,結(jié)果婚禮上达箍,老公的妹妹穿的比我還像新娘。我一直安慰自己铺厨,他們只是感情好缎玫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著解滓,像睡著了一般赃磨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伐蒂,一...
    開(kāi)封第一講書(shū)人閱讀 49,729評(píng)論 1 289
  • 那天煞躬,我揣著相機(jī)與錄音,去河邊找鬼逸邦。 笑死恩沛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缕减。 我是一名探鬼主播雷客,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼桥狡!你這毒婦竟也來(lái)了搅裙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤裹芝,失蹤者是張志新(化名)和其女友劉穎部逮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嫂易,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兄朋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怜械。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颅和。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡傅事,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出峡扩,到底是詐尸還是另有隱情蹭越,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布教届,位于F島的核電站响鹃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巍佑。R本人自食惡果不足惜茴迁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萤衰。 院中可真熱鬧,春花似錦猜旬、人聲如沸脆栋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)椿争。三九已至,卻和暖如春熟嫩,著一層夾襖步出監(jiān)牢的瞬間秦踪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工掸茅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留椅邓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓昧狮,卻偏偏與公主長(zhǎng)得像景馁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逗鸣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348