基本Django項目構建

本文首發(fā)于知乎https://zhuanlan.zhihu.com/p/486779329凶朗,禁止轉載合搅。

1. 創(chuàng)建django項目

可通過如下命令創(chuàng)建名為myproject的django項目钉稍,

django-admin startproject myproject
cd myproject
python manage.py migrate

備注

  1. python manage.py migrate意思是把數(shù)據(jù)模型(Python中定義的Model)和數(shù)據(jù)庫同步讯檐。
  2. python manage.py makemigrations是當模型的相關代碼發(fā)生變動時俭茧,對變動進行提交保存弧烤,后接migrate

2. 創(chuàng)建app

python manage.py startapp base # 這里base就是app的名字

創(chuàng)建完成后要注冊app,在setting.py中找到INSTALLED_APPS波丰,加入app名

INSTALLED_APPS = [
    'base',
    ...
]

一個django項目的結構如下


django項目結構.png

3. 創(chuàng)建數(shù)據(jù)模型(Model)

models.py中壳坪,建立數(shù)據(jù)模型,類似于pojo掰烟,即一個對象包含哪些字段

from django.db import models

# Create your models here.
class Item(models.Model):
    name = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)

如上所述爽蝴,數(shù)據(jù)模型變動后沐批,要進行遷移

python manage.py makemigrations
python manage.py migrate

makemigrations后,即建立了數(shù)據(jù)模型和數(shù)據(jù)庫的聯(lián)系蝎亚,可以通過python manage.py sqlmigrate base 0001生成sql語句九孩,但這只是供查看確認,并不執(zhí)行颖对,migrate才是執(zhí)行捻撑。

臨時加入數(shù)據(jù)

可以另外開一個shell進行一些操作,比如添加數(shù)據(jù)

python manage.py shell

這條命令相比直接運行python缤底,可以導入該django項目的環(huán)境變量。

在shell中添加數(shù)據(jù)

>>> from base.models import Item
>>> Item.objects.create(name='item1')
<Item: Item object (1)>
>>> Item.objects.create(name='item2')
<Item: Item object (2)>
>>> Item.objects.create(name='item3')
<Item: Item object (3)>
>>> items = Item.objects.all()
>>> print(items)
<QuerySet [<Item: Item object (1)>, <Item: Item object (2)>, <Item: Item object (3)>]>
# 也可以這樣
>>> item = Item(name='item4')
>>> item.save()

4. 創(chuàng)建后端邏輯(View)

views.py文件中完成

比如最簡單的番捂,

def home(request):
    return HttpResponse("home page")

這樣后續(xù)執(zhí)行該邏輯時个唧,網(wǎng)頁上就顯示了home page這行字。

當然设预,更一般的徙歼,后端會提供一些數(shù)據(jù)處理,并顯示在定義好的前端模板上鳖枕,這樣就要和前端模板綁定魄梯。比如現(xiàn)在要把所有的物品顯示在前端頁面上,那么后端就要從數(shù)據(jù)庫拉取所有的items宾符,

def get_items(request):
    items = Item.objects.all()
    return render(request, 'items.html', {'items': items})

這樣就可以把items數(shù)據(jù)傳遞給items.html這個前端模板酿秸。

5. 創(chuàng)建前端模板(templates)

base文件夾下創(chuàng)建templates文件夾,再在templates文件夾下創(chuàng)建base文件夾魏烫,并在其中新建items.html文件辣苏,即base/templates/base/items.html,這樣設置后哄褒,在django項目中稀蟋,我們可以通過base/items.html定位到這個模板。

Django框架中存在模板尋找器呐赡,可搜索每個app的特定文件夾退客。

文件內(nèi)容如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Items</title>
</head>
<body>
    <ul>
        {% for item in items %}
        <li>{{item.name}}</li>
        {% endfor %}
    </ul>
</body>
</html>

大意就是把各個物品的名字顯示成一個無序列表。

6. 綁定網(wǎng)址

以上已經(jīng)完成了后端與數(shù)據(jù)庫链嘀、前端與后端的數(shù)據(jù)傳遞萌狂,那么用戶如何訪問這樣一個網(wǎng)頁呢?就需要在urls.py中綁定好網(wǎng)址和后端管闷。

在base文件夾下新建urls.py文件粥脚,內(nèi)容如下

from . import views 
from django.urls import path

urlpatterns = [
    path("items/", views.get_items),
    path("", views.home)
]

但這個url目前只在base這個app下,并沒有被django項目所識別包个,因此刷允,需要在myproject/urls.py文件中進行引用冤留,以讓項目進行識別。

from django.urls import include # 這是新增的行

urlpatterns = [
    path('admin/', admin.site.urls),
    path('base/', include('base.urls'))  # 這是新增的行
]

7. 運行

最后树灶,執(zhí)行python manage.py runserver即可運行網(wǎng)站纤怒,打開http://127.0.0.1:8000/base/items/ 就顯示了物品列表如下。

基本Django項目結果.png

8. 參考

  1. Django Crash Course - Introduction + Python Web Development Tutorial
  2. Django REST Framework Oversimplified
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末天通,一起剝皮案震驚了整個濱河市泊窘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌像寒,老刑警劉巖烘豹,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诺祸,居然都是意外死亡携悯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門筷笨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憔鬼,“玉大人,你說我怎么就攤上這事胃夏≈峄颍” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵仰禀,是天一觀的道長照雁。 經(jīng)常有香客問我,道長悼瘾,這世上最難降的妖魔是什么囊榜? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮亥宿,結果婚禮上卸勺,老公的妹妹穿的比我還像新娘。我一直安慰自己烫扼,他們只是感情好曙求,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著映企,像睡著了一般悟狱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堰氓,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天挤渐,我揣著相機與錄音,去河邊找鬼双絮。 笑死浴麻,一個胖子當著我的面吹牛得问,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播软免,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼宫纬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了膏萧?” 一聲冷哼從身側響起漓骚,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榛泛,沒想到半個月后蝌蹂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡曹锨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年叉信,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艘希。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖硅急,靈堂內(nèi)的尸體忽然破棺而出覆享,到底是詐尸還是另有隱情,我是刑警寧澤营袜,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布撒顿,位于F島的核電站,受9級特大地震影響荚板,放射性物質(zhì)發(fā)生泄漏凤壁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一跪另、第九天 我趴在偏房一處隱蔽的房頂上張望拧抖。 院中可真熱鬧,春花似錦免绿、人聲如沸唧席。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淌哟。三九已至,卻和暖如春辽故,著一層夾襖步出監(jiān)牢的瞬間徒仓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工誊垢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掉弛,地道東北人症见。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像狰晚,于是被迫代替她去往敵國和親筒饰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容