1. 程式人生 > >Flask專案之手機端租房網站的實戰開發(二)

Flask專案之手機端租房網站的實戰開發(二)

說明:該篇部落格是博主一字一碼編寫的,實屬不易,請尊重原創,謝謝大家!

接著上一篇部落格繼續往下寫 :https://blog.csdn.net/qq_41782425/article/details/85613780

目錄

一丶建立專案

二丶建立工程目錄(拆分manage.py)

三丶以開發環境進行專案測試


一丶建立專案

1 新建ihome_python專案資料夾

2 在Pycharm中開啟此檔案 ,並配置專案直譯器(python2環境)

3 在工程目錄下建立manage.py作為專案啟動檔案

  • step1 實現flask中最基本的工作
# coding:utf-8

from flask import Flask

app = Flask(__name__)

@app.route('/index')
def index():
    return "index page"


if __name__ == '__main__':
    app.run()
  • step2 配置mysql資料庫用於儲存使用者資料
class Config(object):
    """配置資訊"""
    DEBUG = True
    SECRET_KEY = "cdtaogang**[email protected]
" # 連線mysql資料庫 SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/ihome_python" SQLALCHEMY_TRACK_MODIFICATIONS = True app.config.from_object(Config) db = SQLAlchemy(app)
  • step3 在本地mysql中建立ihome_python資料庫 
create database ihome_python charset=utf8;
  • step4 配置redis資料庫用於儲存session資訊以及快取資料(因為flask框架預設將session資料存到cookie中),所以這裡需要利用flask_session這個工具包幫助我們將flask儲存的session資料交給我們管理,這樣就可以將session資料存到redis資料庫中了
class Config(object):
    """配置資訊"""
    DEBUG = True
    SECRET_KEY = "cdtaogang**[email protected]"

    # 連線mysql資料庫
    SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/ihome_python"
    SQLALCHEMY_TRACK_MODIFICATIONS = True

    # redis資料庫配置
    REDIS_HOST = "127.0.0.1"
    REDIS_PORT = 6379


app.config.from_object(Config)

db = SQLAlchemy(app)

#建立redis資料庫連線物件
redis_store = redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
  • step5 配置flask_session用於我們操作session到redis資料庫(說明在Config類中再次建立redis資料庫連線,是因為在實際線上環境中,可能需要將session資料存到不同的伺服器上)
    # flask_session配置
    SESSION_TYPE = "redis"
    SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT)
    SESSION_USE_SIGNER = True  # 對cookie中session_id進行隱藏處理
    PERMANENT_SESSION_LIFETIME = 86400  # session資料的有效期,單位秒

# 利用flask_session, 將session資料儲存到redis中
Session(app)
  • step6 開啟csrf防護機制(匯入flask_WTF中的CSRFProtect類)
# 為flask補充csrf防護
CSRFProtect(app)

二丶建立工程目錄(拆分manage.py)

1 拆分配置檔案

  • step1 在專案根目錄下建立一個config.py檔案,將manage.py中的Config配置類放到該檔案中

  • step2 工程實現後,有兩種執行環境,開發測試環境以及生成環境(線上環境),所以flask程式在執行時,就需要配置兩個配置類,一個是用於開發環境,另一個用於生成環境
class DevelopmentConfig(Config):
    """開發環境配置資訊"""
    DEBUG = True

class ProductConfig(Config):
    """生成環境配置資訊"""
    pass
  • step3 將app物件設計為工廠模式

  • step4 在config.py中建立配置對映
#構建配置對映關係
config_map = {
    "develop": DevelopmentConfig,
    "product": ProductConfig
}
  • step5 匯入config中的config_map,通過呼叫create_app方法,建立app物件,將我們需要的配置環境通過傳參的方式來決定是用開發環境還是生產環境,在create_app方法中就按照指明的環境進行配置即可

  • step6 因最初建立的manage.py作為專案啟動檔案,所以我們在manage檔案中只保留啟動程式碼即可,需將其餘程式碼抽離出去,保證manage檔案中沒有其他的程式碼,專案根目錄下只需要保留啟動檔案manage以及config配置檔案,即在專案根目錄下建立一個ihome的python包,將create_app程式碼放到這個ihome包的init檔案中即可,隨後在ihome包下建立一個static目錄用於存放靜態檔案,再建立一個models.py檔案用於做資料庫的遷移

  • step7 在manage中建立並繫結app物件的程式碼,放到init中,會導致無法繫結create_app方法裡面的app,所以使用SQLAlchemy物件db提供的init_app方法,在create_app方法裡面對db進行初始化,這樣就解決了

  • step8 在models.py檔案中匯入資料庫物件db 
from ihome import db
  • step9 將manage檔案中建立的redis資料庫連線物件放到init檔案中,需要思考是否放在create_app方法中,因為最初在manage檔案中建立的redis資料庫連線需要從config檔案中拿去host以及port配置,所以我們在全域性宣告redis_store變數為None,然後在方法中通過config_map獲取的環境配置類config_class,說白了也就是config中的開發類DevelopmentConfig,直接拿去類中我們配置好的r連線redis資料庫的port和host

  • step10 對於Session(app)和CSRFProtect(app),不會用到這兩個物件來進行進一步操作,只是剛開始使用這兩個物件來初始化app,一個是為了我們將session資料存到redis資料庫,另一個是為了開啟CSRF防護機制,所以直接放到create_app類即可
    # 利用flask_session, 將session資料儲存到redis中
    Session(app)

    # 為flask補充csrf防護
    CSRFProtect(app)
  • step11 建立藍圖,用於管理不同版本的檢視,在ihome核心目錄下建立一個api_1_0python包,代表1.0版本的藍圖,在這個藍圖下就可以建立各種各樣的檢視了,在api_1_0藍圖下建立一個demo.py檔案,將啟動檔案manage中的檢視函式放到裡面
@app.route('/index')
def index():
    return "index page"
  • step12 在api_1_0包下的init檔案中建立藍圖 

  • step13 在flask專案應用檔案init中註冊藍圖 ,首先在init檔案中通過絕對路徑匯入api_1_0包,再通過app應用物件中的register_blueprint方法,註冊api_1_0包中的api藍圖名字,並定義url字首地址為/api/v1.0表示1.0版本
    # 註冊藍圖
    app.register_blueprint(api_1_0.api, url_prefix="/api/v1.0")
  • step14 在建立工程時,可能會用到資料庫models檔案,那麼就需要使用遷移外掛,從flask_script中引入指令碼命令管理物件,再從flask_migrate中匯入遷移執行者Migrate,遷移命令解析人員Migratecommand

三丶以開發環境進行專案測試

  • step1 在Pycharm終端中,執行python manage.py runserver 預設埠,執行專案

在瀏覽器中成功渲染出index檢視函式返回的字串,如下圖

  •  step3 回到Pycharm終端檢視程式日誌,請求方式和地址以及狀態碼都是完全正確,代表專案設計成功