Flask之RESTFul API前后端分離


Flask之RESTFul API前后端分離

一:虛擬環境搭建的兩種方式

1 pipenv的使用

pip install --user pipenv安裝pipenv在用戶目錄下
py -m site --user-site通過此命令找到用戶基礎目錄,結果為C:\Users\u14e\AppData\Roaming\Python\Python35\site-packages
將用戶基礎目錄結尾的site-packages換成Scripts,即C:\Users\u14e\AppData\Roaming\Python\Python35\Scripts,然后將這一路徑添加到系統變量中
重新打開命令行工具,如cmd,pipenv --version檢查是否安裝成功
pipenv install創建一個虛擬環境
pipenv shell激活虛擬環境,exit推出虛擬環境
pipenv install requests安裝python包,pipenv install django==1.11.7安裝制定版本的包,pipenv uninstall requests卸載包
pipenv graph查看安裝的包,以及依賴的其他包

 


2 pip virtualenv(使用workon進行管理)的使用

# 1 安裝
pip install virtualenv
virtualenv --version
​
# 非Windows
# pip install virtualenvwrapper
# Windows
pip install virtualenvwrapper-win
​
# 查看當前所有的虛擬環境
workon
​
# 創建一個虛擬環境
mkvirtualenv new_env
​
# 刪除一個虛擬環境
rmvirtualenv new_env

 



3 一次性導入多包方法(解決環境兼容問題)

# 在當前環境中將路徑切到項目包打包txt文件目錄下
- 項目依賴 pip3 install pipreqs
- 生成依賴文件:pipreqs ./ --encoding=='utf-8'
- 安裝依賴文件:pip3 install -r requirements.txt 
​

 

二:Flask的簡單實用和藍圖

1 簡單使用

# app.py
from flask import Flask
def create_app():
    app = Flask(__name__)  # 指定位置信息
    app.config.from_object('app.config.setting')
    app.config.from_object('app.config.secure')
    register_blueprint(app)
    return app
​
# genger.py---啟動文件
from app.app import create_app
​
app = create_app()
​
​
@app.route('/v1/user/get')
def get_user():
    return 'i am andy'
​
​
@app.route('/v1/book/get')
def get_book():
    return 'this is get book '
​
​
if __name__ == '__main__':
    app.run(debug=True)

 


2 藍圖的使用

 



 

 

# 分別設置藍圖

# book.py
from flask import Blueprint
​
book = Blueprint('book', __name__)
​
​
@book.route('/v1/book/get')
def get_book():
    return 'this is get book '# user.py
from flask import Blueprint
​
user = Blueprint('user', __name__)
​
​
@user.route('/v1/user/get')
def get_user():
    return 'i am andy'# app.py(生成app並注冊藍圖)
from flask import Flask
​
​
def register_blueprint(app):
    from app.api.v1.user import user
    from app.api.v1.book import book
    app.register_blueprint(user)
    app.register_blueprint(book)
​
​
def create_app():
    app = Flask(__name__)  # 指定位置信息
    app.config.from_object('app.config.setting')
    app.config.from_object('app.config.secure')
    register_blueprint(app)
    return app
​
# 啟動文件
from app.app import create_app
app = create_app()
if __name__ == '__main__':
    app.run(debug=True)
​

 

3 藍圖的機制缺點

1 Blurpring藍圖不是用來拆分視圖函數的,應該是用來模塊級別的拆分
​
2 寫路由的時候太繁瑣(重復勞動,比如我寫v1/book/get,又要寫一個接口是v1/book/delete)

 


三:自定義紅圖

1 創建紅圖流程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

新建一個包libs,里面放置的是紅圖的方法


#創建紅圖
class Redprint:
    def __init__(slef,name):
        self.name = name
        self.mound = []
        
    def route(self,rule,**options):
        def decorator(f):
            # f就是所裝飾的方法試圖,rule就是路由,options就是關鍵字參數,比如,methods=['get','post']
            self.mound.append((f,rule,options))
            return f
        return decorator
    
    def register(self, bp, url_prefix=None):
        if url_prefix is None:
            url_prefix = '/' + self.name
        for f, rule, options in self.mound:
            endpoint = options.pop("endpoint", f.__name__)
            bp.add_url_rule(url_prefix + rule, endpoint, f, **options)
​
        
​
​
# book.py(使用紅圖)
from app.libs.redprint import Redprint
​
api = Redprint('book')
​
​
@api.route('/get')
def get_book():
    return 'this is get book '
​
​
​
# v1/__init__.py(創建藍圖對象,並在藍圖對象中注冊紅圖)
from flask import Blueprint
from app.api.v1 import book, user
​
​
def create_blueprint_v1():
    bp_v1 = Blueprint('v1', __name__)
    user.api.register(bp_v1)
    book.api.register(bp_v1)
​
    return bp_v1
​
# app.py(將藍圖注冊到app對象中)
from flask import Flask
​
​
def register_blueprint(app):
    from app.api.v1 import create_blueprint_v1
    app.register_blueprint(create_blueprint_v1(), url_prefix='/v1')  # 藍圖補充路由的前綴
​
​
def create_app():
    app = Flask(__name__)  # 指定位置信息
    app.config.from_object('app.config.setting')
    app.config.from_object('app.config.secure')
    register_blueprint(app)
    return app
​

 


 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM