iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
Modern Web

暑假旅程之自學Django系列 第 29

[Day29] 除錯(debug)的心得

今天來分享一下我自己如何除錯,出錯很正常(對我來說啦QWQ),但是發現有錯,很重要的是,要知道自己錯在哪裡,所謂「知己知彼,百戰百勝」我自己會分享幾個簡單的技巧方式給夥伴們。

  1. 第一種方法就是把想知道的東西都印出來,很多時候可能是小細節,我們沒有注意到,可能是參數的資料型態不對,或者是抓取的資料根本不是你想的那樣,所以我常常會在程式中直接print(變數名稱)或者是print(type(變數名稱)),在API裡面這樣寫,我們在Postman測試發送請求的時候,我們可以在輸入指令的cmd(命令指示字元),裡面看到印出來的是甚麼東西。

  2. 第二種方法有點像是走迷宮,沿路丟餅乾屑做記號,用註冊API為例子

@csrf_protect
def register(request):
    if request.method == "POST":
        try:
            data = json.loads(bytes.decode(request.body,"utf-8"))
            account = data["account"]
            password = data["password"]
            email = data["email"]
            phone = data["phone"]
            id = uuid.uuid5(uuid.NAMESPACE_DNS,account)
            print("1")
            check_account = UserProfile.objects.filter(account=account).first()
            print("2")
            if check_account is None :
                print("3")
                user = UserProfile.objects.create_user(id=id,username=account,account=account,email=email,phone=phone)
                user.set_password(password)
                user.save()
                message = {"status" : "註冊成功"}
            else :
                message = {"status" : "註冊失敗,帳號已註冊"}
        except Exception as e:
            print(e)
            message = {"status" : "error"}
        return JsonResponse(message)  

我在裡面加了print,也就是印出,我在這裡分別印出1、2、3,如果有一天在測試API的時候有問題,可是不知道卡在哪一行程式的時候,你就可以從記號中發現是哪一行function有問題,一路做記號就像下面這張圖一樣。

  1. 第三種方法是把例外印出來,這邊以信箱驗證API為例子,假如我把email_token class 裡 init 的這一行self.salt =str(base64.encodestring(bytes("1_23a48c9710295","utf-8")))改成 self.salt = base64.encodestring(bytes("1_23a48c9710295","utf-8")),因為signing.TimestampSigner參數資料類型產生except,這時候把它印出來就可以看到except的訊息。

    except Exception as e:
        print(e)
    

    就會像底下這張圖一樣

    他告訴我資料型態str和byte沒辦法串在一起

這三種除錯技巧是我自己的習慣使用的,這邊給夥伴們提供參考,明天是鐵人賽最後一天了 !! 終於阿~~~ 明天就輕鬆一下,分享一下我完賽的心得。


上一篇
[Day28] 介紹 CRUD
下一篇
[Day30] 總複習、完賽心得
系列文
暑假旅程之自學Django30

尚未有邦友留言

立即登入留言