# 專題專案建置說明

## 開發環境建置
### 安裝Python
1. 至[Python官網](https://www.python.org/downloads/)下載Python的安裝檔(本教學以3.12.2的版本為例)

2. 開啟下載後的安裝檔後先選擇加入環境變數後再點及安裝


:::warning
:warning: 如果沒有加到環境變數怎麼辦?
:::
(1) 在設定中找到進階系統設定

(2) 選擇環境變數

(3) 找到Path這個選項點兩下進去

(4) 將前面安Python的路徑加入環境變數按下確定就完成了

### 安裝VScode
1. 至[VSCode官網](https://code.visualstudio.com/)下載安裝檔

2. 開啟安裝檔選擇我同意並繼續下一步

3. 選擇下一步

4. 選擇下一步

5. 按照圖中選項勾選後進行下一步

6. 點擊安裝

7. 這樣就安裝完成啦

### 建立虛擬環境
1. 在桌面新增一個資料夾venv

2. 開啟資料夾後在上面的路徑欄輸入cmd後按下enter開啟命令提示字元

3. 輸入下面指令建立虛擬環境
```bash=
python -m venv <環境名稱>
```

4. 輸入指定切換路徑到activate的路徑
```bash=
cd <環境名稱>/Script
```

5. 輸入指令切換虛擬環境
```bash=
activate.bat
```

6. 安裝套件的指令(需先切換到requirements.txt的路徑位置)
```bash=
pip install -r requirements.txt
```
7. 離開虛擬環境指令
```bash=
deactivate
```
### Django指令說明
1. 建立專案
```shell!
django-admin startproject <專案名稱>
```
2. 建立APP
```shell
python manage.py startapp <APP名稱>
```
3. 專案設定
```python=
# 將預設的帳號APP設定成自己建立的物件
AUTH_USER_MODEL = 'accounts.Student'
# 新增建立好的APP
INSTALLED_APPS = [
'whitenoise.runserver_nostatic', # 新增whitenoise讀取靜態檔案
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'你的APP名稱',
]
# 新增whitenoise
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware', # 新增whitenoise
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# 修改Template路徑
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'], # 加入template路徑
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
# database修改成使用postgresql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql', #PostgreSQL
'NAME': os.getenv('DATABASE_NAME'), #資料庫名稱
'USER': os.getenv('DATABASE_USER'), #資料庫帳號
'PASSWORD': os.getenv('DATABASE_PASSWORD'), #資料庫密碼
'HOST': os.getenv('DATABASE_HOST'), #Server(伺服器)位址
}
}
# 設定時區
TIME_ZONE = 'Asia/Taipei'
# 設定static路徑
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / "static"]
STATIC_ROOT = BASE_DIR / "staticfiles" # 這是 collectstatic 將收集靜態文件的目錄
```
4. 建立資料庫建構檔
```shell
python manage.py makemigrations accounts
python manage.py makemigrations posts
```
5. 建立資料庫
```shell
python manage.py migrate
```
6. 建立超級使用者
```shell
python manage.py createsuperuser
```
7. 蒐集靜態檔案
```shell
python manage.py collectstatic
```
### 安裝Postgresql
1. 至[Postgresql官網](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads)下載安裝檔

2. 啟動安裝檔後,點擊下一步

3. 輸入使用者的資料庫密碼(要記得,這會是後續連線的環境變數)

4. 確認是否有佔port(基本上沒設定過資料庫不會佔port)

5. 點擊finish

6. 選擇最新版本

7. 如果已經安裝了,點擊cancel,沒有安裝則需勾選並點擊next安裝


8. 開啟pgadmin,點擊左邊的server會需要你登入,密碼就是一開始安裝時輸入的密碼


9. 右鍵點及database後選擇create database,並輸入database名稱,資料庫就建立完成了


## git流程
1. 分支簡介
為什麼需要使用git?
使用git可以有效率的管理不同工程師修改的程式碼,也比較方便管理整個專案
每個工程師在自己本機端修改程式碼之後再推送到遠端,管理程式碼的就可以確認你的程式碼正不正確再併入,這樣就不會有萬一錯誤了就無法還原到舊版本的問題

2. sourcetree安裝
1. 至[sourcetree官網](https://www.sourcetreeapp.com/)下載sourcetree安裝檔

2. 啟動安裝檔,選擇skip

3. 如果有安裝過git會自己找到git的位置,並選擇Next

4. 安裝完tool選擇Next

5. 輸入github的email後選擇Next

6. 他會跳出一個視窗問你需不需要建立ssh-key做連線,可以選擇no
7. 跳出應用程式就是安裝完成了

3. clone專案至本機


4. 建立新的branch

5. 選取改動的檔案進行commit

6. 選取要push的分支

7. 到遠端建立pull request


8. force push


## 設定環境變數
1. 點擊新增檔案,名稱為`.env`

2. 新增以下環境變數
```tex=
SECRET_KEY = <django專案的secret key,可以自己先建一個複製過來>
DATABASE_NAME = <你設定的database名稱>
DATABASE_UAER = <預設是postgres,要看你有沒有修改>
DATABASE_HOST = 'localhost'
DATABASE_PASSWORD = <你安裝postgresql設定的password>
DATABASE_PORT = <預設是5432,要看你有沒有修改>
CSRF_TRUSTED_ORIGINS_URL = <你的對外網址的URL,如果沒有先隨便填一個即可>
OPENAI_API_KEY = <OPENAI_API_KEY>
```
## 設定python debugger




## Azure雲端部屬
> Reference:[開始使用 Git 管理專案](https://wellstsai.com/post/git-tutorial-init/)