Django 的表格 (Django.forms.Form) 能夠從設定的欄位產生對應的 html 表格,並幫助開發者從提交的資料中過濾有害的資訊,將資料轉換成 Python 物件供取用。還可以撰寫額外的程式碼以驗證提交的資料是否有效。
撰寫驗證資料的方式有三種:在表格的定義中撰寫 clean_<field_name> 函式、繼承對應的欄位類別並提供 validate()、撰寫驗證類別並傳入到對應的欄位中。本篇網誌使用第三種方法來驗證使用者上傳的檔案,檢查檔案副檔名、MIME type、檔案大小。
2019年3月31日 星期日
2019年1月17日 星期四
[筆記] 矩形的碰撞偵測 (上篇)
寫遊戲常常用 API 來幫忙處理碰撞偵測,當需要自己寫類似的功能時,發現內部的運作沒有想像中的簡單。最近因為專案的需求,撰寫打磚塊遊戲,原本想利用 pygame 的碰撞偵測,但是不適合這個專案,只好挽起袖子研究研究作作看。上篇介紹矩形碰撞偵測的原理,下篇則介紹在碰撞之後反彈的效果。
2018年12月3日 星期一
[筆記] Python - 應用 decorator 實作函式開關
最近為了課程撰寫遊戲的 server 端 (專案於 Github),主要提供遊戲資訊跟進程控制的功能,client 端是一群擁有通訊功能的迷宮車,兩邊靠既定的指令溝通。在設計遊戲功能時,有些指令希望只在遊戲開始後才有作用,但又不可能讓 client 端乖乖在遊戲開始後才發送指令。最直觀的作法就是在每個處理指令的函式中檢查遊戲是否開始:
本篇主要介紹我如何在專案中使用 decorator,先簡單介紹 decorator,接著是本篇主題 ─ 利用 decorator 來實作函式開關,與在類別中使用 decorator,最後是如何進一步強化 decorator 的能力。以下講解皆使用 python 3。
def game_command(...):
if not game_is_started:
return
# Other jobs
但很快發現充滿重複的程式碼,而且影響程式碼的簡潔與維護的不方便。於是上網查找有無類似 C# 的 function attribute 的寫法,只要在函式的定義前加上像是 game_started 的 attribute,就可以控制該函式的行為。於是找到了 decorator (裝飾器)。本篇主要介紹我如何在專案中使用 decorator,先簡單介紹 decorator,接著是本篇主題 ─ 利用 decorator 來實作函式開關,與在類別中使用 decorator,最後是如何進一步強化 decorator 的能力。以下講解皆使用 python 3。
2018年3月4日 星期日
2018年2月19日 星期一
2018年2月18日 星期日
[桌遊/心得] PANDEMIC 瘟疫危機 - 原版、The Cure (骰子板)、Contagion (病毒擴散)
這次來介紹瘟疫危機系列的其中三款 ─ 原版、The Cure、Contagion。這是我第一款接觸到的合作遊戲,所有玩家共享勝利或失敗,有時候競爭類型玩多了,也可以嘗試每個人都是隊友的桌遊。
2018年2月17日 星期六
[桌遊/心得] RETREAT 系列 - 波波夫 popov
身為一名喜好桌遊的傢伙,居然沒有想過要發一下自己的心得文(打頭)。因此趁著過年空閒的時間,打算整理出自己目前擁有的桌遊的心得文,也一起推廣桌遊與尋找同好。
這系列的文章以項目式對每一款桌遊做介紹。「介紹」部分會簡述該桌遊的核心玩法與故事背景,並不會介紹詳細的玩法,方便直接了解這款桌遊。「心得」與「喜好程度」部分則是個人對於這款桌遊的感想,我喜歡策略類型的桌遊,因此心得這部分不會是客觀的。「類型」的策略量度是:輕度,局勢簡單,行動不會太繁雜;中度,局勢需要經過推理思考,行動稍微複雜;重度:就像權力遊戲桌遊那樣重吧。
這系列的文章以項目式對每一款桌遊做介紹。「介紹」部分會簡述該桌遊的核心玩法與故事背景,並不會介紹詳細的玩法,方便直接了解這款桌遊。「心得」與「喜好程度」部分則是個人對於這款桌遊的感想,我喜歡策略類型的桌遊,因此心得這部分不會是客觀的。「類型」的策略量度是:輕度,局勢簡單,行動不會太繁雜;中度,局勢需要經過推理思考,行動稍微複雜;重度:就像權力遊戲桌遊那樣重吧。
訂閱:
文章 (Atom)