Django入門

Fredette發表於2024-03-10

前幾天看了Python的一些基礎知識,然後又瞭解了一下相關的web框架,比較主流的有Django和Flask,比較了一下之後決定學Django,基礎供能比較完善,對於初學者應該更友好一些。一邊跟著大神的部落格做,一邊整理了這篇部落格,沒什麼新的東西,只是我個人的學習筆記,其中一些部分我專門修改成不太一樣的東西,以免學習過程中不求甚解的忽略。總的來說大神這篇部落格非常不錯,如果你是剛學習了Python的基礎語法,想要試著做點什麼,那麼就跟著下面的參考資料中,大神的部落格過一遍吧,很有趣很簡單,就能擼一個網站的demo了。

參考資料Leo_wlCnBlogs

原始碼下載

在此由衷感謝作者的分享。

安裝PyCharm

直接搜尋PyCharm下載安裝Windows專業版,這裡有專業版註冊碼。

建立project

安裝完成之後會提示建立新的project,裡邊就能夠直接選擇建立Django專案,點選之後如果你沒有Django會自動安裝,這裡要掛VPN。下載之後選擇目錄,就會自動建立目錄了。直接執行,就能夠看到第一個頁面。
這裡寫圖片描述

這時候還沒有myapp資料夾和static資料夾,經過下邊的步驟才有。

建立APP

完成上邊的步驟之後,雖然能執行伺服器了,但是還不能顯示我們所需要的內容。接下來建立app。在pycharm下方的terminal終端中輸入命令:python manage.py startapp myapp
這樣就建立了一個叫做myapp的APP,django自動生成“myapp”資料夾。

然後把我們新定義的app加到settings.py中的INSTALL_APPS中。

編寫路由

路由都在urls檔案中,首先匯入隊形的app的views檔案from myapp import views然後在urlpatterns之中加上url對映url(r'^index/', view.index),
這樣,使用者在瀏覽器中輸入的url就會對映到相應的業務處理邏輯上了。

編寫業務處理邏輯

業務處理邏輯在views.py檔案中。

from django.shortcuts import HttpResponse
def index(request):
    # request.POST
    # request.GET
    return HttpResponse('hello world!')

通過編寫路由和業務處理邏輯,我們將index這個url指向了views裡的index()函式,它接收使用者請求,並返回一個hello world 字串。

執行web服務

命令列執行方式:python manage.py runserver 127.0.0.1:8000
在pycharm中,可以直接按按綠色小三角的按鍵來執行。成功之後下方還會顯示連線,點選即可開啟相應的頁面。
如果有錯誤,Django會在頁面中詳細顯示錯誤內容。根據上邊的步驟開啟,會發現出現 404錯誤,這是因為我們指定的是index頁面,只要在url後邊加上index即可。

返回HTML檔案

首先寫一個index.html
然後修改一下views檔案:
1.首先pycharm一般會自動幫你匯入Django的render模組。沒有的話要記得加上
2.然後把之前的index函式改為:

def index(request):
    # request.POST
    # request.GET
    #return HttpResponse('hello world!')
    #下邊的引數request是固定的,第二個引數是指定的檔案,即index.html
    return render(request,'index.html')

當你想返回一個html檔案時,就要使用render方法來渲染(其實就是打包的意思)。render是Django提供的方法和規則,直接使用即可。

為了讓Django知道我們的html檔案在哪裡,需要修改settings檔案的相應內容。但是由於是Django給我們建立的工程目錄,所以預設情況下它知道我們的html就放在template這個資料夾下邊,我們無需修改。

頻繁重啟時,由於埠為釋放的原因,可能會啟動不了服務,修改下埠就OK了。

使用靜態檔案

現在我們已經能夠返回html了,但是肯定不能少了css和js,這樣前端才算完整。在Django中,一般將靜態檔案放在static目錄中,這裡就自己來建立一個static目錄。然後在目錄下放置css和js。
為了讓Django找到這個目錄,依然需要對settings進行配置。尤其這個static目錄是我們自己建立的Django還不知道它是幹嘛的。開啟之後揮發新啊在settings檔案的底部,Django已經為我們預留了位置,直接設定即可。

如圖

按照上圖進行設定之後,就可以在html中引入js和css了。
這裡寫圖片描述

重啟重新整理即可看到結果。

接受使用者傳送的資料

接下來就要讓web伺服器和使用者之間進行互動了。我們在html中設計一個表單,讓使用者輸入資訊,再提交給index這個url,伺服器將收到這些資料:
1.修改html,加個表單:

<h1>input your massage:</h1>
<form action="/index/" method="post">
    <input type="text" name="name" placeholder="input your name">
    <input type="text" name="age" placeholder="input your age">
    <input type="submit" value="submit">
</form>

2.修改views.py檔案,業務邏輯index函式:

def index(request):
    if request.method == 'POST':
        name = request.POST.get('name',None)
        age  = request.POST.get('age',None)
        print(name,age)
    return render(request,'index.html',)

3.此事直接使用會出錯,因為Django有一個跨站請求保護的安全機制,我們在settings檔案中把下列語句註釋掉:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

接下來就能正常工作了,在瀏覽器中輸入提交之後,我們能在pycharm中看到相應的資料。

返回動態頁面

上一節我們能收到使用者資料了,但是返回給使用者的還是靜態頁面。一般來說,我們收到資料之後會在後臺進行處理,之後再返回給使用者。

這時候Django採用jinja2語言編寫動態模板,jinja2會根據提供的資料,替換掉html中的相應部分。

模板引擎:模板引擎分為前端模板引擎和後端模板引擎,其區別在於是否在瀏覽器上渲染模板、填充資料。vue,react,angularjs等mvvm框架也自帶模板輸出模組,他們也屬於前端模板引擎。
另外,除了mvvm前端框架自帶的模板輸出模組在瀏覽器跑之外,其他前端js模板引擎大多數都是基於nodejs伺服器執行的,所以,js模板引擎!= 前端模板引擎(部分模板引擎可以在瀏覽器跑)。

進一步瞭解可以看看這篇部落格

jinjia2語言來寫模板的語法可以在這裡學習

詳細語法入門後再深入學習。

接下來,改造views.py檔案:

user_list = [
    {'user':'Jack','age':'16'},
    {'user':'Tom','age':'20'},
    {'user':'Alex','age':'26'}
]

def index(request):
    if request.method == 'POST':
        name = request.POST.get('name',None)
        age = request.POST.get('age',None)
        temp = {'name':name,'age':age}
        user_list.append(temp)
    return render(request,'index.html',{'data':user_list})

然後改造index.html檔案,插入jinjia2模板語法:

<h1>user list</h1>
<table>
     <tr>
         <th>name</th>
         <th>age</th>
     </tr>
     // jinjia2模板語法的迴圈和插值
     {% for line in data %}
         <tr>
             <td>{{ line.name }}</td>
             <td>{{ line.age }}</td>
         </tr>
     {% endfor %}
 </table>

使用資料庫

上邊已經實現了跟使用者的輸入輸出,就剩在資料庫裡邊儲存資料了。Django通過自帶的ORM框架運算元據庫,並且自帶輕量級的SQLite資料庫。接下來操作試試:

1.在settings檔案中註冊app:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #在這裡加入你建立的app資料夾名
    'myapp'
]

不註冊它,你的資料庫就不知道給哪個app建立表。

2.在settings中,配置資料庫相關的引數,如果使用自帶的SQLite,則不需要修改:

DATABASES = {
    'default': {
        # 在這裡指定使用的資料庫型別,這裡指定了Django自帶的輕量資料庫SQLite3,初學直接用它就好了,這裡就不改了。
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

3.編輯models.py檔案,也就是MTV中的M:

# 這邊要繼承這個models.Model類,固定寫法
class UserInfo(models.Model):
    #建立2個欄位,最大長度32,型別是char
    name = models.CharField(max_length=32)
    age = models.CharField(max_length=32)

我們建立了兩個欄位分別儲存名字和年齡。

4.在pycharm的teminal中通過命令建立資料庫的表。這裡需要2條命令:

python manage.py makemigrations

輸入之後會在app中的migrations資料夾中建立一個新檔案。、

再輸入:

python manage.py migrate

來同步資料庫,之後會出來一大堆OK。

5.修改views.py中的業務邏輯:

def index(request):
    if request.method == 'POST':
        name = request.POST.get('name',None)
        age = request.POST.get('age',None)
        # 新增資料到資料庫
        models.UserInfo.objects.create(name=name,age=age)
    # 從資料庫中讀取所有資料
    user_list = models.UserInfo.objects.all()
    return render(request,'index.html',{'data':user_list})

重啟web伺服器,重新整理頁面之後,就能跟使用者進行資料互動了,在上邊書寫提交,然後在下邊顯示出來。

至此一個簡單的Django專案就完成了。

Django總結

跟著大神的思路走了一遍之後,發現Django確實是一個非常棒的框架,功能強大,常用的東西都幫你整合好了,作為初學者,沒有什麼大坑,一步步認真跟過來就能完成了。
最後,大神的建議我深以為然:學習新東西的時候,不要一開始就扎入細節,先對整理有個認識,瞭解知識框架,再學習基本內容,最後再深入。之前看了Python的語法,看了挺久的,也寫不出什麼東西,今天跟著這個部落格走了一遍, 一個簡單的demo就出來了。接下來我只要在它的基礎上修修補補,增加功能,就能完成簡單的網站了,在過程中,遇到哪裡不懂的,再去搜尋學習,解決問題,我覺得這樣的學習方式效果好,而且不枯燥,很有成就感。

相關文章