%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存儲對你的模型的變化的一個過程(他們只是一些硬盤上的文檔);
- Change your models (in
models.py
). - Run
python manage.py makemigrations
to create migrations for those changes - Run
python manage.py migrate
to apply those changes to the database.
$ 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
最後能得到打包程序