在資安領域中,實戰經驗是最好的學習方法。
「你可能此時此刻迷惘自己還沒有進步,但你可先開始行動。」
▋ 關於魚的故事
以前在社團的時候,學長跟我分享了「給他魚吃,不如教他釣魚!」
來自於《老子》「授人以魚不如授人以漁」,
雖然後來看到一系列討論魚跟魚桿的問題[1](不過那是後話了)
Ref: [1] 翟本喬:給魚?給釣竿?都錯了!
https://www.gvm.com.tw/article/53305
▋ 如何在資訊/資安進步
「實作最快。」
在我自己學習路上,最有印象的經驗:
大概大學時用一個月從需求到開發一個網站出來。
壓力很大,但學得非常快。
但建議大家做好自己的時間管理和壓力管理。
▋ 網路該怎麼學
一直以來我對網路也不是非常了解,
沒有自己的機房,對路由器也沒有太大的喜好。
但突然看到學弟寫的這篇鐵人賽[2],也印證了「實作最快」的這件事。
[2] 誒,想不到有一天搞懂網路是因為宿舍學長逼我的QQ!30天的宿舍網路架設
https://ithelp.ithome.com.tw/users/20132118/ironman/6872
如果你想在宿舍搞網路可以參考這系列的鐵人賽,但如果你想看學弟吐槽學長也是可以看這系列的。
資安的學習不應只停留在理論,更要透過實戰來學習。
基礎的網路概念與工具使用
簡單的密碼破解
基礎的 Web 安全
社交工程基礎
系統設定與安全習慣
新增活動
查看活動
from django.db import models
from django.contrib.auth.models import User
class Event(models.Model):
title = models.CharField(max_length=200)
date_time = models.DateTimeField()
location = models.CharField(max_length=200)
description = models.TextField()
event_type = models.CharField(max_length=50)
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
from django.urls import path
from . import views
urlpatterns = [
path('events/', views.event_list, name='event_list'),
path('events/<int:event_id>/', views.event_detail, name='event_detail'),
path('upcoming/', views.upcoming_events, name='upcoming_events'),
]
3.views.py
from django.shortcuts import render, redirect
from .models import Event
from datetime import datetime
def event_list(request):
events = Event.objects.all()
return render(request, 'event_list.html', {'events': events})
def event_detail(request, event_id):
event = Event.objects.get(pk=event_id)
return render(request, 'event_detail.html', {'event': event})
def upcoming_events(request):
now = datetime.now()
events = Event.objects.filter(date_time__gt=now).order_by('date_time')
return render(request, 'upcoming_event_list.html', {'events': events})
模板(templates)
新增 base.html
(之前已經有範例)
新增 event_list.html
和 event_detail.html
活動列表
在 templates
目錄下,新增 base.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>社團活動日曆</title>
</head>
<body>
<header>
<h1>社團活動日曆</h1>
</header>
<main>
{% block content %}
{% endblock %}
</main>
</body>
</html>
新增 event_list.html
:
{% extends 'base.html' %}
{% block content %}
<h2>即將到來的活動</h2>
<ul>
{% for event in events %}
<li>
<a href="{% url 'event_detail' event.id %}">{{ event.title }} - {{ event.date_time|date:"Y-m-d H:i" }}</a>
</li>
{% endfor %}
</ul>
{% endblock %}
新增 event_detail.html
:
{% extends 'base.html' %}
{% block content %}
<h2>{{ event.title }}</h2>
<p>日期時間: {{ event.date_time|date:"Y-m-d H:i" }}</p>
<p>地點: {{ event.location }}</p>
<p>說明: {{ event.description }}</p>
<p>活動類型: {{ event.event_type }}</p>
<p>由 {{ event.created_by.username }} 建立</p>
{% endblock %}
新增 upcoming_event_list.html
{% extends 'base.html' %}
{% block content %}
<h2>即將到來的活動</h2>
<ul>
{% for event in events %}
<li>
<a href="{% url 'event_detail' event.id %}">{{ event.title }} - {{ event.date_time|date:"Y-m-d H:i" }}</a>
</li>
{% endfor %}
</ul>
{% endblock %}
APP 加入到 INSTALLED_APPS
裡:
INSTALLED_APPS = [
...
'你的 APP 名稱',
...
]
執行變更到資料庫的指令
python manage.py makemigrations
python manage.py migrate