Django官方手冊閱讀(投票應用)

%Part 1
from django.conf import settings
if settings.DEBUG:
    # Do something

因爲django.conf.settings並不是模塊而是一個對象,不能像引用對象一樣。

不能在程序運行的時候更改settings對象的內容,只能在setting 文件中更改。


進入mysite目錄

$ python manage.py runserver
這樣就可以開始一個django建立服務端。(這是在做一個網絡框架而不是網絡服務器)

端口8000是默認的可以更改;

Part 2

mysql連接不上之前要在管理工具中啓動mysql服務

並且還要重新添加環境變量;

北京時間是:'UTC+8'

$ python manage.py migrate

這是爲了在我們使用相關數據庫的時候在我們使用前,自動創建表格;這是與在setting.py中使用是一致的。

接下來要做的是創建模型:


model模型是數據的準確來源,它包含了數據的最基本框架和行爲。我們的目的是爲了形成一個model讓它自動提取數據。

在投票app中創立兩個model:question 和 choice

question包括:1.問題;2.出版的日期

choice包括:1.選擇的text 2.與之相應的投票

並且:每個選擇與一個問題相關聯

解釋:每個類都代表一個模型;且代表一個數據庫表;

每個變量:python中作爲一個變量,數據庫中作爲一列的標題(屬性什麼的)

foreign key是用來告訴數據庫:每個選擇都與一個問題相關


接下來要激活模型(創建數據庫啥的):

Migrations是Django存儲對你的模型的變化的一個過程(他們只是一些硬盤上的文檔);

使用API
$ python manage.py shell
不直接使用'python'是因爲 manage.py 設置了 DJANGO_SETTINGS_MODULE環境變量,能夠在mysite/settings.py file中給出Django引用的python模塊路徑

一旦進入了shell中就可以使用數據庫API了。

注:使用timezone.now() 而不用datetime.datetime.now()


一個問題:

當我發現我的choice類的一個屬性寫錯了,應把pub_dat改爲pub_date,我僅僅在pycharm上更改了,結果發現,migration中的數據庫的屬性並沒有更改;出現這個問題的時候,要重新輸入:


第二個問題:

Question.objects.get(某屬性)如果返回值多於一個會報錯

這個時候應該使用Question.objects.filter(某屬性),filter會返回一個列表。


Django管理員的創建(自動創建)

1.創建超級管理員

$ python manage.py createsuperuser

2.進入網站(我覺得是)

$ python manage.py runserver

3.使得投票app能夠被admin管理者更改:我們需要告訴管理員,Question對象有admin接口



網址:http://127.0.0.1:8000/polls/34/

每個view必須要做兩件事的其中之一:返回HttpResponse包含了請求的內容,或者返回HTTP404;

其他的隨便你。


邏輯:python難以編寫頁面設計->用django中template模板調用html->捷徑:使用render()函數取代httpResponse->使用get_object_or_404()取代http404()[同時要使用render()進行迴應]


有個問題:頁面的設計在view.py中是很難編碼的。

解決方法:創建Django模版,把設計從Python語言中分離出去


步驟1:創建/polls/templates目錄(在/mysite/settings中可以看到調用方式)

       創建/polls/templates/polls/index.html

重寫polls/views.py中的index()函數:

使用模板(template)的捷徑:運用render()模板能夠引用模板,填充內容,返回HttpResponse:這樣可以不import loader 和 httpresponse模塊了。


引起404error

使用try:except並raise404的捷徑:get_object_or_404()

使用此捷徑的原因:這樣會將模型層耦合到視圖層,而django的設計最重要的原理就是鬆散地耦合(完全看不懂·····)


我的pycharm對html也沒有自動補全啊哭,我的是教育郵箱的付費版呀····


注意對url地址,使用命名空間進行區分。


 精簡代碼:

學一個詞:radio button單選按鈕

In short, all POST forms that are targeted at internal URLs should use the {% csrf_token %} template tag.

接着:將程序改爲能處理提交的數據的程序

reverse翻譯就是“反轉”的意思,反解析url以直接訪問其它視圖方法。

問題:會產生競爭現象;

解決方法:使用F()函數;

解釋:F()函數表示了一個模塊的某一欄的值,它使指向某一模塊的某一字段值變爲可能,在不是真的把這一字段的值從數據庫中挖出來進行作用,而是對這個對象進行作用

精簡代碼:

現在就使用越少越好的原則精簡代碼了。

result()和detail()的代碼都是差不多的。這代表了基本網頁開發的普遍情況:根據url中的參數從數據庫中提取數據,加載一個模板(html頁面),返回一個規範的模板。因爲它們如此相像,Django提供了一個捷徑:the “generic views” system.


自動生成的管理員設置

django admin是django自己控制的,它的接口用的是自己的模板

python -c "import django; print(django.__path__)"
可以知道django的文件存儲在哪裏。


打包程序:

原理:一個python package包含許多modules。一個application就是一個package。我們發現只需要/polls目錄下的內容

1. 創建polls的父目錄django-polls;

2.把polls目錄轉移到django-polls目錄下

3. 創建.rst文件

4. 創建django-polls/LICENSE文件(引用別人文件要有版權)

5. 創建setup.py文件

6.添加MANIFEST.in文件,包含原文件夾中沒包括的內容(最好寫doc文件解釋幷包含進去)

7.最後在命令行這個新建django-polls文件夾下運行: 

python setup.py sdist

最後能得到打包程序



發佈了20 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章