Flask自學(xué)分享

寫在前面

最近兩個月仙蚜,學(xué)會了微信小程序厂汗,學(xué)會了Flask娶桦,接著又學(xué)會了VUE前端開發(fā),學(xué)會了docker氮双,gunicorn戴差,nginx部署暖释,獨(dú)立Web開發(fā)的能力終于GET了。

內(nèi)心喜悅纹磺,寫文總結(jié)橄杨,記錄分享式矫。本文主要針對入門學(xué)習(xí)役耕,希望對大家有所幫助瞬痘。

作為程序員框全,Web開發(fā)確實(shí)很有必要去學(xué)習(xí)。因?yàn)檎麄€互聯(lián)網(wǎng)的核心技術(shù)就是Web開發(fā)技術(shù)克婶。學(xué)會了Web開發(fā)情萤,對于整個互聯(lián)網(wǎng)的認(rèn)知筋岛,對于整個編程世界的認(rèn)知晒哄,都會有非常大的提升。

Flask框架

Python三大主流Web框架:Django孝赫,F(xiàn)lask青柄,Tornado致开。

對于本人萎馅,Django入門艱難糜芳,Tornado沒有接觸耍目,F(xiàn)lask一見鐘情徐绑。

Flask傲茄,拉起一個網(wǎng)站盘榨,簡直太簡單了草巡,簡單即是美,怎不惹人愛查乒。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)

Flask玛迄,拉起一個API服務(wù)后端蓖议,亦是如此簡單勒虾,如此優(yōu)雅修然。

from flask import Flask
from flask import jsonify
app = Flask(__name__)

@app.route('/api/user',methods=['GET'])
def get_user():
    return jsonify(code=200, msg="用戶查詢成功!",username = '張三',userphone = '18288889999')


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)

Flask做API服務(wù)后端的入門學(xué)習(xí)

做API服務(wù)后端,主要是三塊內(nèi)容:路由掏婶,數(shù)據(jù)庫雄妥,身份驗(yàn)證老厌。(不需要 渲染 這塊東西了)

from flask import Flask
from flask import jsonify
from flask import request
from Tools.dbmanager import DBManager
from Tools.decoratormanager import session_jwt_verification

app = Flask(__name__)


@app.route("/bumen",methods=['GET'])
@session_jwt_verification
def goto_bumen_search():
    ###############查詢部門###############
    sqlstring0 = "SELECT id,bumenname,bumentips FROM jr_bumen"
    data0 = DBManager().executeQueryall(sqlstring0)
    if  data0 == False:
        return_data = dict()
        return_data['code'] = 5000
        return_data['msg'] = "數(shù)據(jù)庫連接異常枝秤!"
        return jsonify(return_data)
    if  data0 == None:
        return_data = dict()
        return_data['code'] = 5001
        return_data['msg'] = "沒有部門數(shù)據(jù)淀弹!"
        return jsonify(return_data)
    if  data0 != None:
        return_data = dict()
        return_data['code'] = 200
        return_data['msg'] = "查詢成功薇溃!"
        return_data['bumendatas'] = data0
        return jsonify(return_data)



@app.route("/bumen",methods=['POST'])
@session_jwt_verification
def goto_bumen_add():
    data = request.get_json()
    bumen_name = data['bumenName']
    bumen_tips = data['bumenTips']
    ###############新增部門###############
    sqlstring0 = f"INSERT INTO jr_bumen (bumenname,bumentips) VALUES ('{bumen_name}','{bumen_tips}')"
    data0 = DBManager().executeQueryID(sqlstring0)
    if  data0 == False:
        return_data = dict()
        return_data['code'] = 5000
        return_data['msg'] = "數(shù)據(jù)庫連接異常沐序!"
        return jsonify(return_data)
    if  data0 != None:
        return_data = dict()
        return_data['code'] = 200
        return_data['msg'] = "部門添加成功策幼!"
        return_data['bumenid'] = data0
        return jsonify(return_data)


@app.route("/bumen",methods=['PUT'])
@session_jwt_verification
def goto_bumen_alter():
    data = request.get_json()
    bumen_id = data['bumenId']
    bumen_name = data['bumenName']
    bumen_tips = data['bumenTips']
    ###############更新部門###############
    sqlstring0 = f"UPDATE jr_bumen SET bumenname='{bumen_name}',bumentips='{bumen_tips}' WHERE id= {bumen_id}"
    data0 = DBManager().executeQueryNO(sqlstring0)
    if  data0 == False:
        return_data = dict()
        return_data['code'] = 5000
        return_data['msg'] = "數(shù)據(jù)庫連接異常垄惧!"
        return jsonify(return_data)
    if  data0 == True:
        return_data = dict()
        return_data['code'] = 200
        return_data['msg'] = "部門修改成功到逊!"
        return jsonify(return_data)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)

1.關(guān)于數(shù)據(jù)庫

上例中的dbmanager 是本人自己寫的數(shù)據(jù)庫處理類,之前做過分享件缸。
文章鏈接:《python操作mysql數(shù)據(jù)庫的精美實(shí)用模塊》

如果要用ORM他炊,那就上Flask-SQLAlchemy庫痊末。

(ORM凿叠,相關(guān)知識嚼吞,自行百度)

2.關(guān)于身份驗(yàn)證

上例中的dsession_jwt_verification裝飾器舱禽,是自定義的誊稚,用了第三方庫:pyjwt片吊。
(JWT俏脊,相關(guān)知識爷贫,自行百度)

from flask import request
from flask import jsonify
from flask import g
from functools import wraps

import jwt
############################################################
# 裝飾器管理模塊
############################################################
def session_jwt_verification(view_func):
    @wraps(view_func)  # wraps函數(shù)的作用是將wrapper內(nèi)層函數(shù)的屬性設(shè)置為被裝飾函數(shù)view_func的屬性
    def verify_view_func(*args, **kwargs):
        try:
            session_jwt = request.headers['session-jwt']
            payload = jwt.decode(session_jwt, "my_jwt_secret", algorithms=['HS256'])
            session_data = payload.get('userid')
            g.userid = session_data
        except Exception:
            return jsonify(code=5901, msg="身份認(rèn)證失斅选腾务!")
        ###################################################################################
        return view_func(*args, **kwargs)
    ###################################################################################
    return verify_view_func
3.關(guān)于路由

實(shí)際項(xiàng)目中岩瘦,路由這里有個問題启昧,當(dāng)我們的項(xiàng)目越來越大,API越來越多時握爷,不可能把所有路由都寫在一個主文件里面吧新啼,這時就需要想辦法拆分路由了师抄。

什么辦法呢叨吮?就是藍(lán)圖BluePrint茶鉴。對涵叮,藍(lán)圖的作用就是拆分路由伞插。對于藍(lán)圖媚污,有這個理解就夠了耗美。

再配合工廠函數(shù)(對app進(jìn)行統(tǒng)一加工處理的函數(shù)),最后的主文件變成了這樣:

from flask import Flask

from Apis.login import login_api
from Apis.userdata import userdata_api

from Tools.config import config_map
####################################################################################################
# 工廠函數(shù)帝洪,對app進(jìn)行加工處理
def create_app(config_name):
    app =Flask(__name__)
    app.config.from_object(config_map[config_name])

    ###注冊API藍(lán)圖影所,并指定其對應(yīng)的前綴(url_prefix)#######################
    app.register_blueprint(login_api, url_prefix="/api/login")
    app.register_blueprint(userdata_api, url_prefix="/api/userdata")

    ###初始化app的ORM,根據(jù)實(shí)際需要開啟###################################
    # from app.models import db
    # db.init_app(app)

    ###初始化app的跨域揽涮,根據(jù)實(shí)際需要開啟###################################
    # from flask_cors import CORS
    # cors = CORS()
    # cors.init_app(app)

    ###初始化app的郵件绞吁,根據(jù)實(shí)際需要開啟###################################
    # from flask_mail import Mail
    # mail = Mail()
    # mail.init_app(app)

    return app



app = create_app(config_name='development')
#####首頁視圖函數(shù)颜说,留著方便測試#############################################################
@app.route('/')
def index():
    return "Jrsoft Api Server"

##################################################################################
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

整個項(xiàng)目的文件目錄是這樣:

flask-example/
├── Apis
│   ├── login.py
│   └── userdata.py
├── Tools
│   ├── config.py
│   ├── dbmanager.py
│   └── decoratormanager.py
└── main.py
4.其他一些說明

Flask做API服務(wù)后端门粪,相關(guān)的知識點(diǎn)還是蠻多的玄妈,需要自己找資料拟蜻,逐一消化理解枯饿。核心內(nèi)容就是上述三塊:路由奢方,數(shù)據(jù)庫蟋字,身份驗(yàn)證鹊奖。

當(dāng)然嫉入,做API服務(wù)后端咒林,還有一些其他框架垫竞,比較火爆強(qiáng)勁的就有FastAPI,大家可以了解一下欢瞪,長得跟Flask有點(diǎn)像活烙,但底層跟Flask不一樣。(反正我沒用遣鼓,還是用的Flask)

還有Flask項(xiàng)目本身的開發(fā)大神 李輝 做的API框架:APIFlask啸盏,可以關(guān)注一下,是基于Flask開發(fā)的骑祟。(這個框架成熟后回懦,我會用起來)

微信小程序的入門學(xué)習(xí)

好了次企,后端Flask搞定怯晕,咱接著說前端,先說微信小程序吧缸棵,然后再說Vue舟茶。

微信小程序,其官方文檔就很詳盡了堵第,基本上看官方文檔就足夠了吧凉,當(dāng)然根據(jù)自身情況,再去B站找些視頻看看踏志,輔助學(xué)習(xí)就可以了阀捅,沒必要買書了。

鏈接在此:微信小程序官方文檔

官方文檔之中狰贯,有一份《小程序開發(fā)指南》也搓,其實(shí)就是新手入門指南。入門必看涵紊!多看幾遍傍妒!隨著自身項(xiàng)目,邊看邊做邊學(xué)摸柄,基本就會了颤练。

而開發(fā)指南之中,又有一小節(jié)驱负,文檔之中一筆帶過嗦玖,但是你絕不可錯過,叫【2.3.6 官方樣式庫】跃脊。

為了減輕開發(fā)者樣式開發(fā)的工作量宇挫,我們提供了WeUI.wxss基礎(chǔ)樣式庫。

WeUI是一套與微信原生視覺體驗(yàn)一致的基礎(chǔ)樣式庫酪术,由微信官方設(shè)計(jì)團(tuán)隊(duì)為微信內(nèi)網(wǎng)頁和微信小程序量身設(shè)計(jì)器瘪,令用戶的使用感知更加統(tǒng)一翠储。包含button、cell橡疼、dialog援所、progress、toast欣除、article住拭、actionsheet、icon等各式原生历帚。

具體使用文檔可參考:https://github.com/Tencent/weui-wxss

作為獨(dú)立開發(fā)者滔岳,假如沒有這種東西,難道讓我們自己去寫樣式去搞UI設(shè)計(jì)嗎抹缕?這要開發(fā)到何年馬月澈蟆!

類似WeUI,還有一個有贊出品的UI 組件庫卓研,也非常有名趴俘,美觀而好用,叫:Vant
Vant的官網(wǎng):https://vant-contrib.gitee.io/vant-weapp
文檔很詳盡奏赘,入手很簡單寥闪,自己去看吧。

Vue的入門學(xué)習(xí)

Flask做API服務(wù)后端搞定了磨淌,微信小程序也學(xué)會搞定了疲憋,想著是時候回頭搞網(wǎng)站了吧。

Flask是web框架梁只,本就是搞網(wǎng)站用的缚柳,搞網(wǎng)站就要用到Flask的網(wǎng)頁渲染功能。

Flask的網(wǎng)頁渲染功能搪锣,主要靠的就是:Jinja2模板引擎和render_template渲染函數(shù)秋忙。

學(xué)這塊內(nèi)容時,我是比較煩的构舟,可能習(xí)慣了以前從事游戲開發(fā)時前后端分離的開發(fā)思維灰追,這種前端夾著后端,傻傻分不清了狗超,學(xué)著就有點(diǎn)難受弹澎,也不好學(xué)進(jìn)去。

想想我都用Flask做API服務(wù)后端努咐,WEB開發(fā)前后端分離又是大勢所趨苦蒿,索性Flask的渲染不學(xué)了,火熱的前端框架Vue搞起了渗稍!

要學(xué)Vue刽肠,當(dāng)然先要學(xué)Node.js溃肪,要會NPM免胃。這Node.js的NPM就如同Python的pip音五,都是包管理工具。

Vue之下羔沙,類似微信小程序的WeUI和Vant躺涝,有一個餓了么出品的UI組件庫,也非常有名扼雏,叫:ElementUI坚嗜。

Vue有Vue2和Vue3兩個版本,我直接用的Vue3诗充,對應(yīng)的ElementUI版本叫:ElementUI-plus苍蔬。

ElementUI-plus的官網(wǎng):https://element-plus.gitee.io/zh-CN/

另外,其實(shí)類似WeUI蝴蜓,Vant碟绑,ElementUI這樣的UI樣式庫和組件庫,還有不少茎匠,如:賢心的LayUI格仲,阿里的 Ant Design......

在這里,真的要感謝這些UI樣式庫和組件庫的分享公司诵冒,團(tuán)隊(duì)或大神凯肋,沒有這些樣式庫和組件庫,像我這樣的個體開發(fā)者真的都不知道怎么在web開發(fā)上繼續(xù)下去汽馋。

之前侮东,我在web開發(fā)上的學(xué)習(xí),就是卡在了前端頁面的構(gòu)建上豹芯,內(nèi)心形成了一種恐懼悄雅。而自從了解到有這些樣式庫和組件庫的存在,前端瞬間變得輕松簡單了告组,開發(fā)瞬間變得美好起來煤伟。

Docker的入門學(xué)習(xí)

前后端搞定,代碼開發(fā)完成木缝,最后當(dāng)然要放到真正運(yùn)行的服務(wù)器上便锨,這就是部署了。

高級的部署方法是基于容器進(jìn)行部署我碟。Docker 就是目前最流行的容器平臺放案。

(Docker ,相關(guān)知識矫俺,自行百度)

微信小程序的部署吱殉,直接上傳代碼即可掸冤,下面主要分享Flask+Vue的網(wǎng)站部署

1.項(xiàng)目目錄結(jié)構(gòu)
myweb_project/
│
├── flask
│   ├── Dockerfile
│   ├── gunicorn.config.py
│   └── flask_app # flask項(xiàng)目的代碼
│
├── mysql
│   ├── Dockerfile
│   └── myweb.sql
│
├── nginxvue
│   ├── dist    # 打包的vue項(xiàng)目
│   ├── Dockerfile
│   └── nginx.conf
│
└──docker-compose.yml
2.Docker+Gunicorn 部署 flask后端

gunicorn.config.py文件如下:

import multiprocessing
bind = '0.0.0.0:9191' # 監(jiān)聽內(nèi)網(wǎng)端口80
backlog = 512
timeout = 30
worker_class = 'gevent' # 工作模式協(xié)程
workers = multiprocessing.cpu_count() * 2 + 1 # 并行工作進(jìn)程數(shù)
threads = 2               # 指定每個工作者的線程數(shù)


pidfile = 'gunicorn.pid' # 設(shè)置進(jìn)程文件目錄
loglevel = 'info'   # 設(shè)置日志記錄水平
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
accesslog = "gunicorn_access.log"      # 訪問信息日志文件
errorlog = "gunicorn_error.log"        # 錯誤信息日志文件
reload=True  # 代碼發(fā)生變化是否自動重啟

Dockerfile文件如下:

FROM python:3.8
WORKDIR /Project/jrsoftdemo
COPY . .
RUN pip install -r Tools/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
CMD gunicorn  -k gevent   -w 5   -b 0.0.0.0:8080   backend:app
3.Docker+Nginx 部署 Vue前端

nginx.conf文件如下:

server {
    listen       8080;
    server_name  localhost;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;

    location / {  # 直接匹配端口返回前端
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location /api/ {  # 匹配api的,轉(zhuǎn)發(fā)給后端友雳,
        rewrite  /api/(.*)  /$1  break;
        proxy_pass http://192.168.99.100:9999;  # 這里是宿主機(jī)的ip
    }
}

Dockerfile文件如下:

# 設(shè)置基礎(chǔ)鏡像
FROM nginx

# 將dist文件中的內(nèi)容復(fù)制到 /usr/share/nginx/html/ 這個目錄下面
COPY dist/  /usr/share/nginx/html/

#用本地的 nginx.conf 配置來替換nginx鏡像里的默認(rèn)配置
COPY nginx.conf /etc/nginx/conf.d/default.conf

4.Docker部署 mysql數(shù)據(jù)庫

如果你的項(xiàng)目稿湿,數(shù)據(jù)庫也需要Docker部署,當(dāng)然也是可以的押赊。
Dockerfile文件如下:

FROM mysql:5.7.20

部署成功之后饺藤,數(shù)據(jù)庫軟件通過IP連入,便可查看管理流礁。

5.Docker的相關(guān)命令
# 創(chuàng)建鏡像
docker build -t  jrsoftflask  .  

# 啟動生產(chǎn)環(huán)境
docker run -p 9999:9191  --name jrsoft_demo  -d jrsoftflask

# 查看鏡像
docker images

# 刪除鏡像
docker rmi -f e7cd0fde3f42

# 進(jìn)入docker鏡像環(huán)境
docker run -it jrsoftflask /bin/bash

# 列出運(yùn)行容器
docker ps

# 列出全部容器
docker ps -a

# docker遠(yuǎn)程服務(wù)器部署——方案一:tar打包法
# 生成tar
docker save jrsoftflask>images.tar
# 加載tar
docker load < images.tar

# docker遠(yuǎn)程服務(wù)器部署——方案二:鏡像云倉庫法
# 將本地鏡像推到[遠(yuǎn)程倉庫]--DockerHub/阿里云Docker倉庫/騰訊云Docker倉庫
docker push 178.104.162.39/dev/vdi-controller:arm0324
# 從[遠(yuǎn)程倉庫]拉取鏡像--DockerHub/阿里云Docker倉庫/騰訊云Docker倉庫
docker pull 178.104.162.39/dev/vdi-controller:arm0324
6.docker-compose編排

像Flask+微信小程序涕俗,只需要用一個docker容器部署Flask就可以了,自然不需要docker-compose編排神帅。

而像Flask+Vue項(xiàng)目再姑,用到多個docker容器,那用docker-compose編排找御,一鍵拉起元镀,自然更加方便。

docker-compose.yml文件如下:

version: '3'
services:
  mysql:
    build: ./mysql
    ports:
      - "3306:3306"
    container_name: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=mypws123456789
    restart: always

  flask:
    build: ./flask
    ports:
      - "9999:9191"
    container_name: flask
    restart: always
    volumes:
     - "./flask/lab_app:/root/lab_app"


  nginx:
    build: ./nginxvue
    ports:
      - "8080:8080"
    container_name: nginxvue
# 啟動命令
docker-compose up -d
7.注意事項(xiàng)

Docker部署萎坷,需要注意每個容器的IP和端口凹联,假若設(shè)置不對就連不上了。

在docker-compose編排的時候哆档,可進(jìn)行相應(yīng)的網(wǎng)絡(luò)設(shè)置蔽挠,上面文件并未涉及,大家可自行研究瓜浸。

自學(xué)方法

1.git和github

現(xiàn)在的程序員澳淑,git基本必學(xué)了,沒什么好說的插佛。一般用用的話杠巡,掌握幾條命令就可以了

# 創(chuàng)建倉庫
git init

# 添加到暫存區(qū)
git add .

# 提交到倉庫
git commit -m '提交注釋'

# 關(guān)聯(lián)遠(yuǎn)程倉庫
git remote add origin git@github.com:......

# 推送到遠(yuǎn)程倉庫
git push -u origin master

# 克隆遠(yuǎn)程倉庫
git clone git@github.com:......

學(xué)習(xí)git,自然會用上github雇寇。github上好東西太多了氢拥,想找什么源碼,盡管去上面搜索好了锨侯。

所以嫩海,這里有個入門捷徑:先去github,搜幾個簡單的項(xiàng)目源碼囚痴,下載下來進(jìn)行學(xué)習(xí)叁怪,看看別人都是怎么做的,最簡單的項(xiàng)目是怎么搭建的深滚,如此入門再好不過了奕谭!

后面有時間有機(jī)會涣觉,我也會寫幾個入門項(xiàng)目源碼,上傳到github血柳,屆時分享給大家官册。

2.自己的項(xiàng)目

看別人的文章,看別人的視頻混驰,看別人的源碼攀隔,終究是順著別人的思維,看的時候貌似都會了栖榨,其實(shí)往往離真正會做還有一段距離。

所以明刷,這里有個入門捷徑:學(xué)東西前婴栽,先有一個自己的項(xiàng)目,越現(xiàn)實(shí)越具體越好辈末。
不管是自己主動構(gòu)想的項(xiàng)目愚争,還是他人被動賦予的項(xiàng)目,都很好挤聘,只要有了項(xiàng)目轰枝,便有了明確的目標(biāo)。
然后邊做邊學(xué)组去,邊學(xué)邊做鞍陨,學(xué)以致用,知行合一从隆,如此最快诚撵,做才是真正的得到!

3.目標(biāo)拆分法

目標(biāo)往往很大键闺,任務(wù)往往艱巨寿烟。不要怕,拆分他辛燥!

目標(biāo)拆分法是做事萬能法筛武,不管是做項(xiàng)目,還是學(xué)習(xí)挎塌,不管是寫程序徘六,還是寫小說......

目標(biāo)越大,越需要拆分勃蜘,拆分成一個個小目標(biāo)硕噩,一個個可執(zhí)行的不讓人恐懼的小目標(biāo)。

然后一個小目標(biāo)一個小目標(biāo)的去完成缭贡,像做游戲任務(wù)一樣炉擅,像玩游戲闖關(guān)一樣辉懒,按部就班,逐個擊破即可谍失。

這目標(biāo)拆分法眶俩,也是管理學(xué)中的方法,也是游戲設(shè)計(jì)中的一大核心要義快鱼。

游戲有四要素:目標(biāo)颠印,規(guī)則,反饋抹竹,自愿參與线罕。

你看,你將學(xué)習(xí)目標(biāo)拆分成多個可執(zhí)行的小目標(biāo)后窃判,還可以給每個小目標(biāo)設(shè)定完成獎勵钞楼,如此一來,你可以將學(xué)習(xí)轉(zhuǎn)化為游戲一般好玩袄琳,這叫學(xué)習(xí)游戲化询件。

寫在最后,網(wǎng)站開發(fā)唆樊,我的心愿

大約10年以前宛琅,不做游戲策劃之后,便萌生了一個想法:要學(xué)會網(wǎng)站開發(fā)逗旁,做自己想做的網(wǎng)站嘿辟。

而在正式轉(zhuǎn)做程序員之后,這個想法也便隨之變得愈加強(qiáng)烈和執(zhí)著痢艺,已然成為了人生的必達(dá)目標(biāo)仓洼,人生的一個心愿。

而且堤舒,時常心想:一個程序員色建,如果連網(wǎng)站開發(fā)都不會,當(dāng)別人問你什么工作時舌缤,好意思跟別人說自己是程序員箕戳,是軟件開發(fā)工程師嗎?

所以国撵,很早以前陵吸,便看了html,css介牙,javascript壮虫,但是看懂了又如何?真正搞起網(wǎng)站來,依然一臉懵逼囚似。

后來剩拢,為了搭建網(wǎng)站,也接觸了wordpress等等各種搭建網(wǎng)站的工具饶唤,但這些畢竟都只是工具徐伐,并不是自己想要的能力——真正網(wǎng)站開發(fā)的能力。

后來會了python募狂,便開始學(xué)python的web框架django办素,可是對我來說django似乎太復(fù)雜了,起手學(xué)了兩次祸穷,每次花了兩三天還感覺門都沒摸著性穿,也便興味索然,算了算了粱哼。

后來工作之中季二,同事請我?guī)兔Υ罱ㄒ粋€API服務(wù),那時我也不真正清楚什么是API服務(wù)揭措,但我自信我大python啥不能干,網(wǎng)上一搜刻蚯,短短幾行代碼便能搭建绊含,so easy,便應(yīng)下了同事的任務(wù)炊汹,幫忙完成了這個API服務(wù)躬充。而這一次任務(wù)中,用的正是python的另一個web框架——flask讨便。

flask充甚,短短幾行代碼,簡單明了霸褒,便能搭建api服務(wù)伴找,便能搭建網(wǎng)站,簡直太棒了废菱,一見鐘情技矮。

于是,正式開始學(xué)習(xí)flask殊轴,以書本《Flask Web開發(fā)》(米格爾格林貝格 著)為主要教材衰倦,以B站大神們分享的flask視頻為輔助學(xué)習(xí)。

《Flask Web開發(fā)》旁理,逐字逐句閱讀樊零,逐行代碼敲下,學(xué)了大半個月孽文,仿佛都學(xué)下來了驻襟,其實(shí)很多概念并不清晰夺艰,很多東西把握不住。自己很清楚塑悼,真正動手去做劲适,根本沒把握獨(dú)自開發(fā)一個網(wǎng)站,所以說到底厢蒜,知識還是沒有內(nèi)化霞势,功夫還是沒有學(xué)到。于是斑鸦,停了停愕贡,又放了一段時間。

后來巷屿,那個同事又找我?guī)兔ψ鑫⑿判〕绦蚬桃浴N⑿判〕绦蜷_發(fā),我也是摸了好幾次嘱巾,也想學(xué)也是一直學(xué)不會憨琳,但現(xiàn)在有了flask的半吊子功夫,心里是有點(diǎn)底的旬昭,知道整體是怎么搭建的篙螟,都需要哪些知識技能,而且我內(nèi)心太喜歡這種全新的實(shí)際項(xiàng)目了问拘,因?yàn)槲抑辣槁裕谶@種實(shí)際項(xiàng)目上,邊做邊學(xué)骤坐,又有項(xiàng)目的現(xiàn)實(shí)約束绪杏,學(xué)東西才是最快的。

于是纽绍,接下來蕾久,大概一個月,我真正學(xué)會了微信小程序顶岸,學(xué)會了Flask腔彰,接著一個月,又學(xué)會了VUE前端開發(fā)辖佣,學(xué)會了docker霹抛,gunicorn,nginx部署卷谈,當(dāng)然稱不上完全了解和精通杯拐,但獨(dú)立搭建網(wǎng)站已經(jīng)沒有問題了,更深入的原理知識根據(jù)實(shí)際需求再去了解即可《吮疲總之朗兵,當(dāng)前的程度對我來說基本足夠了,此生一個心愿也算了了顶滩。

心愿已了余掖,技能獲得,內(nèi)心歡喜礁鲁,寫下此文盐欺,以作總結(jié),留做記錄仅醇,分享于此冗美。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市析二,隨后出現(xiàn)的幾起案子粉洼,更是在濱河造成了極大的恐慌,老刑警劉巖叶摄,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件属韧,死亡現(xiàn)場離奇詭異,居然都是意外死亡蛤吓,警方通過查閱死者的電腦和手機(jī)挫剑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柱衔,“玉大人,你說我怎么就攤上這事愉棱∷纛恚” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵奔滑,是天一觀的道長艾岂。 經(jīng)常有香客問我,道長朋其,這世上最難降的妖魔是什么王浴? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮梅猿,結(jié)果婚禮上氓辣,老公的妹妹穿的比我還像新娘。我一直安慰自己袱蚓,他們只是感情好钞啸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般体斩。 火紅的嫁衣襯著肌膚如雪梭稚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天絮吵,我揣著相機(jī)與錄音弧烤,去河邊找鬼。 笑死蹬敲,一個胖子當(dāng)著我的面吹牛暇昂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粱栖,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼话浇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闹究?” 一聲冷哼從身側(cè)響起幔崖,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渣淤,沒想到半個月后赏寇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡价认,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年嗅定,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片用踩。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡渠退,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脐彩,到底是詐尸還是另有隱情碎乃,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布惠奸,位于F島的核電站梅誓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏佛南。R本人自食惡果不足惜梗掰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗅回。 院中可真熱鬧及穗,春花似錦、人聲如沸妈拌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猜惋,卻和暖如春丸氛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背著摔。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工缓窜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谍咆。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓禾锤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親摹察。 傳聞我的和親對象是個殘疾皇子恩掷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容