Flask 實用技巧

Flask 經常使用技巧

  1. 快速添加數據python

    在基礎數據模型中,添加一個set__attrs方法,當添加數據時 ,使用模型對象掉用改方法,傳入數據便可.---例: 表單提交時, 傳入 form.data 再db.session.add(模型對象),最後db.session.commit() 提交便可。git

    def set_attrs(self, form_data):  
            # 添加數據 / 只能在表單name與字段名相同時能夠使用該方法
            from apps.cms.verify_view import set_password
            for k, v in form_data.items():
                if hasattr(self, k) and k != 'id':
                    if k != 'password':
                        setattr(self, k, v)
                    else:  # 對密碼進行加密
                        setattr(self, k, set_password(v))
  2. 數據字典化( 強轉字典 )程序員

    若是視圖中沒有定義keys方法,將不能進行字典化json

    class Dishes_Class_Model(BaseModel):
        name = db.Column(db.String(length=16), comment='名稱')
        type_accumulation = db.Column(db.String(length=50), comment='菜品編號')
        merchant_id = db.Column(db.INT, comment='所屬商家ID')
        shop_id = db.Column(db.INT, comment='所屬店鋪ID')
        description = db.Column(db.String(length=250), comment='描述')
        is_default = db.Column(db.Boolean, default=False, comment='是不是默認分類')
        category_id = db.Column(db.String(16), comment='分類UUID')
    
    
         def keys(self):		# 返回相應字段(大前提) 
            return 'name', 'type_accumulation', 'shop_id', 'description', 'is_default'

    使用__getitem__魔術方法,item參數傳入一個可迭代類型的keys後端

    # 強轉字典
        def __getitem__(self, item):
            if hasattr(self, item):
                return getattr(self, item)
  3. 密碼哈希加鹽及驗證:api

    from werkzeug.security import generate_password_hash, check_password_hash
    
    
    # 哈希加鹽的密碼方式
    def set_password(password):
        return generate_password_hash(password=password, method='pbkdf2:sha256', salt_length=32)
    
    
    # 哈希驗證密碼的方式
    def check_password(set_password, password):
        return check_password_hash(pwhash=set_password, password=password)  # 驗證成功返回True

    使用 set_password(password) 方法對鍵入的字符串哈希化瀏覽器

    返回結果: pbkdf2:sha256:50000$vVSMhPMPZIpj6BsIk9r5rQbGwRA6bhGE$8e1e7e0c8eb8c1007120eb491617afe09f022d2175ad78e400316052b1b7d3ae

    使用 check_password(哈希後的值,鍵入的字符串) 進行校驗,校驗成功返回True,反之Flase服務器

知識補充:

repr 與__str__ 的區別:cookie

def __repr__(self):
        return self.goods_name
    #**********************************************#
    def __str__(self):
        return self.goods_name

相同點:session

​ 這兩個方法都是用於顯示的,__str__是面向用戶的,而__repr__面向程序員。

不一樣點:

str 是針對print打印,只有print打印出結果,__repr__調用對象是,將打印返回值

獲取配置信息:

current_app.config.get('SESSION_REDIS')

API接口開發_先後端分離開發:

REST 資源狀態轉移 設計方案( 建議 )

RESTful api標準___使用名詞做爲資源信息

使用HTTP請求的方式做爲資源的操做動詞[GET| POST | PUT/PATCH |DELETE]

請求必須經過json進行數據的給與響應也經過json格式反饋

API接口的用戶身份認證

網站開發:

​ cookie session

API:

​ Basic Auth ( 請求: Authorization: 用戶:密碼 base64的編碼 )

​ HTTP 明文傳輸 HTTPS服務進行數據傳輸

令牌token技術來實現用戶身份的識別問題

​ cookie:

​ 瀏覽器

​ 服務器經過響應的set_cookie

​ 瀏覽器在請求時: cookie:xxx

​ APP:

​ 服務器把token值傳給客戶端,跟客戶約定一個協議,讓客戶端來存儲

​ 客服端在須要權限的API接口訪問時,把存儲的token值一塊兒挾帶過來

token的格式:

​ JWT的格式

​ JSON格式

​ {"uid":101} + 簽名的行爲 ​ {"uid":101} + 密鑰的簽名

​ {"uid":102} + 密鑰的簽名

項目地址:https://gitee.com/yulangren/elm.git

相關文章
相關標籤/搜索