shaoeChen

@shaoeChen

喜好分享所學知識,知識應該是無價的自由分享。但是歡迎抖內~

Prime membership

Joined on Jul 7, 2017

ArcFace: Additive Angular Margin Loss for Deep Face Recognition(翻譯),翻譯完成

  • flask flask 2.x :::info 參考來源: 快速上手(簡中文件) Quickstart ::: 在開始這個範例之前請先確認你已經有確實的安裝flask,如果還沒有也不用擔心,只需要簡單的安裝命令:
     Like  Bookmark
  • QuickStart Flask 2.x - 前言 Flask 2.x_基礎_01_建立第一個app 系統開發 Flask Extension(01)_Flask-SQLAlchemy(1) Flask Extension(02)_Flask-SQLAlchemy(2) Flask Extension(03)_Flask-SQLAlchemy(3) Flask Extension(04)_Flask_Login
     Like 1 Bookmark
  • Flask-Login Flask-Login_github Flask-Login,非常老牌的一個擴展應用,對於我們實作登入系統來說非常的實用。在我寫flask 1.x的時候所用的似乎是版本0.3,目前(20230213)最新為0.7,更重要的是,這個套件一直都有持續在更新,用起來當然就會特別放心。 當然,官方文件開頭就說明著這個套件的功能就在於幫我們處理登入、登出、以及我們在網頁切換過程中的一些檢核,大概就是: 把你的使用者id保存在flask session之中 把你的view設置為需求登入(利用裝飾器login_required) 幫你處理remember me這個實用的功能
     Like  Bookmark
  • 說明 :::danger 官方文件: SQLAlchemy Flask-SQLAlchemy ::: 目前來說,只要在企業內要自建一個系統就一定會牽扯到對資料庫的操作,如果每一個操作都寫著一句SQL語法,那維護起來版面著實嚇人,ORM的出現幫忙程式設計師簡化了大量這類基礎SQL語法的操作,也可以減少SQL injection攻擊<sub><a href='https://zh.wikipedia.org/zh-tw/SQL%E8%B3%87%E6%96%99%E9%9A%B1%E7%A2%BC%E6%94%BB%E6%93%8A'>(SQL injection)</a></sub>。 Flask並沒有限定一定要使用SQLAlchemy這類ORM操作的套件,但是SQLAlchemy可以搭配sqlite、Mysql、PostgreSQL、MSSql、Oracle,這已經涵蓋市面上常用的資料庫。而flask-sqlachemy是為了簡化Flask開發人員操作而出現的套件,它適度的包裝了SQLAlchemy。
     Like 6 Bookmark
  • Flask-SQLAlchemy SQLAlchemy Relationship Configuration 關聯式資料庫中最重要的就是關聯的設置,當我們把資料庫當做物件之後應該如何來設置,就是這一邊要說明的部份。比較有趣的是,改版之後的說明文件並沒有看到關聯設置的範例,所以這部份不是看舊版文件就是要看SQLAlchemy,個人是建議看SQLAlchemy的文件就是了。 關聯 關聯式資料庫的關聯方式有很多種,一對一、一對多、多對多,我們就把SQLAlchemy的範例調整成用Flask-SQLAlchemy來做說明: class Parent(db.Model):
     Like  Bookmark
  • Flask-SQLAlchemy SQLAlchemy 我們已經成功利用model生成table,以系統面來看,CRUD是系統對資料庫會有的四種基礎操作,我們就在這邊演練一番。 操作model sqlalchemy在經過改版之後的資料查詢方式已經跟之前不一樣了,相對應的,flask-sqlalchemy也跟著變化,如果你想執行查詢,請使用表達式db.session.execute(db.select(Model).order_by(Model.prop)).scalars()或是db.session.execute(db.select(Model).order_by(Model.prop)).scalar() :::info Notes:
     Like  Bookmark
  • Flask-SQLAlchemy SQLAlchemy SQLAlchemy是一個用於python的資料庫套件,ORM的出現讓我們在操作資料庫上多了很多便利以及安全性。 想像一下你想要更新某一筆資料,也許你的資料庫語法會是: update sometable set col='A' where .... 但如果是利用ORM的話,可能就只是:
     Like  Bookmark
  • 官方文件連結 官方文件簡中文檔連結 在職研讀研究所的期間發現到Flask已經來到2.x的版本,原本所寫的實作記錄是根據0.x版本所開發,也有些許人在詢問是否會有新版本的計劃,其實一直都有,只是需要時間,現在論文也忙完了,就等畢業,看起來有更多的時間回頭再來做一件有意義的事。 其實我在學校跟同學聊天的時候,有幾位同學就會跟我說,原來我看的這個flask就是你寫的,或者是我查scikit-learn、神經網路的資料就是你寫的,事實上我還蠻開心的,算是一點小小的虛榮心吧。至少,我寫的東西還是可以幫助到一些人,而且在google的搜尋排名上都還蠻前面的,但我沒花錢買廣告就是了。 這次預計寫的是一個天堂血盟打寶管理,因為血盟活人多,打到的寶就多,分配起來有點麻煩,而且轉來轉去的,手續費都被吃掉,曾經有想過結合telegram做機器人的對接,如果生命力充足的話,也許可以寫完網頁版本再來寫一個api版本,讓telegram機器人搭配flask試試。 老樣子,如果你有看完我初版的實作記錄那也一定知道,我是一個完全沒有美感的人,也沒學過切版、CSS,也許我是真的應該花點時間學習前端的相關才是真的(之前Vue學一點點,忘光了)。
     Like 2 Bookmark
  • 我們已經成功的登入API Service並取得access token,現在要利用這個access token來取得我們想要的資源。 說明 依RFC6750中所定義,使用Bearer在發出請求的時候有三個地方可以出示你的access token: header body query string 上面三種方法建議使用的是第1種,不管如何是非常不建議使用第3種。
     Like 1 Bookmark
  • :::danger 官方文件: Flask-Mail 參考: Flask Web開發-非同步郵件寄送 :::
     Like 1 Bookmark
  • 開發網頁的時候我們可以利用flask_login來記錄使用者的登入狀況,利用cookie讓使用者在切換網頁的時候可以判斷是否已經正確登入。但是依據REST所述,API是一種沒有狀態的服務,這意味著我們沒有辦法利用flask_login來記錄目前呼叫API的用戶端是否已經是登入狀況,怎麼辦? 說明 現在我們遇到一個問題,在沒有辦法利用cookie的情況下怎麼知道這個使用者是否被授權?總不能每次使用者呼叫一次就輸入一次帳號密碼然然後跟著每次的呼叫帶著走,這有資安風險。因此,作法上,我們會在使用者第一次呼叫的時候讓他們輸入帳號密碼,然後回傳一個token,而且這個token還必需要有著有效期限制,然後在使用者每次呼叫api的時候就帶著這組token來做身份上的認證。這聽起來很熟悉?就是我們在開發網頁的時候所用到的註冊帳號時候所用的手法,忘了?可以回憶一下Flask實作_建置一個使用者註冊頁面_07產生一個用戶認證連結。 實作這種作法之前要先認識一種認證方式,OAuth 2.0,如果想瞭解可以看良葛格在iThome上的說明。舉例來說,第三方登入,可能在某個網站上問你要不要加入會員,要嘛申請一個新的,要嘛就是使用你的facebook或google身份,如果你選擇採用facebook或google身份的時候,就會有一個視窗跟你說,你的blahblahblah將被使用之類的,在你輸入完帳號、密碼之後你可以順利的註冊登入。這時候其實你的facebook或google的帳號密碼並不會被這個網站所取得,你在登入facebook或google的時候所取得的是一組access token,你登入想登入的網站所依賴的就是這個access token。 實作 實作上的部份可以參考阮一峰網站說明
     Like 3 Bookmark
  • # Flask實作_WEB API_02_續談WEB API ###### tags: `python` `flask` `api` 在[Flask實作_WEB API_01_初探WEB API](https://hackmd.io/@shaoeChen/BkL3oACzU)裡面已經初步瞭解要利用flask來建置一個api service有多麼簡單,但作法上好像不是那麼科學,要寫一堆的`@app.route`,然後在view function判斷是`GET`還是`POST`,這樣下去整個程式碼會一堆`@app.route`,有點雜亂,應該有什麼比較直觀的作法才對。 當然使用extension是一個辦法(如[Flask-RESTful](https://flask-restful.readthedocs.io/en/latest/)),不過在使用之前我們還是自己先瞭解一下如何單純的利用flask所提供的工具來完成。 ## 說明 在flask內除了利用`@app.route`的方法來建置路由之外,還可以利用類別來建置,這部份可以從[官方文件](https://flask.pallets
     Like  Bookmark
  • # Flask實作_WEB API_01_初探WEB API ###### tags: `python` `flask` `api` Flask除了可以用以開發網頁之後,其實它還很適合應用建置一個API Service。說到這個就不能不知道Roy Fielding其論文中所提的[REST架構說明](https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm),不過這邊只談實作而不說明過多理論,但會建議多少瞭解一下,最少最少瞭解一下一個完美的REST應該有的六個特性。 ## 說明 當我們希望建置一個滿足REST的API SERVICE時要先知道,REST(Resource Representational State Transfer),資源(Resource)是REST的核心,什麼都是資源,每個資源都是一個URI,每個URI都表示一個唯一的資源。舉例來說,`http://your_web_service/api/v1/blog/001`,這個URI代表版本v1,取得編號001的貼文,而且這個行為是id
     Like 6 Bookmark
  • # Flask實作_ext_21_Flask-XEditable ###### tags: `flask` `flask_ext` `python` `xeditable` :::danger 相關資源: * [X-editable](https://vitalets.github.io/x-editable/) * [X-editable_Demo](https://vitalets.github.io/x-editable/demo-bs3.html) * [X-editable + Bootstrap 4](https://github.com/Talv/x-editable/tree/develop/dist/bootstrap4-editable) ::: **這並不是Flask的擴展,屬前端的工具搭配應用** 有些時候,一些基本資料的編輯我們並不想要再產生一個新的表單來處理,希望可以利用`inplace-edit`的方式來直接編輯,但這必需透過前端的幫助才有辦法做的到,一起看看如何利用現在的簡便工具`X-editable`來完成這個需求。 ## 說明 ``` This
     Like  Bookmark
  • # Flask實作_ext_19_Flask-Moment ###### tags: `flask` `flask_ext` `python` `moment` :::danger 官方文件: * [Flask-Moment](https://github.com/miguelgrinberg/Flask-Moment) * Flask-Moment是由[Miguel Grinberg](https://github.com/miguelgrinberg)所開發,整合了Flask與Moment.js。 * [探查Python時間API|iThome](https://www.ithome.com.tw/voice/106285) * [Moment.js](http://momentjs.com/) ::: ## 說明: 世界時間有[時區](https://pansci.asia/archives/84978),臺灣所在為UTC +8,不同國家的人所在可能有不同的變化,舉例來說,跨年的時候都會發現,我們還在倒數的時候日本已經放完煙火在睡覺。因此相同時間點上,臺灣的2019010
     Like  Bookmark
  • # Flask實作_ext_18_Flask-SQLAlchemy_Query ###### tags: `flask` `flask_ext` `python` `sqlalchemy` SQLAlchemy的query類有著很多的method,了解它對我們利用orm操作資料庫有著非常大的幫助,這邊也單純的記錄著個人可以理解的method說明。 註:以專案中的資料表為例 註:Blog_Main是blog的主表、Blog_Post是blog的明細表 ## 作業說明 ### add_column ### add_columns ### add_entity ### [all](http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.all) * 回傳所有查詢結果 ```python= >>> post = Blog_Post.query.all() >>> len(post) 17 >>> type(post) <class 'list'> ``` ### as
     Like  Bookmark
  • # Flask實作_ext_17_Flask_babel_多語系 ###### tags: `flask` `flask_ext` `python` `babel` 在[Flask實作_ext_16_Flask_babel](https://hackmd.io/s/Sy0bRGaWX)我們介紹了應用在不同語系時的`datetime`格式化,這篇要介紹的是應用於多語系的文字翻譯。 一間跨國企業的官方網站一定會有著英文、繁體中文、簡體中文....等多國語言,因為你的客戶來自國際,所以你需要讓他們看的懂你的產品,比較笨一點的方法當然可以一個語系一個頁面,但是當你的版有一個小變動的時候你就需要變更多個頁面了,這時候就可以利用`babel`來幫我們處理這部份的問題了。 ## 說明 透過`flask_babel`做多語系之流程大致如下: 1. 新增一個配置文件 * `babel.cfg` 2. 執行指令 * `pybabel extract -F babel.cfg -o messages.pot .` 3. 建立語系翻譯 * `pybabel init -i messa
     Like 1 Bookmark
  • # Flask實作_ext_16_Flask_babel_日期時間 ###### tags: `flask` `flask_ext` `python` `babel` :::danger 官方文件: * [flask_babel](https://pythonhosted.org/Flask-Babel/) * [flask_babel_簡中文件](http://www.pythondoc.com/flask-babel/) * [babel](http://babel.pocoo.org/en/latest/) ::: `flask_babel`包裝了`babel`讓Flask用戶可以便捷的使用它,不管如何,官方文件都很建議要閱讀過一次,至少知道這個package的用途,當然,其它還有如`gettext`、`pytz`、`speaklater`也有其相關性,在了解如何應用之後也記得往下深入理解。 ## 安裝 ```shell pip install Flask-Babel ``` 安裝的時候會將相依套件`babel`一併安裝,不需要各別安裝。 ## 說明 直觀來看,`babel`的
     Like 1 Bookmark
  • # Flask實作_ext_15_Flask_Uploads搭配Flask-wtf ###### tags: `flask` `flask_ext` `python` `uploads` `wtform` :::danger 前置閱讀: * [Flask實作_ext_14_Flask_Uploads](https://hackmd.io/s/BJPLnPHJX) ::: 在[Flask實作_ext_14_Flask_Uploads](https://hackmd.io/s/BJPLnPHJX)中提到,`flask-uploads`可以搭配`flask-wtf`一起使用,讓我們一起來看怎麼結合應用。 ## 範例 承接[Flask實作_ext_14_Flask_Uploads](https://hackmd.io/s/BJPLnPHJX)範例,我們已經有完成一個簡單的檔案上傳的板,但實作上我們會使用`flask-wtf`來快速開發表單,這時候可以利用`flask-wtf`的`FileField`、`FileRequired`、`FileAllowed`來搭配`flask-uploads`作
     Like 1 Bookmark
  • # Flask實作_ext_14_Flask_Uploads ###### tags: `flask` `flask_ext` `python` `uploads` :::danger 官方文件: * [Flask-wtf](https://flask-wtf.readthedocs.io/en/stable/form.html?highlight=Flask-Uploads#validation) * [Flask_Uploads](https://pythonhosted.org/Flask-Uploads/) ::: `Flask-Uploads`應用於檔案上傳,除了可以直接結合`Flask-wtf`使用之外,還可以限制上傳檔案格式,相信這對初級的檔案上傳應用已經足夠了,使用時要注意到Html文件的設置`enctype=multipart/form-data`以及`<input type=file name=photo>`,透過範例來瞭解吧。 ## 安裝 ```shell pip install flask-uploads ``` ## 範例 ### 參數說明 `Flask_Up
     Like  Bookmark