#Flask 安裝依賴包及做用 - jinja2 模板語言 (flask依賴包) - markupsafe 防止css攻擊 (flask依賴包) - werkzeug --wkz 相似於django中的wsgi,承載服務 (flask依賴包)
# 三行啓動 from flask import Flask app = Flask(__name__) app.run("0.0.0.0",9527) #監聽地址,監聽端口
交由客戶端保管機制,客戶端保存的是一串加密字符串,保存在服務器的內存中css
設置sessionhtml
1.在Flask中設置密鑰 app.secret_key = "@#^%&*&@^&%^#*@" 或者: app.config['SECRET_KEY'] = "@#^%&*&@^&%^#*@" 2.設置session session["user"]="123" 3.獲取session session.get('user') # 交由客戶端保管機制 1.登錄成功後設置session,Flask根據密鑰和要設置的session鍵值對通過位運算,生成session,保存到內存中,須要的話就經過get獲取,不須要關閉時刪除,並在瀏覽器中設置鍵值對--session:string 2.在發出請求時,根據瀏覽器中的--session:string和Flask中secret_key,反序列化就獲得了session鍵值對
from flask import Flask app = Flask(__name__) @app.route('/',methods=("POST","GET"),endpoint='別名',defaults={"count":20} ) def home(count): count = request.args.get('count',count) #指定頁數就優先,若是沒有取默認值 app.run()
rule= '/' 第一個時url,python
methods= ["GET","POST",..] 支持的請求方式(get查詢,post增長,put更新,delete刪除,options跨域)redis
endpoint 別名 * 同一個項目中別名不能重複,默認值是視圖函數名,django
Mapping,別名. 反向解析 url = url_for('別名')
strict_slashes = True 嚴格遵照路由匹配json
defaluts 默認參數flask
redirect_to ='/' 永久重定向,無論url是什麼都會跳轉到'/'跨域
#添加路由時不必定用裝飾器,可使用 app.add_url_rule(rule, # 路由地址 view_func #視圖函數 )
from flask import Flask app = Flask(__name__) @app.route('/home/<page>') #page默認類型是字符串接收 def home(page): # 須要傳參接收 pass @app.route('/home/<page>_<id>_<id2>') #默認類型是字符串接收 def home(page,id,id2): # 須要傳參接收 pass app.run()
from flask import Flask app = Flask( __name__, template_folder = 'templates', # 更改母版存放路徑,默認值是templates ##重要!!! static_folder = 'static', # 指定靜態文件保存目錄,默認值是static "家" ##重要!!! static_url_path = "/static", # 靜態文件訪問路徑,默認值是 /+static_folder "回家的路" ##重要!!! ) #原理 @app.route('/<filename>', ) def func(filename): filepath = os.path.join('img', filename) # img就是家 return send_file(filepath) # filepath就是訪問路徑 if __name__ == '__main__': app.run()
from flask import Flask app = Flask( __name__, template_folder = 'templates', # 更改母版存放路徑,默認值是templates ##重要!!! static_folder = 'static', # 指定靜態文件保存目錄,默認值是static "家" ##重要!!! static_url_path = "/static", # 靜態文件訪問路徑,默認值是 /+static_folder "回家的路" ##重要!!! ) # 實例化配置 app.debug = True # 修改代碼自動重啓 app.secret_key = '$%^^$' #設置session值須要改密匙 app.session_cookie_name = 'session' # 設置的session名稱 ,默認是session app.permanent_session_lifetime= # session生命週期,以秒計時,默認31天 # 另一種更改配置方式 app.config['DEBUG']= True # 這種方式速度更快 #app.config Flask配置 #app.defalut_config flask默認配置 if __name__ == '__main__': app.run()
# settinigs.py文件代碼 class DebugConfig(object): """線上開發環境""" DEBUG = True SECRET_KEY = "#$%^&*($#$%^&*%$#$%^&*^%$#$%" PERMANENT_SESSION_LIFETIME = 3600 SESSION_COOKIE_NAME = "I am Not Session" class TestConfig(object): """測試環境""" TESTING = True SECRET_KEY = hashlib.md5(f"{time.time()}#$%^&*($#$%^&*%$#$%^&*^%$#$%{time.time()}".encode("utf8")).hexdigest() PERMANENT_SESSION_LIFETIME = 360000 SESSION_COOKIE_NAME = "#$%^&*($#$%^&*%$#$%^&*^%$#$%" # session名字 #配置生效 1.導入配置文件 from settings import DebugConfig,TestConfig 2.環境生效 app.config.from_object(DebugConfig) # 線上環境 app.config.from_object(TestConfig) # test環境,須要的時候只須要啓用DebugConfig,TestConfig其中一條
建立藍圖bp_users.py文件,名字能夠更改瀏覽器
from flask import Blueprint bp = Blueprint('bp01', __name__,url_prefix='url前綴') # 'bp01'第一個參數是惟一標識,整個環境不能重複! url_prefix='url前綴',當存在多個藍圖url衝突時,在地址欄輸入'url前綴',就能夠訪問指定的藍圖文件 @bp.route('/user',endpoint='user') def user(): return '我是藍圖函數01'
創建關係服務器
# 在項目的app.run文件中 from app01 import bp #導入藍圖 app.register_blueprint(bp) # 註冊藍圖
訪問指定路徑
在藍圖中反向解析時,須要注意書寫格式:
url = url_for('藍圖標識.裝飾器別名')
相似於django中的中間件
@app.before_request def is_login(): """ 校驗登陸狀態 :return: """ path = request.path if path != '/login': if not session.get('is_login'): return redirect('/login') return None @app.errorhandler(404) def error(error_msg): # 形參必須添加 """ 校驗登陸狀態 :return: """ return '沒找到頁面'
基本格式
from flask import view,Flask app = Flask(__name__) class Login(views.MethodView): #繼承MethodView,使類變成視圖函數 def get(self,*args,**kwargs): pass def post(self,*args,**kwargs): pass app.add.url_rule('/login', endpoint='login', # 若是endpoint不定義的話名稱就是view_func的name,必須惟一 view_func=Login.as_view(name='loginlogin'), # name就是就是view_func的名稱 ) app.run()
setdefault() 字典的方法
dict.setdefault(key, default=None) #參數 key -- 查找的鍵值。 default -- 鍵不存在時,設置的默認鍵值。 #返回值 若是 key 在 字典中,返回對應的值。若是不在字典中,則插入 key 及設置的默認值 default,並返回 default ,default 默認值爲 None。
安裝Flask-session包
from flask import Flask, request, session from flask_session import Session #導入Session from redis import Redis # 導入redis app = Flask(__name__) app.secret_key = '$%^&*%$' # flask_session使用pickle轉化,密鑰能夠不使用 app.config['SESSION_TYPE'] = 'redis' # 設置session存放機制,,瀏覽器中存的就是session_id,session存在redis中 app.config['SESSION_REDIS'] = Redis(host='192.168.12.10', port=6379, db=10) Session(app) # 使普通sesson變成flask_session # app.session_interface #Flask利用app.session_interface 選擇session存放位置和存放機制 @app.route('/set') def sets(): session['key'] = 'QWER' return 'set' @app.route('/get') def gets(): return session.get('key') app.run()