manage.py檔案
# conding:utf-8
from flask_script import manager # 匯入指令碼
from flask_migrate import migrate, migratecommand # 管理models
manager.add_command("db", migratecommand) # 新增資料庫的命令
if __name__ == '__main__':
manager.run()
config.pyimport redis
class config(object):
"""flask的配置"""
secret_key = "eqweqwnjewhn**k34n423nyh56nkewk" # 配置金鑰
# 配置redis鏈結的主機和埠號
redis_host = "127.0.0.1"
redis_port = 6379
# mysql資料庫的配置,先在資料庫新建database
sqlalchemy_database_uri = "mysql://root:@localhost:3306/ihome"
sqlalchemy_track_modifications = true
session_type = "redis" # 儲存session的型別為redis
session_redis = redis.strictredis(host=redis_port, port=redis_port) # 測試專案使用同一臺redis伺服器
session_use_signer = true # 對cookie中的session_id做混淆處理
permanent_session_lifetime = 86400 # 設定session的有效期,時間為一天
class developmentconfig(config):
"""開發模式的配置"""
debug = true # debug為true
class produceconfig(config):
"""生產模式"""
pass
#配置對映
config_map =
ihome下的 init.py
from flask import flask
from config import config_map
from flask_sqlalchemy import sqlalchemy # 匯入和flask框架相關的mysql資料庫
import redis, logging # 匯入redis資料庫,作為快取資料庫 匯入日誌logging
from flask_session import session # 使用flask擴充的session
from flask_wtf import csrfprotect
from logging.handlers import rotatingfilehandler
db = sqlalchemy()
redis_store = none
# csrf保護
csrf = csrfprotect()
# log記錄
def setup_log():
"""配置日誌"""
# 級別從高到低
# logging.error() # 錯誤級別
# logging.warn() # 警告級別
# logging.info() # 訊息級別
# logging.debug() # 除錯級別
# 設定日誌的記錄等級
logging.basicconfig(level=logging.debug) # 除錯debug級
# 建立日誌記錄器,指明日誌儲存的路徑、每個日誌檔案的最大大小、儲存的日誌檔案個數上限,最多保留10個檔案
file_log_handler = rotatingfilehandler("logs/log", maxbytes=1024*1024*100, backupcount=10)
# 建立日誌記錄的格式 日誌等級 輸入日誌資訊的檔名 行數 日誌資訊
formatter = logging.formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s')
# 為剛建立的日誌記錄器設定日誌記錄格式
file_log_handler.setformatter(formatter)
logging.getlogger().addhandler(file_log_handler)
""":param config_name: str型別 可選
:return:
"""# 選擇不同環境的config
config_type = config_map.get(config_name)
# 註冊配置
# 全域性變數宣告
global redis_store
# 建立redis鏈結物件
redis_store = redis.strictredis(host=config_type.redis_host, port=config_type.redis_port) # host為鏈結的主機,port為鏈結的埠號,在config中配置
from ihome.api_v1 import api # 放在函式中,解決迴圈匯入的問題
# 註冊藍圖
# csrf保護
# 配置session,將session資料儲存在redis中
藍圖設計
# 測試使用的demo,使用flask中的藍圖
from flask import blueprint
# 建立藍圖物件
api = blueprint('api_1_0', __name__)
# 讓藍圖知道demo的存在
from . import demo
from . import api
@api.route('/')
def hello_world():
return 'hello world!'
TCP粘包的拆包處理
因為tcp是流式處理的,所以包沒有邊界,必須設計乙個包頭,裡面表示包的長度 一般用位元組表示 根據這個來逐個拆包。如果對於傳送 接收頻率不高的話,一般也就不做拆包處理了,因為不大可能有粘包現象。以下是粘包和拆包的分析 用qt的tcpsocket讀出的資料來拆 1 m imp m thread boo...
tcp粘包和拆包的處理方案
隨著智慧型硬體越來越流行,很多後端開發人員都有可能接觸到socket程式設計。而很多情況下,伺服器與端上需要保證資料的有序,穩定到達,自然而然就會選擇基於tcp ip協議的socekt開發。開發過程中,經常會遇到tcp粘包,拆包的問題,本文將從產生原因,和解決方案以及workerman是如何處理粘包...
tcp粘包和拆包的處理方案
隨著智慧型硬體越來越流行,很多後端開發人員都有可能接觸到socket程式設計。而很多情況下,伺服器與端上需要保證資料的有序,穩定到達,自然而然就會選擇基於tcp ip協議的socekt開發。開發過程中,經常會遇到tcp粘包,拆包的問題,本文將從產生原因,和解決方案以及workerman是如何處理粘包...