寫個網站吧! --Flask+Vue.js+MySQL+Docker(3)--後端

前情回顧:寫個網站吧! --Flask+Vue.js+MySQL+Docker(1)--簡介

總結:後端好像也沒啥要講的

先說說使用的技術棧:

Flask,FLask-Restful,Flask-SQLalchemy, Flask-Cors, Python-dotenv, Pymysql

目錄

BUG

架構

App.py


BUG

1. 第一個就是虛擬環境的問題。

因爲我是使用的Pycharm, 虛擬環境之類的配置非常簡單, 但是封裝docker的時候我想,都是用docker了還有必要使用虛擬環境麼,Pipenv自身也是有缺陷的,反而是使用pip+requirements的方法更直接點:

pip freeze >requirements.txt
pip install -r requirements.txt

有同學有質疑的話也可以交流討論噢。

2. 接下來是服務器的問題,我們使用指令flask run運行時,因爲使用了python-dotenv擴展,我們可以直接讀取.env或者.flaskenv中的配置,但是生產環境中我這次使用的是gunicorn,所以在運行時無法讀取.env中的配置,最後直接寫在了文件中,由於我對docker的瞭解還不是很深,所以我不知道docker的安全性對這個包容性怎麼樣。

以後會尋求更好解決的方法。

3. 最後是werkzeug的0.15.5版本中出現的一個BUG,問題如下:

c:\repos\flask-examples\.venv\scripts\python.exe: Error while finding module specification 

解決方法也很簡單,降低一下版本就好。 

werkzeug = "==0.15.4"

未來werkzeug會修復這個問題,所以這個BUG是暫時的,不用太多在意。

4. 關於pymysql,之前一個項目使用會報錯,需要下載一個C的包,這次因爲我部署在一個簡單的docker容器,所以這個包不能在基於alpine的容器裏運行。所以這次我把這個包直接刪掉了,結果是並沒有發生什麼錯誤。

可能是BUG修復了?

總之還是使用:

SQLALCHEMY_DATABASE_URI = 'mysql+mysqlclient://。。。'

架構

直接上圖:

由於是非常簡單的CRUD業務,所以也沒有過多使用一些架構,雖然flask推薦使用包(init)我也只是簡單建了個文件夾就開始使用。

主要有一個簡單的模型,其他的文件都放在了app.py中。

這樣做的好處就是對於小項目寫起來簡單,嗯,就這一個好處。

所以大家還是不要學我了。。。

App.py

因爲使用了擴展來解決跨域問題,所以要記得用CORS(app)。

app = Flask(__name__)
api = Api(app)
CORS(app, supports_credentials=True)

關於表單驗證,這裏也放一個簡單的實例:

resource_fields = {
        'id': fields.Integer,
        'date': fields.String,
        'name': fields.String,
        'project': fields.String
    }

    @marshal_with(resource_fields)
    def get(self):
        project_data = Projects.query.all()
        return project_data

後端因爲這次設計的非常簡單,確實也沒有使用到太多的東西,包括認證和一些flask-restful的高級功能也沒有做(因爲實在是懶)。

未來的事,更多的還是在Flask製作API上多學習一下,有條件開始學習一下grapgql。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章