# deta space 的 Flask 實作,環境設置 {%hackmd theme-dark %} ###### tags: Deta Space # 注意 :::danger 在 [正篇開始](#正篇開始) 這裡章節 [建立 mirco](#建立-mirco) 的操作介面資訊已經過時,官方改動成拖曳劃格線建立 card,或是底下的搜尋框來操作 ::: # **前言** 之前有在 Heroku 嘗試上線,不過現在免費方案被砍掉了,想說算了找找看其他替代方案, 就在電腦面前滑著滑著,看到 deta cloud (一開始看見的),~~再加上看到免費免信用卡就來試試了~~。 不過現在好像有大更新,就是 deta space 還有公告: deta cloud 運行到 2023 年 5 月 1 日,就關閉刪除資料,且不能訪問 > 公告與遷移資料的資訊: [ https://deta.space/migration/other/FAQs ](https://deta.space/migration/other/FAQs) > deta 的隱私權政策 https://deta.space/privacy > deta space 的相關條款 https://deta.space/terms **最好看一下,以防萬一** 若有我未寫到的部分,請去看文檔 > 文檔說明,~~網址: [ https://deta.space/docs/en/introduction/start ](https://deta.space/docs/en/introduction/start)~~ > **文檔網址更新**: [https://deta.space/docs/en](https://deta.space/docs/en) ~~原文文檔的部分說明。抱歉,小弟我的英文有待加強,請見諒~~ ## 註冊 & 登入 Deta Space 到下方的 Deta Space 官網註冊帳號 > deta space 網址: [ https://deta.space/ ](https://deta.space/) # 建立一個 micro ## **前言** ~~容我在廢話一下,請多多包涵~~ 這個 micro 是什麼神奇東東,請聽我娓娓道來。 在 Deta Space 裡面有幾個項目可以試試看,分別有 1. micro 2. Base 3. Drive 第 1 個項目,也是我本文第一個要建立的,這是可以跑網站後端的項目。可以把自已寫的後端框架, 放到這裡運行,不過這邊要注意一下,本文使用的 Python 微框架 (micro framework) 來運行, Flask, FastAPI 或是其他類似性質的框架,之前的 deta cloud (Space 還沒有出來的時候),是沒有支援 Django 這類比較大的框架運行,這邊是使用 Python 跑後端要注意的事項 不過在運行上,不只有 Python 這個語言 1. Python 2. NodeJs 3. GO 4. Rust 5. ...... 還有其他的,請參照上方附上文檔 ## 正篇開始 ### 常用指令 :::info 1. ```space login``` 登入帳號。 會要求輸入 access token。 如果無法推送,那記得登入 2. ```space push``` 推送資料。 會根據 `.space` 資料夾的資訊,來推送上去 3. ```space open``` 打開 Builder (導向到目前的管理 UI) 4. ```space version``` 檢查 `space` 指令的版本 5. ```space link``` 連結 Builder 上的一個項目 說明一下第 5 點的指令 ```space link```: 執行該指令後,會要求輸入 [Project ID](#後續網站更新) 來連結項目 假設程式碼使用 git 上傳到 github 或其他平台後, 然後要在別台電腦 ```git clone <repo>``` 抓下來編輯,但是要推送上去時,沒有 `.space` 資料夾的話, 會被視為尚未初始化,不能推送上去 **則要用 ```space link``` 從要推送上去的項目,複製一份 `.space` 資料夾下來** ::: ### 建立 mirco :::warning 帳號已經註冊好,也登入的話,那先進入 Builder 這個選項 舊介面: ![](https://i.imgur.com/gRGHWyt.jpg) **新介面**:拖曳格線 ![image](https://hackmd.io/_uploads/SJyKRastp.png) 建立 card:也有指令框可操作 ![image](https://hackmd.io/_uploads/rJypCpsY6.png) 指令框:要點選 deta 的 logo,就是那個底下的粉色圓形按鈕 ![image](https://hackmd.io/_uploads/SkelkAjt6.png) ::: :::warning 接下來點選 Start Building (這邊我已經有嘗試過幾次) 舊介面: ![](https://i.imgur.com/MnmApYy.jpg) **新介面**:要從底下的操作區去開啟指令框 (底下的粉色圓形按鈕) ![image](https://hackmd.io/_uploads/B1bXx0iFp.png) ::: <hr/> ### **三個步驟建置** :::info 1. 下載 deta CLI,這個命令工具之後會一直用到 **按照自己的作業系統,複製到"終端機"** **進入下一步之前,在終端機輸入 `space` 這個命令,檢查有沒有安裝好,確保之後的步驟** ![](https://i.imgur.com/6OSF9NC.jpg) ::: :::warning 再來用 `space login` 做登入動作,**它會要求輸入 access token** 取得方式: 回到網頁這邊,在頁面底下 ![](https://i.imgur.com/EUaPpl5.jpg) **這邊的命令搜尋框找到 settings 選項** ![](https://i.imgur.com/yRQ4chb.jpg) **點選 Generate Token,會產生一個登入用的 Token, 記得複製起來存放好, Token 只會能在產生時複製,關閉後就看不到了 ~~啪! 沒了!~~** ![](https://i.imgur.com/1cpMWSr.jpg) ::: :::info 2. 建立項目,一樣複製命令,**這裡要在自己的專案資料夾底下** ![](https://i.imgur.com/A0T7Chj.jpg) ::: :::warning 3. 推送,**不過在這裡要先暫停一下** **先到自己的程式編輯器,這裡有 2 點要注意** 1. 執行の目標檔案,檔名為 main.py (For Python 的限制) 主要會看有沒有叫做 main.py 的檔案,它會**用這個檔案做為執行點,沒有之一** 2. 設定檔: Spacefile 不管是項目名稱、執行的檔案路徑、路由公私設置...,還有其他的設定,大多在這個檔案操作。 這邊至少要有 3 個設定,**一定要設置,不然無法 push 上去** * 還有需要注意的是,Spacefile 檔案路徑,**一定要在專案資料夾的第一層,不能在"專案資料夾底下的其他資料夾"** :::info * 檔案路徑 專案資料夾 | |-- src | | | |-- main.py | | | |-- other files | |-- requirements.txt | |-- ...... | | |-- .gitignore | |-- Spacefile ::: :::info **SpaceFile 其基本設定如下** ![](https://i.imgur.com/1DXyl8E.jpg) 1. `v: 0 (required)` **原文如下: The first key/value pair in your Spacefile should be the Spacefile version. The latest version at the moment is 0.** 翻譯 (Powered by Google translator): Spacefile 中的第一個鍵/值對應該是 Spacefile 版本。 目前最新版本為 0。 2. `micros: (required)` 大多的設定都在這個項目設置 2-1. `name: flask_app (required)` 原文如下 (翻譯部分: Powered by 劍橋英文翻譯) 1. can only contain alphanumeric characters and hyphen 只能包含字母數位字元和連字元 2. start with alphanumeric characters 以字母數位字元開頭 2-2. `src: /<your file path> (required)` => 執行檔路徑 2-3. `engine: Runtime version (required)` => 使用的語言版本 2-4. `public_routes: (optional)` => 公開路由,預設為不公開。 **若沒有設置,則會導向登入頁面 (deta space 登入介面)** ::: **以上的 Spacefile 設置,若已經打好了,就可以推送惹 !** 一樣複製命令到終端機 ![](https://i.imgur.com/Hp0THrL.jpg) --- # 操作配置 ## 檔案路徑配置 * 只有 Spacefile 與一同生成的資料的位置不變動,其他的,Spacefile 的 `src:` 項目抓得到原始碼即可。 ~~就是其他的隨你高興,放在母湯資料夾底下可以~~ ``` 專案資料夾 | |-- src | | | |-- template | | | | | |-- base.html | | |-- ...... | | | |-- static | | | | | |-- css | | | |-- ...... | | | | | |-- js | | |-- ...... | | | |-- routes.py | | | |-- main.py | | | |-- requirements.txt | |-- .space (folder) | |-- .gitignore | |-- Spacefile ## 試跑用的程式碼 1. modules.py ```python from flask import Flask app = Flask(__name__) ``` 2. routes.py ```python from modules import app @app.route('/') def home(): return 'hello flask' ``` 3. main.py (required) ```python from routes import app if __name__ == "__main__": app.run() ``` ## 補充說明 :::danger **注意!! 這還蠻重要的** 在推送 python 檔案上去時,**不只有 Spacefile 這個檔案,還有 requirements.txt 這個模組清單** **在編輯 requirements.txt 時,最好的話只放入相關模組** 例如上方的 modules.py 只用到 flask,**那在 requirements.txt 放入 ```flask==第幾版本 (版本號可有可無)```,不然放其他無相關模組,有可能會報錯。** **這是本人從 deta cloud 服務,使用的時候所遇到的情況** ::: ## 後續網站更新 **指令基本上都用 `space push` 推送指令做更新,如果執行 `space push` 不能執行的話** **那先用 `space login` 登入,再執行 push 指令即可** 如果在別台電腦編寫,但沒有 **```.space``` 資料夾** 的資訊進行推送,可以用 **```space link``` 連結 Builder 上的一個項目** :::info Project ID 的獲取方式如下 1. 到 Builder 裡面選擇要操作的項目 ![](https://i.imgur.com/MnmApYy.jpg) 2. 在下方的搜尋框,有一個項目就寫著 **Copy Project ID** ![](https://hackmd.io/_uploads/rJ8aDeRI3.png) ::: # 結語 (Base, Drive 待續) 後面再摸摸看,嘗試不同玩法。 ~~看是要放一些母湯的東東。可以的話,推薦幾個本本或番號,填滿那飢渴的作者~~ ?? (拿起電話): 「是警察叔叔嗎? 這裡有一個怪叔叔。」 作者: 「等等! 請讓我解釋一下~ 」 (被警察帶去偵訊) deta API 的 base, Drive 待續 先簡略介紹一下 1. Base: 線上的資料庫管理工具 2. Drive: 存檔案用的 API 這兩個都在 deta space 上面建立