Django 入門

  • Django 2.x
  • Python 3.x

Django是基于python的高級web框架,高度集成,可以高效快速開發(fā)。

1 目錄結(jié)構(gòu)說明

通過 pip 安裝 django,隨后通過指令創(chuàng)建一個myblog項目:

django-admin startproject myblog

項目結(jié)構(gòu)如下:

manage.py

manage.py是與項目進(jìn)行交互的命令行工具集的入口。
通過python manage.py 可以查看子命令:

通過runserver [port]啟動項目:

wsgi.py

WSGI(python web server gateway interface)
python服務(wù)器網(wǎng)關(guān)接口,python應(yīng)用和web服務(wù)器之間的接口

urls.py

URL配置文件
所有URL都需要進(jìn)行配置

setting.py

項目的總配置文件,數(shù)據(jù)庫、web應(yīng)用、服務(wù)器時間等

上圖中的ALLOWED_HOSTS 為允許的訪問源

APPS中為可執(zhí)行的應(yīng)用,后續(xù)自己創(chuàng)建的應(yīng)用也需要添加其中才能識別。

TEMPLATES就是模板的配置文件

數(shù)據(jù)庫配置,其它數(shù)據(jù)庫的添加需要進(jìn)入網(wǎng)址進(jìn)行查看與編配。

init.py

python的模塊聲明文件,有了它整個文件夾就可以作為一個模塊進(jìn)行引用。

2 創(chuàng)建項目

進(jìn)入manage.py的同級目錄,輸入startapp blog
blog為應(yīng)用名

在配置文件中添加一下

應(yīng)用的目錄結(jié)構(gòu):

migrations

數(shù)據(jù)遷移模塊,內(nèi)容自動生成。

admin.py

應(yīng)用的后臺管理系統(tǒng)。

apps.py

應(yīng)用的配置文件

models.py

數(shù)據(jù)表的模塊文件,用于支持ORM框架
類似于MVC中的Model

tests.py

自動化測試模塊,需要編寫測試腳本。

views.py

執(zhí)行響應(yīng)的代碼所在模塊,
主要的代碼編輯區(qū)。

在views中添加相關(guān)的響應(yīng):

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse("hello world")

然后在urls中進(jìn)行相關(guān)的配置:

from django.contrib import admin
from django.urls import path
//import進(jìn)新建應(yīng)用:
import blog.views as blogView

urlpatterns = [
    path('admin/', admin.site.urls),
//以新建應(yīng)用為主題,創(chuàng)建path
    path('blog/', blogView.index),
]

驗證url的配置情況:

小結(jié):
  • 編輯blog.views:
    每個響應(yīng)對應(yīng)一個函數(shù),函數(shù)必須返回一個響應(yīng)。
    每個函數(shù)必須存在一個參數(shù),約定為request。
    一個響應(yīng)函數(shù)對應(yīng)一個url

  • 編輯urls.py
    每個url都需要在文件中編寫
    url函數(shù)放在urlpatterns列表中
    url函數(shù)三個參數(shù):URL,對應(yīng)方法,名稱


補(bǔ)充另外一種配置url的方法。
首先在項目根目錄下的urls中添加include模塊并修改urlpatterns

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

from django.urls import include

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

然后在對應(yīng)的app下新建urls,并添加內(nèi)容:

from django.urls import path
from . import views

urlpatterns = [
    path('blog/', views.index),
]

新的url將由兩者拼接而成:

3 Templates

Templates就是HTML文件,使用了Django模板語言,可以使用第三方模板如Jinja2

當(dāng)使用其它第三方模板的時候,修改setting中的templates:

編寫頁面過程:

在之前創(chuàng)建的app目錄下創(chuàng)建templates目錄,并在目錄中新建html文件:

然后在view.py中返回一個render()

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return render(request,'index.html')

render()一般包含三個參數(shù),第一個為request,第二個為html頁面,第三個為返回的數(shù)據(jù)。
render()支持的數(shù)據(jù)類型為字典,在html文件中直接使用{{參數(shù)名}}來使用傳遞的數(shù)值

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return render(request,'index.html',{'hello':'hello info'})
<h1>{{ hello }}</h1>

、

常見問題:

Django查找Template時,按照installed_apps中的添加順序產(chǎn)找templates,不同app中templates目錄下的同名html文件會沖突。

解決方案:在app的Templates目錄下創(chuàng)建以app名稱為名的目錄,將html文件放入,同時修改views中的路徑。

4 Models

通常,一個model對應(yīng)數(shù)據(jù)庫中的一張數(shù)據(jù)表。
Django中的Models以類的形式表現(xiàn),包含一些基本字段和數(shù)據(jù)的行為。

也被稱為ORM(Object Relation Mapping),對象關(guān)系映射,實現(xiàn)了對象和數(shù)據(jù)庫之間的映射,隱藏了數(shù)據(jù)訪問的細(xì)節(jié)。

  • 編寫Model:

在應(yīng)用根目錄下創(chuàng)建一個models.py文件,并引入models模塊。

創(chuàng)建類,集成models.Model類,該類即使一張數(shù)據(jù)表。
在類中創(chuàng)建字段。

from django.db import models


class Article(models.Model):
    title = models.CharField(max_length=32,default="title")
    content = models.TextField(null=True)
  • 生成數(shù)據(jù)表:
    命令行進(jìn)入manage.py同級目錄,執(zhí)行:
python manage.py makemigrations [app name]
python manage.py migrate
//如果無參數(shù),則默認(rèn)所有目錄下的app都進(jìn)行該操作。

如上圖所示,未指定APP時,會對所有app都進(jìn)行操作,包括其自帶的app

在app目錄下的migrations里可以看到生成的initial文件:

查看sql語句:

python manage.py sqlmigrate blog 0001

未進(jìn)行額外配置的情況下,默認(rèn)使用sqlite3數(shù)據(jù)庫,在項目根目錄下的db.sqlite3。
在該數(shù)據(jù)庫中創(chuàng)建相關(guān)數(shù)據(jù):

  • 在頁面中顯示:

在views.py 中:

from blog.models import Article

def index(request):
    article = Article.objects.get(pk=1)
    return render(request,'blog\index.html',{'article':article})

在html文件中:

<body> 
<h1>{{ article.title }}</h1>
<h1>{{ article.content }}</h1>
</body>

5 Admin

Django自帶的后臺數(shù)據(jù)管理系統(tǒng),可以讓被授權(quán)的用戶在Admin中進(jìn)行數(shù)據(jù)庫管理。

  • 配置Admin

創(chuàng)建用戶:

python manage.py createsuperuser

依次輸入用戶名、郵箱、密碼


訪問/admin進(jìn)入后臺頁面。

通過修改settings中的 LANGUAGE_CODE = 'zh_Hans'來使用中文界面。

  • 配置應(yīng)用
    在應(yīng)用下的admin.py中引入自身的models模塊。

例如,編輯admin.py

// 2.x  似乎可以直接from models import  在3.x中需要使用 . 來表達(dá)當(dāng)前目錄下。
from .models import Article

admin.site.register(Article)

進(jìn)入對應(yīng)app后可以修改內(nèi)容

  • 修改數(shù)據(jù)的默認(rèn)顯示名稱

默認(rèn)為object
可以在對應(yīng)的類下(此處為Article)添加:
__str__(self) #3.x
__unicode__(self) #2.x

    def __str__(self):
        return self.title

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容