Django 入門(mén)筆記(Python3+Django2.2)

Django 入門(mén)筆記

官方網(wǎng)站:https://www.djangoproject.com/

  • Django makes it easier to build better Web apps more quickly and with less code.(Django可以方便地使用較少的代碼快速構(gòu)建web應(yīng)用。)

  • Django 最初被設(shè)計(jì)用于具有快速開(kāi)發(fā)需求的新聞?lì)愓军c(diǎn),目的是要實(shí)現(xiàn)簡(jiǎn)單快捷的網(wǎng)站開(kāi)發(fā)砾隅。

一、環(huán)境搭建

1.1. Python 3.7

1.2. PyCharm

1.3. Django 2.2+

  1. pip命令安裝
pip install Django==2.2.6

pip安裝django.png

2.2.6是最新的一個(gè)官方長(zhǎng)期支持版本拣挪。(2019-10-31)

  1. 查看安裝好的django版本
python -m django –version
打印django版本.png

二、新建django工程

1. 新建一個(gè)命名為helloworld的Django工程

django-admin startproject helloworld # helloworld是工程的名字
新建django工程.png

2. 創(chuàng)建工程之后會(huì)幫助我們自動(dòng)生成一些文件

自動(dòng)生成的工程文件.png
  • manage.py :使用django-admin命令行工具的快捷方式。它用于運(yùn)行與我們項(xiàng)目相關(guān)的管理命令。我們將使用它來(lái)運(yùn)行開(kāi)發(fā)服務(wù)器字逗,運(yùn)行測(cè)試,創(chuàng)建遷移等等宅广。

  • __init__.py:這個(gè)空文件告訴python這個(gè)文件夾是一個(gè)python包葫掉。

  • setting.py :這個(gè)文件包含了所有的項(xiàng)目配置。

  • urls.py:這個(gè)文件負(fù)責(zé)映射我們項(xiàng)目中的路由和路徑跟狱。例如俭厚,如果你想在訪問(wèn)URL /about/ 時(shí)顯示某些內(nèi)容,則必須先在這里做映射關(guān)系驶臊。

  • wsgi.py:該文件是用于部署的簡(jiǎn)單網(wǎng)關(guān)接口挪挤。

3. 直接啟動(dòng)工程

python manage.py runserver 8080 # 端口
直接運(yùn)行工程.png

4. 打開(kāi)瀏覽器進(jìn)入django的默認(rèn)頁(yè)面

http://127.0.0.1:8000

django默認(rèn)頁(yè)面.png

看到上面的頁(yè)面前面的環(huán)境配置都是ok的。

到這里我們可以進(jìn)入下一步关翎,在這個(gè)工程中創(chuàng)建一個(gè)應(yīng)用扛门,這個(gè)應(yīng)用可以來(lái)實(shí)現(xiàn)一些功能。

三纵寝、創(chuàng)建一個(gè)webapp

在Django的哲學(xué)中论寨,我們有兩個(gè)重要的概念:app:是一個(gè)可以做完成某件事情的Web應(yīng)用程序。project:是配置和應(yīng)用程序的集合。一個(gè)項(xiàng)目可以由多個(gè)應(yīng)用程序或一個(gè)應(yīng)用程序組成葬凳。

1. 在上面helloworld工程目錄下執(zhí)行下面的命令

python manage.py startapp myapp # myapp是應(yīng)用的名字

同樣的, django會(huì)幫助我們創(chuàng)建一些必要的文件和目錄绰垂。

創(chuàng)建app生成的文件.png
  • migrations/: 在這個(gè)文件夾里,Django會(huì)存儲(chǔ)一些文件以跟蹤你在models.py文件中創(chuàng)建的變更火焰,用來(lái)保持?jǐn)?shù)據(jù)庫(kù)和models.py的同步劲装。
  • admin.py: 這個(gè)文件為一個(gè)django內(nèi)置的應(yīng)用程序Django Admin的配置文件。
  • apps.py:這是應(yīng)用程序本身的配置文件荐健。
  • models.py:這里是我們定義Web應(yīng)用程序數(shù)據(jù)實(shí)例的地方酱畅。models會(huì)由Django自動(dòng)轉(zhuǎn)換為數(shù)據(jù)庫(kù)表。
  • tests.py:這個(gè)文件用來(lái)寫(xiě)當(dāng)前應(yīng)用程序的單元測(cè)試江场。
  • views.py:這是我們處理Web應(yīng)用程序請(qǐng)求(request)/響應(yīng)(response)的文件纺酸。

2. 設(shè)置一下全局的setting.py文件

在INSTALLED_APPS變量中添加我們創(chuàng)建的myapp應(yīng)用

INSTALLED_APPS = [
    ...
    'myapp.apps.MyappConfig', #2.2.6這樣寫(xiě)
]

修改LANGUAGE_CODE變量,將默認(rèn)的改為如下址否,這會(huì)使得admin后臺(tái)界面展示中文餐蔬,也可以不修改。

LANGUAGE_CODE = 'zh-hans'#設(shè)置中文

3. 創(chuàng)建一個(gè)簡(jiǎn)單頁(yè)面

修改視圖代碼views.py, 添加以下代碼:

from django.http import HttpResponse

def index(request):
    return HttpResponse('hello world!!!!!')# 將返回一個(gè)頁(yè)面佑附,并在頁(yè)面上繪制出“hello world7怠!R敉4逝馈!”

4. 在webapp內(nèi)創(chuàng)建路由

在myapp/下創(chuàng)建一個(gè)urls.py文件权均,然后添加以下代碼:

from django.urls import path

urlpatterns = [
    path('index/',myapp.views.index),# 當(dāng)用戶訪問(wèn)index/時(shí)會(huì)將請(qǐng)求交給views中的index方法
]

5. 將webapp的路由添加到工程下的路由

修改工程目錄下的urls.py中的代碼如下:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myapp/', include('myapp.urls')),# 當(dāng)用戶訪問(wèn)myapp時(shí)會(huì)將請(qǐng)求鏈接交給myapp中的urls.py處理
]

6. 訪問(wèn)并驗(yàn)證修改

http://127.0.0.1:8000/myapp/

myapp的helloworld頁(yè)面.png

至此顿膨,就完成了一個(gè)django項(xiàng)目helloworld工程的搭建。

四叽赊、django的基本原理

1. 架構(gòu)示意圖

django架構(gòu)圖.png

2.django的MVT結(jié)構(gòu)

Django對(duì)傳統(tǒng)的MVC設(shè)計(jì)模式進(jìn)行了修改恋沃,將視圖分成View模塊和Template模塊兩部分,將動(dòng)態(tài)的邏輯處理與靜態(tài)的頁(yè)面展現(xiàn)分離開(kāi)必指。而Model采用了ORM技術(shù)囊咏,將關(guān)系型數(shù)據(jù)庫(kù)表抽象成面向?qū)ο蟮腜ython類(lèi),將表操作轉(zhuǎn)換成類(lèi)操作塔橡,避免了復(fù)雜的SQL語(yǔ)句編寫(xiě)梅割。MTV和MVC本質(zhì)上是一樣的。

M:模板(Model), 對(duì)應(yīng)models.py文件, 是數(shù)據(jù)交互層的封裝葛家。

V:視圖(View)炮捧,對(duì)應(yīng)views.py文件,負(fù)責(zé)業(yè)務(wù)邏輯惦银。

T:模板(Template):將數(shù)據(jù)與HTML語(yǔ)言結(jié)合起來(lái)的引擎咆课。

3. 簡(jiǎn)單的MVT示例

本節(jié)主要通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明Django的MVT具體是個(gè)什么末誓。

STEP01 配置數(shù)據(jù)庫(kù)

配置數(shù)據(jù)庫(kù), 默認(rèn)情況使用SQLite3,修改settings.py中的DATABASES字段书蚪。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

也可以根據(jù)需要修改喇澡,數(shù)據(jù)庫(kù)配置,如:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

'ENGINE'的內(nèi)建的值有:

'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'

STEP02 修改models.py, 定義數(shù)據(jù)模型

數(shù)據(jù)模型與數(shù)據(jù)庫(kù)對(duì)應(yīng)殊校∏缇粒基本原則如下:

  • 每個(gè)模型在Django中的存在形式為一個(gè)Python類(lèi)。
  • 每個(gè)模型都是django.db.models. Model的子類(lèi)为流。
  • 模型的每個(gè)字段(屬性)代表數(shù)據(jù)表的某一列呕屎。
  • Django將自動(dòng)為你生成數(shù)據(jù)庫(kù)訪問(wèn)API。
from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=30)
    sex = models.CharField(max_length=30)
    age = models.CharField(max_length=30)

    def __str__(self):
        return self.name + ',' + self.sex + ',' + self.age

使用python manage.py makemigrationspython manage.py migrate命令將模型應(yīng)用到數(shù)據(jù)庫(kù)

>> helloworld>python manage.py makemigrations
Migrations for 'myapp':
  myapp\migrations\0001_initial.py

    - Create model Person

>> helloworld>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, myapp, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying myapp.0001_initial... OK
  Applying sessions.0001_initial... OK

完成之后會(huì)在工程根目錄下生成db.sqlite3文件

>> helloworld>ls
db.sqlite3  helloworld  manage.py  myapp

并在數(shù)據(jù)庫(kù)中創(chuàng)建表和其中的字段

創(chuàng)建數(shù)據(jù)庫(kù)和表字段.png

STEP03 將數(shù)據(jù)模型注冊(cè)到admin敬察,并添加測(cè)試數(shù)據(jù)

修改admin.py文件代碼如下:

from django.contrib import admin
from .models import Person

admin.site.register(Person)

創(chuàng)建admin后臺(tái)的超級(jí)管理員

python manage.py createsuperuser
創(chuàng)建admin超級(jí)管理員.png

打開(kāi)admin后臺(tái)http://127.0.0.1:8000/admin/秀睛,輸入超級(jí)管理員賬戶,登錄后臺(tái)莲祸□灏玻可以使用如下的頁(yè)面管理已注冊(cè)的數(shù)據(jù)。

admin管理頁(yè)面.png

添加幾條數(shù)據(jù)锐帜,后面我們將它展示在一個(gè)簡(jiǎn)單的頁(yè)面中

添加幾條測(cè)試數(shù)據(jù).png

打開(kāi)數(shù)據(jù)庫(kù)查詢田盈,發(fā)現(xiàn)數(shù)據(jù)已經(jīng)寫(xiě)入。

數(shù)據(jù)庫(kù)中的測(cè)試數(shù)據(jù).png

SETP04 創(chuàng)建一個(gè)person_list視圖

修改views.py, 添加如下代碼:

from django.shortcuts import render
from .models import Person
from django.forms.models import model_to_dict

def person_list(request):
    persons = Person.objects.all()
    person_list=[]
    for p in persons:
        p_dict = model_to_dict(p)
        person_list.append(p_dict)
    return render(request, 'myapp/person_list.html',{"persons":person_list})

  • Person.objects.all():查詢所有的person數(shù)據(jù)缴阎。

  • render(request, 'myapp/person_list.html', {"persons":person_list}):將查詢結(jié)果拼接模板返回給用戶

STEP05 為person_list視圖創(chuàng)建對(duì)應(yīng)的路由

修改urls.py, 添加如下代碼:

urlpatterns = [
    ...
    path('person_list/', views.person_list name='person_list'),
]

STEP06 補(bǔ)充模板文件person_list.html

在myapp子目錄下創(chuàng)建templates, 新建myapp/person_list.html模板文件允瞧,并添加如下代碼:

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <title>person_list</title>
</head>

<body>
    <ul>
        {% for person in persons %}
        <li> 姓名:{{ person.name}},性別:{{ person.sex }},年齡:{{ person.age }}</li>
        {% endfor %}
    </ul>
</body>

</html>
  • {% for %}是django的模板語(yǔ)法蛮拔,可以根據(jù)傳參動(dòng)態(tài)生成html頁(yè)面述暂。上例就是講查詢到的person傳入,拼裝成具體的li標(biāo)簽语泽。

STEP07 啟動(dòng)django訪問(wèn)頁(yè)面

訪問(wèn)地址http://127.0.0.1:8000/myapp/person_list/

展示如下,可以看到從db查詢到數(shù)據(jù)并展示在前端视卢。

personlist頁(yè)面展示.png

以上就完成了一個(gè)簡(jiǎn)單的django MVT的工程踱卵,Models負(fù)責(zé)數(shù)據(jù)層,通過(guò)集成Model類(lèi)可以使用django現(xiàn)成的API操作數(shù)據(jù)庫(kù)据过;Views負(fù)責(zé)業(yè)務(wù)層惋砂,溝通頁(yè)面請(qǐng)求和響應(yīng)請(qǐng)求,業(yè)務(wù)處理了查詢數(shù)據(jù)和生成頁(yè)面绳锅;Templates是視圖層西饵,可以使用模板語(yǔ)言創(chuàng)建某頁(yè)面的框架,有較好的通用性鳞芙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末眷柔,一起剝皮案震驚了整個(gè)濱河市期虾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驯嘱,老刑警劉巖镶苞,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鞠评,居然都是意外死亡茂蚓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)剃幌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)聋涨,“玉大人,你說(shuō)我怎么就攤上這事负乡‰拱祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵敬鬓,是天一觀的道長(zhǎng)淹朋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)钉答,這世上最難降的妖魔是什么础芍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮数尿,結(jié)果婚禮上仑性,老公的妹妹穿的比我還像新娘。我一直安慰自己右蹦,他們只是感情好诊杆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著何陆,像睡著了一般晨汹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贷盲,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天淘这,我揣著相機(jī)與錄音,去河邊找鬼巩剖。 笑死铝穷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的佳魔。 我是一名探鬼主播曙聂,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鞠鲜!你這毒婦竟也來(lái)了宁脊?” 一聲冷哼從身側(cè)響起断国,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朦佩,沒(méi)想到半個(gè)月后并思,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡语稠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年宋彼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仙畦。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡输涕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慨畸,到底是詐尸還是另有隱情莱坎,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布寸士,位于F島的核電站檐什,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弱卡。R本人自食惡果不足惜乃正,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望婶博。 院中可真熱鬧瓮具,春花似錦、人聲如沸凡人。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挠轴。三九已至传睹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岸晦,已是汗流浹背欧啤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留委煤,地道東北人堂油。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓修档,卻偏偏與公主長(zhǎng)得像碧绞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吱窝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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