本文首發(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
備注
-
python manage.py migrate
意思是把數(shù)據(jù)模型(Python中定義的Model)和數(shù)據(jù)庫同步讯檐。 -
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項目的結構如下
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/ 就顯示了物品列表如下。