Django Note

Jacky | Feb 8, 2024 min read

Python environment on Windows

  1. conda create -n dj python=3.10 建立 python 虛擬環境

  2. 使用 conda activate dj

  3. 安裝 Django、PyMySQL

    pip install django
    pip install pymysql
    

Django 基本說明

Django 網絡應用程序通常將處理每個步驟的代碼分組到單獨的文件中:

basic-django

URLs: 雖然可以通過單個功能來處理來自每個 URL 的請求,但是編寫單獨的視圖函數來處理每個資源是更加可維護的。URL 映射器用於根據請求 URL 將 HTTP 請求重定向到相應的視圖。URL 映射器還可以匹配出現在 URL 中的字符串或數字的特定模式,並將其作為數據傳遞給視圖功能。

View: 視圖是一個請求處理函數,它接收 HTTP 請求並返回 HTTP 響應。視圖通過模型訪問滿足請求所需的數據,並將響應的格式委託給模板。

Models: 模型是定義應用程序數據結構的 Python 對象,並提供在數據庫中管理(添加,修改,刪除)和查詢記錄的機制。

Templates: 模板是定義文件(例如 HTML 頁面)的結構或佈局的文本文件,用於表示實際內容的佔位符。一個視圖可以使用 HTML 模板,從數據填充它動態地創建一個 HTML 頁面模型。可以使用模板來定義任何類型的文件的結構;它不一定是 HTML!

確認 django 安裝版本(檢查是否安裝成功)

import django
print(django.VERSION)
print(django.get_version())

django 常用功能

用 CMD 來產生 django 專案
(有手動把產生的 erp_site資料夾 移至 git根目錄)

django-admin startproject [Project_Name]

啟動 django server

python manage.py runserver

新增 App

python manage.py startapp [App_Name]

同步資料庫

makemigrations 根據你對 Model 的修改刪除建立一個新的 migration 檔案
migrate 指令執行時,可以照著這份紀錄更新資料庫

python manage.py makemigrations

如果沒有建出資料表則要輸入對應App名稱

python manage.py makemigrations [App_Name]

migrate 會根據 INSTALLED_APPS 的設定,按照 app 順序建立或更新資料表,
將你在 models.py 裡的更新跟資料庫同步

python manage.py migrate

建立超級使用者帳號

python manage.py createsuperuser

setting.py

LANGUAGE_CODE 設定繁中

TIME_ZONE 設定台北時間

設定 static files 路徑
STATICFILES_DIRS: 開發階段,static files 存放的位置,可以寫入多個路徑
STATIC_ROOT: 正式環境中,透過 collectstatic 指令布署包含 django 內部的靜態檔案,將 STATICFILES_DIRS 設定目錄下檔案,收錄到 STATIC_ROOT 指定目錄

django 模板語法

{% %} 標記起來的部分稱為模板標籤

{{ }} 標記起來部分稱為模板變數

{% load static %}: 要放最前面,才能載入 static 靜態文件

{% static 'bootstrap/css/bootstrap.min.css' %}: 引入 bootstrap 的 css 檔案

{% block title %}{% endblock %}: 預留網站標題的位置,可在繼承此範本的子範本中重新編寫內容

{% block content %}{% endblock content %}: 預留網站內容的位置,可在繼承此範本的子範本中重新編寫內容

{% include 'header.html' %}: 包含 header.html 文件,相當於將 header.html 檔案中的程式碼填入指定位置

{% extends "parent template.html" %}: template 繼承

POST-Form & CSRF (Fixed #7)

[資安系列] 防禦CSRF攻擊的五種方法

<form method="post">
    <!-- 加入 csrf 金鑰給 django server 驗證 -->
    {% csrf_token %}
    ...
</form>

部署

  • 靜態檔案
python manage.py collectstatic
  • 確認部署
python manage.py check --deploy
comments powered by Disqus