2020-04-19

Flask 靜態檔案資料夾

在專案的資料夾的 app 內建立 static 資料夾,並在建立 app 物件時給第二個參數,指定路徑。

app = Flask(__name__, '/')

static 資料夾就會看成類似 apache 的 document root。

將處理的方法放到不同的 .py 檔

將處理的方法放到不同的 .py 檔

本文的參考專案 https://github.com/shinder/flask-practice

將處理的方法寫到 modules/functions.py 裡

from flask import request # 滙入 request def show_cookies(): return request.cookies

在主要檔案 main.py 滙入:

import modules.functions # 語法:add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options) app.add_url_rule('/show-cookies', 'show-cookies', modules.functions.show_cookies) # app.add_url_rule('/show-cookies', 'show-cookies') # app.view_functions['show-cookies'] = modules.functions.show_cookies
  • 使用 add_url_rule() 可以將處理函式設定給路由。
  • endpoint 用來做處理函式及路由的對應。給 None 時,則使用函式名稱。
  • 這樣的方式可以將處理函式放在不同的檔案,以方便維護。

將 request headers 寫入檔案

將 request headers 寫入檔案

本文的參考專案 https://github.com/shinder/flask-practice

from flask import request # 滙入 request import json @app.route('/save-headers') def save_headers(): dict1 = { 'cookies': {} } for i in request.headers: print(i) # 查看取出的 headers 資料 dict1[i[0]] = i[1] # 查看 cookies for i in request.cookies: dict1['cookies'][i] = request.cookies[i] file1 = open('headers.json', 'w') file1.write(json.dumps(dict1)) # 存成 JSON return dict1
  • dict1 為用來暫存資料的 dict,並設定好結構
  • request.headers 用 for/in 取出,為 tuple
  • request.cookies 為 dict
  • json 為預設套件,dumps 為轉換為 JSON 字串
  • return dict 會自動轉換為 JSON 格式
  • 拜訪 localhost:5000/save-headers 可以看到結果

建立 Flask 專案

建立 Flask 專案

本文的參考專案 https://github.com/shinder/flask-practice

首先如之前的文章 建立專案。

md flask-practice #建立專案資料夾 cd flask-practice #到專案目錄 python3 -m venv venv #安裝虛擬環境 source venv/bin/activate #啟動虛擬環境(mac)

安裝 Flask:

pip install flask

可以使用下列兩個命列中的一個查看安裝的套件:

pip list pip freeze

建立 app 資料夾,用來存放自己撰寫的程式,並在裡面建立 main.py

from flask import Flask # __name__ 用來 application 的相對位置 # 若是直接啟動的程式 __name__ 為 '__main__' # 若是被滙入, __name__ 會是被滙入的名稱 app = Flask(__name__) # decorators 後面定義的 function 會變成 decorators 的參數 # 類似 JavaScript 的 callback function @app.route('/') def index(): return '<h2>哈囉 Flask</h2>'

在專案目錄建立執行的 run.sh,在 mac 記得將檔案屬性設定為 +x 可執行:

# mac export FLASK_APP=app/main.py export FLASK_ENV=development flask run --host=localhost --port=5000 # windows # set FLASK_APP=app/hello.py # set FLASK_ENV=development # flask run

在 terminal 執行 run.sh,並在瀏覽器拜訪 localhost:5000 即可看到我們的第一個頁面。

2020-04-15

VSCode 簡便的 MySQL 管理外掛

VSCode 外掛 MySQL (MySQL management tool)
作者: Jun Han
外掛 ID: formulahendry.vscode-mysql

算是簡單易用的 MySQL 管理工具

2020-04-09

在 VSCode 上編寫 Markdown 文件

若要在 VSCode 上編寫 MD 文件,官方的建議,我自己安裝了:
  • markdownlint
  • Markdown Theme Kit
  • Markdown Shortcuts
另外還安裝了:
  • Markdown All in One
  • Markdown PDF
這樣基本工具都有了,Markdown PDF 可以很方便輸出成 pdf 及 html。

以下是語法的小筆記:


# 大標題

## 次標題

### 細標題

另一種大標 (不建議使用)
===

另一種次標  (不建議使用)
---

條列方式一: - (建議不要用 * 和 +)

- 123
- 456
- 789

條列方式二: *  (不建議使用)

* 123
* 456
* 789

條列方式三: +  (不建議使用)

+ 123
    + 111
        + 333
    + 222
+ 456
+ 789

條列方式四: 使用數字加點  (數字可以不管順序,但不建議)

1. 123
    1. 333
    2. 777
2. 456
3. 789

### 程式碼呢? 前面加 \t 或 4個空白

    const func = a => a*a;
    
    const func2 = ()=>{
        let r = 0;
        for(let i=1; i<=10; i++){
            r+=i;
        }
        return r;
    };

    const func = a => a*a;

``` javascript
const func2 = ()=>{
    let r = 0;
    for(let i=1; i<=10; i++){
        r+=i;
    }
    return r;
};
```

### 行內程式碼

這是個行內的 `console.log(me);` 程式碼

這是個行內的 ``console.log(bill`s);`` 程式碼

---
上下是分隔線  (不建議使用 *** )

***

*斜體*
**粗體**
_斜體_
__粗體__

區塊引言
>123
>456
>78945

### 連結

[This link](http://example.net/) has no title attribute.

### 表格

 | column0 | column1 | aaa
 | ------- | ------- | -----
 | 123 | 456 | 789
 | abc | def | ghi
 | aaa | bbb | ccc



2019-11-08

Angular 環境

官網:https://angular.io/

安裝:
npm i @angular/cli -g

建立專案:
ng new my-proj

或建立專案時產生routes模組:
ng new hello-cli --routing

啟動測試的 web server:
ng serve
ng serve --prod

測試網址:
http://localhost:4200

建立產品版本:
ng build --prod

建立 component:
ng generate component my-component
ng g c my-component










2019-10-20

建立 python 虛擬環境

預先安裝:
1. 已經安裝好 homebrew
2. 並使用 brew 安裝 python3

python3 在 3.5 之後的版本,都會隨附安裝 pip3 和 pyvenv,因此要建立虛擬環境,十分容易。建立專案資料夾後,進入專案目錄,並執行:

python3 -m venv venv

建立之後,Mac 在專案的資料夾內的 terminal 命令列執行下式以啟動虛擬設定:
source venv/bin/activate

離開則是下:
deactivate

2019-03-20

mac 上使用 npm i -g 時

在 mac 上使用 npm i -g 時,常發生「Error: EACCES: permission denied, access...」的錯誤。

npmjs 官方的建議:https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

terminal 輸入:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'

在 .profile 或 .bash_profile 或 .zshrc 加入:
export PATH=~/.npm-global/bin:$PATH

原則上就是把全域的安裝資料夾設定在用戶的家目錄下。

2019-03-03

安裝 Caddy 及 PHP-fpm

在 ubuntu 18.4 上從無到有安裝 Caddy
Caddy 的一個特色就是有申請設定 domain name 時,可以自動啟動 https。

參考這篇 https://www.digitalocean.com/community/tutorials/how-to-host-a-website-with-caddy-on-ubuntu-16-04

1. 安裝 golang 環境,並設定好 $GOPATH
$ sudo apt-get update $ sudo apt-get install golang-go

2. 新增用戶 (optional)
$ sudo adduser [username]
$ sudo adduser [username] sudo

3. 建立 Caddy
go get github.com/mholt/caddy/caddy # 取得 caddy
cd $GOPATH/src/github.com/mholt/caddy # 進入專案資料夾
git tag # 查看標籤,用以查看較新的版本,此時為 v0.11.4
git checkout -b "adding_plugins" "v0.11.4" # 建立分支
go install github.com/mholt/caddy/caddy # 建立
cd $GOPATH/bin # 進入執行檔資料夾
./caddy # 測試執行,預設 port 為 2015

4. 設置 Caddy
sudo cp $GOPATH/bin/caddy /usr/local/bin/ # 將執行檔拷備到執行目錄
sudo chown root:root /usr/local/bin/caddy # 設定所有人
sudo chmod 755 /usr/local/bin/caddy # 設定存取權限
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy # 設定可以使用 1024 以下的 port
sudo mkdir /etc/caddy # 建立 Caddy 所使用的設定資料夾
sudo chown -R root:www-data /etc/caddy # 設定可以給 www-data 讀取
sudo mkdir /etc/ssl/caddy # 建立儲存 ssl 簽證檔的資料夾
sudo chmod 0770 /etc/ssl/caddy
sudo mkdir /var/www # 建立網站根目錄
sudo chown www-data:www-data /var/www # 設定資料夾所有人
sudo touch /etc/caddy/Caddyfile # 建立 Caddy 的設定檔
sudo cp $GOPATH/src/github.com/mholt/caddy/dist/init/linux-systemd/caddy.service /etc/systemd/system/ # 拷備服務啟動檔
sudo chmod 644 /etc/systemd/system/caddy.service
sudo systemctl daemon-reload # 服務重新載入
sudo systemctl status caddy # 查看狀態

5. 防火牆
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow OpenSSH
sudo ufw allow sftp
sudo ufw enable

6. 設定 Caddy
sudo touch /var/www/index.html # 建立測試首頁
sudo nano /var/www/index.html # 編輯一下
sudo nano /etc/caddy/Caddyfile # 編輯設定檔

# 注意:修改成你自己主機的 domain name
shinder.riarock.com {
    root /var/www
    gzip {
        ext .html .htm .php
        level 6
    }
}

sudo systemctl start caddy # 啟動 Caddy
sudo service caddy status # 查看狀態

7. 使用 Caddy 外掛
cd $GOPATH/src/github.com/mholt/caddy
nano caddy/caddymain/run.go # 編輯設定檔
# 以下就不做了,請參考原文

做到這裡基本上已經完成,此時 http 和 https 都可以正常使用。

8. 設定 PHP
sudo apt show php-fpm # 查看 php-fpm 最新版本
sudo apt install -y php7.2-fpm php7.2-cli curl # 安裝
sudo service php7.2-fpm status # 檢查狀態
sudo service php7.2-fpm start # 啟動
sudo nano /etc/caddy/Caddyfile # 編輯 Caddy 設定檔

shinder.riarock.com {
    root /var/www
    gzip {
        ext .html .htm .php
        level 6
    }
    fastcgi / /run/php/php7.2-fpm.sock php {
        ext .php
        split .php
        index index.php
    }
}

放個 phpinfo 檔測試一下,已經可以跑 php 囉。

9. 安裝 php modules
sudo apt-get install php7.2-mbstring
sudo apt-get install php7.2-mysqli
sudo phpenmod mbstring
sudo phpenmod mysqli
sudo phpenmod pdo_mysql

再安裝個 MySQL 差不多東西就齊全了。






FB 留言