iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0

前言、摘要

隨著網站內容逐漸增加,會需要解決的問題也隨之而來,例如上傳了過多的照片導致儲存空間不足,以及使用人數的掌握。因此我們今天的目標有兩個,一個是限制圖片上傳的檔案大小,一個是實作統計網站瀏覽人數的API。

  • [x] 限制圖片上傳大小

  • [x] 提供使用者人數的API

    {
    "today":10,
    "total":1000
    }
    

概念說明

在限制圖片大小的部分,我們會透過validate的功能,這是django中用來限制資料的驗證器,他可以設下限制,並且跳出錯誤訊息提醒使用者。

至於統計使用者人數,會使用到session,這是Django對於每個造訪網站的裝置自動保存的資料,因此我們只要統計session的個數,就能大落掌握目前網的使用情況。

理論到位,實作開始!


本日成果

Untitled

限制圖片上傳大小

我們進入我們進入model.py,在Photo的上方新增下列程式碼:

def validate_file_size(value):
    filesize = value.size
    if filesize > 10240:
        raise ValidationError("The maximum file size that can be uploaded is 10KB")
    else:
        return value

這裡我們先抓出檔案的大小,並限制如果超過10KB,就顯示ValidationError

並將上傳檔案那行改成這樣:


class Photo(models.Model):
    name = models.CharField(max_length=255)
    file = models.ImageField(upload_to='photos', validators=[validate_file_size])
    place = models.ForeignKey(Place, help_text="The place that this photo come from.", on_delete=models.SET_NULL,
                              null=True)

來看看成果

建立使用者人數的API

首先我們建立一個使用人數的Schema

class Visit_num(Schema):
    today: int
    total: int

接著建立一個GET的API

@api.get("num_visits", response=Visit_num)
def visit_number(request):
    num_visits = request.session.get('num_visits', 0)
    request.session['num_visits'] = num_visits + 1
    return Visit_num(today = num_visits, total = num_visits)


心得、結語

明明才放沒幾間店就被通知雲端容量要爆炸了QAQ嚇得筆者趕快幫自己建立一個限制器。

參考資料

  1. Validators | Django documentation | Django (djangoproject.com)
  2. Django Tutorial Part 7: Sessions framework - Learn web development | MDN (mozilla.org)

台南不需要米其林

  1. 專案網址
  2. 專案程式碼
  3. 專案文件與鐵人賽文章
  4. 參賽團隊 台南巷弄美食獵人


上一篇
Day23 改頭換面,實作前端介面
下一篇
Day25 系統監控與警示
系列文
台南不需要米其林30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言