摘要:原文地址在兩篇文章幫你入門上一文中,我們已經做了一個簡單的小網站,實現了保存用戶數據到數據庫,以及從后臺數據庫讀取數據顯示到網頁上這兩個功能。注意測試時并不需要運行服務,這樣能節(jié)省服務的開銷,提高測試的速度。
原文地址
在兩篇文章幫你入門Django(上)一文中,我們已經做了一個簡單的小網站,實現了保存用戶數據到數據庫,以及從后臺數據庫讀取數據顯示到網頁上這兩個功能。
看上去沒有什么問題了,不過我們可以讓它變得更加完美,比如說為它添加一個簡單的后臺,用來管理我們的Question數據庫,或者是寫點測試單元來看看我們的程序有沒有什么Bug。
后臺管理首先需要添加后臺管理員賬號,只需要簡單的 createsuperuser 命令,如下:
$ python manage.py createsuperuser Username (leave blank to use "feizhao"): happy Email address: Password: Password (again): Superuser created successfully.
然后就可以通過 http://127.0.0.1:8000/admin/ 進入管理員登錄頁面。我們用剛才創(chuàng)建的管理員賬號登錄成功后就會看到Groups和Users兩個可以編輯的內容,它們是Django內置的認證模塊django.contrib.auth提供的數據庫,進入Users就會看到剛剛創(chuàng)建的管理員用戶happy了。
目前后臺還看不到我們的Question數據庫,因為還沒告訴后臺它的存在。我們可以在questions應用下的admin.py文件里面注冊該數據庫的存在,注冊的語句非常簡單,如下:
from django.contrib import admin from questions.models import Question admin.site.register(Question)
這樣我們刷新后臺之后,就能看到Question數據庫了,如下圖:
進入Question數據庫后,我們會看到每一條記錄,不過這里顯示的結果可能是這樣子:
這是因為默認情況下,每條記錄顯示的是str()返回的內容,而我們沒有在class Question(models.Model)中覆蓋該方法。不過我們可以在這里指定數據庫記錄顯示某個字段,方法也特別簡單,修改admin.py如下:
class QuestionAdmin(admin.ModelAdmin): list_display = ("context",) admin.site.register(Question, QuestionAdmin)
這樣每條記錄顯示的就是context內容了,我們進去某條記錄后,會看到所有的字段,并且可以進行更新、刪除、添加等操作。Django后臺的可定制性還是非常高的,我們可以按照自己愛好打造屬于自己的后臺。
自動化測試Django另一個比較不錯的地方就是提供了完整的自動化測試機制,方便開發(fā)人員進行測試。仍然以我們前面的questions這個應用為例,我們會發(fā)現在問題描述框沒有輸入任何內容時點擊提交,仍然會跳轉到添加成功頁面,也就是說我們添加了一個空的問題,這當然不是我們想要的,我們可以寫一個程序來測試我們的添加問題的功能。
Django中,實現測試非常簡單,我們可以在questions應用中新建tests.py文件,在里面寫好測試邏輯,然后用django的測試系統(tǒng)完成測試。下面即為我們的測試程序questions/tests.py:
from django.test import TestCase from django.test import Client class QuestionMethodTests(TestCase): def test_add(self): client = Client() response = client.post("/add_done/", {"content": ""}) self.assertNotEqual(response.status_code, 200)
我們模擬了一個客戶端client,將空字符串傳給content字段,然后發(fā)起一個post請求到/add_done/頁面(默認情況下測試時并不檢查CSRF字段),然后斷言post請求不成功(也就是返回包的狀態(tài)碼不為200)。下面運行測試程序:
$ python manage.py test questions Creating test database for alias "default"... F ====================================================================== FAIL: test_add (questions.tests.QuestionMethodTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/feizhao/Documents/python_demo/mysite/questions/tests.py", line 10, in test_add self.assertNotEqual(response.status_code, 200) AssertionError: 200 == 200 ---------------------------------------------------------------------- Ran 1 test in 0.009s FAILED (failures=1) Destroying test database for alias "default"...
測試沒通過,說明確實插入了空白問題。注意測試時并不需要運行web服務,這樣能節(jié)省HTTP服務的開銷,提高測試的速度。現在對views中的add_done稍作改動,如下:
def add_done(request): content = request.POST["content"] if content != "": add_question = Question() add_question.context = content add_question.save() return render( request, "questions/add_done.html", {"question": content}, ) else: return redirect("/add/")
首先檢查字符串是否為空,為空的話重定向頁面到/add/,不為空則添加問題成功。再次運行測試程序,則通過測試,結果如下:
$ python manage.py test questions Creating test database for alias "default"... . ---------------------------------------------------------------------- Ran 1 test in 0.007s OK Destroying test database for alias "default"...
其實這個應用還有bug就是一個問題可能重復提交多次,這里不詳細闡述。
命令行交互有時候我們想驗證下某條語句是否符合預期,或者是輸出某個變量觀察一下值,這時候直接在項目里實現可能會非常麻煩。這種情況可以使用python解釋器的交互模式,為了避免手動導入django的配置環(huán)境,可以運行 python manage.py shell,然后就可以使用django的API,并且在當前項目目錄進行交互,如下例:
$ python manage.py shell Python 2.7.5 (default, Mar 9 2014, 22:15:05) [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole)
from questions.models import Question
null_question = Question()
null_question.save()
for question in Question.objects.all():... print question.context ... as as 程序員為什么最帥 程序為什么老出bug
交互模式使用起來可能事半功倍,所以不要忘了哦。
深入學習好了,前面就是django的一些重要的特點了,下面來看看有哪些資源可以幫我們更好地學習django。
Django中國社區(qū)是國內的Django開發(fā)社區(qū),人氣不是很旺,不過也能在里面找到有用的東西。比如@evilbinary在這里一個博客,兼容wp,代碼高亮功能支持 提供了一個用Django搭建的博客,并給出了源碼,我們可以學習。還有一些不錯的Django開源項目,比如這個小的BBS論壇fairybbs,還有這個登錄的應用django-siteuser。
中文的教程目前有djangobook 2.0,但是書中使用的Django版本太低,因此不推薦使用。英文的資料還是挺豐富,不過還是推薦讀文檔,雖然文檔有時候特別坑人(被坑了好多次)。
此外,除了Stackoverflow(這個太喜歡了,誰用誰知道,不用擔心英語太爛,放代碼和錯誤提示,實在不行用Google翻譯加一點描述就行。總而言之,SO就是程序員的天堂啊), Segmentfault這些問答網站,很多Django用戶在郵件列表(郵件列表是groups.google.com,所以你懂的)里提問題、回答問題,這里的氛圍非常不錯,各種問題都有人來幫你。比如這種中二的問題Serving static files and media in Django 1.7.1也是有人十分認真的作答的。所以,不要害羞,有問題大膽問吧。
如果你決定好好玩Django了,那么先看一下Django FAQ,可能會解決關于Django的一些疑問。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45339.html
摘要:本文結合官方文檔中的個小教程,幫你了解。一共分上下兩篇文章,上篇主要來分析處理的機制,下篇來介紹下提供的后臺管理,以及單元測試等強大的功能。項目創(chuàng)建成功之后,可以運行生成相應的數據庫表是引入的命令,較早的版本可以用其他的命令代替。 原文地址 相信用過python的人都聽過Django的大名,知道它是一個web框架,用來支持動態(tài)網站、網絡應用程序以及網絡服務的開發(fā)。那么為什么我們需要...
摘要:每一條日志記錄也包含級別,代表對應消息的嚴重程度。即格式化器,主要功能是確定最終輸出的形式和內容。最好是日志能夠按自然天進行記錄和分割。 上一章學習了自動化測試,很好,現在我們可以絞盡腦汁寫出一份全面的測試,來保證代碼永遠健康了。 話雖如此,但是作為一個獨立開發(fā)者很難寫出真正全面的測試代碼。這是因為用戶在使用你的網站時可不會循規(guī)蹈矩,而是會以各種怪異的姿勢瀏覽網頁、上傳數據。但這也不是...
摘要:編程從入門到實踐筆記。執(zhí)行命令后,項目的根目錄下會多出一個名為的數據庫文件。下面創(chuàng)建一個主題類用戶學習的主題返回模型的字符串表示類是中的一個定義了模型基本功能的類。這種交互式環(huán)境稱為,常用語測試項目和排除故障。 《Python編程:從入門到實踐》筆記。從本篇開始將是該書的最后一個項目,將用3篇文章來介紹Django的基礎。完成一個學習筆記的小網站。 1. 前言 在本篇中,我們將: 用...
摘要:首發(fā)于我的博客線程池進程池網絡編程之同步異步阻塞非阻塞后端掘金本文為作者原創(chuàng),轉載請先與作者聯系。在了解的數據結構時,容器可迭代對象迭代器使用進行并發(fā)編程篇二掘金我們今天繼續(xù)深入學習。 Python 算法實戰(zhàn)系列之棧 - 后端 - 掘金原文出處: 安生??? 棧(stack)又稱之為堆棧是一個特殊的有序表,其插入和刪除操作都在棧頂進行操作,并且按照先進后出,后進先出的規(guī)則進行運作。 如...
閱讀 1036·2021-09-22 15:26
閱讀 2615·2021-09-09 11:52
閱讀 1901·2021-09-02 09:52
閱讀 2248·2021-08-12 13:28
閱讀 1187·2019-08-30 15:53
閱讀 514·2019-08-29 13:47
閱讀 3388·2019-08-29 11:00
閱讀 3101·2019-08-29 10:58