Flak框架 Flask从入门到精通
生活随笔
收集整理的這篇文章主要介紹了
Flak框架 Flask从入门到精通
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考資料
筆記資料
文章目錄
- Day1
- Flask框架簡介和快速使用
- 用戶管理系統示例
- 今日作業
- Day2
- Flask配置文件
- Flask框架之創建路由的兩種方式
- Flask框架之反向生成URL
- Flask框架之自定義路由轉換器
- Flask框架之app.route參數
- Flask框架之獲取子域名的路由
- Flask框架之視圖中添加裝飾器
- Flask框架之CBV和FBV
- Flask框架之請求和響應相關
- Flask框架之模板引擎
- session使用和源碼流程
- after_request
- Flask框架之特殊裝飾器
- Flask框架之閃現
- Flask中間件
- Flask框架之藍圖
- 擴展知識
- pipreqs 項目依賴
- 函數和方法
- Day3
- 課前復習
- threading.local學習
- Flask上下文管理之本質分析
- Flask上下文管理之請求到來處理
- Flask上下問管理之視圖調用階段
- Flask中的g到底是什么?生命周期?
- 補充:面向對象的私有字段
- Day4
- 組件的使用和原理
- 基于pymysql實現用戶登錄
- 基于數據庫連接池實現用戶登錄
- 數據庫連接池總結
- wtforms介紹以及用戶登錄示例
- wtforms用戶注冊示例
- 今日作業
- Day5
- 補充:面向對象metaclass
- wtforms實例化流程分析
- 相關面試題
- ORM框架概念
- SQLAlchemy框架快速使用
- SQLAlchemy框架組件介紹
- SQLAlchemy執行原生SQL
- SQLAlchemy創建表結構
- SQLAlchemy實現基本增刪查改
- SQLAlchemy小練習
- SQLAlchemy常用操作
- 今日作業
- Day6
- wtforms組件驗證流程
- SQLAlchemy操作補充
- 今日作業
- Day7
- flask-script組件
- 組件應用
- 創建session的兩種方式
- flask-migrate組件
- flask自定義擴展
- flask多app應用
- flask信號blinker
- before_request的區別
- 今日作業
Day1
Flask框架簡介和快速使用
# 談談對PythonWeb框架 django —— 大而全 重武器。內部提供ORM Admin Form Session 緩存 信號 CSRF。 flask —— 短小精悍 可擴展強。第三方組件豐富。 tonado —— 短小精悍+異步非阻塞。 其他-微小框架 :web.py bottole.py # WSGI django —— wsgi flask —— werkzeug # flask 查看app.run內部調用werkzeug用戶管理系統示例
# vscode 英文輸入狀態,輸入! tab鍵盤即可快速生成html文本 # jinja2 框架 # 登錄頁面中使用session # 報錯 RuntimeError: The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret. # 解決方案,要在app中加入secret_key app.secret_key = 'u2jksrls123lisr' # web調試中找到記錄的session # flask項目保存自動 app.debug = True # 詳細頁面傳遞uid web頁面查看 # 具體代碼實現 # app.py from distutils.log import info from flask import Flask ,render_template, request,redirect,sessionapp = Flask(__name__) app.secret_key = 'u2jksrls123lisr' app.debug = TrueUSER_DICT={'1':{'name':'taohy','age':18},'2':{'name':'admin','age':30},'3':{'name':'dabao','age':8} }# 登錄login頁面 @app.route('/login',methods=['GET','POST']) def login():if request.method == 'GET':return render_template('login.html')# request.args # 獲取url中 GET傳來的值# request.form # 獲取html中 POST傳過來的值user = request.form.get('user')pwd = request.form.get('pwd')if user == 'admin' and pwd =='11111':# 用戶信息放入sessionsession['user_info']= user# session['pwd_info'] = pwdreturn redirect('/index')else:return render_template('login.html',msg = '用戶名或密碼錯誤!')# 后臺管理index頁面 @app.route('/index') def index():user_info = session.get('user_info')if not user_info:return redirect('/login')else:# return '歡迎'+user_info+'登錄后臺管理系統'return render_template('index.html',user_dict = USER_DICT) # 將user_dict傳遞到html# 退出系統 刪除session @app.route('/logout') def logout():del session['user_info']return redirect('/login')# 詳細信息頁面 @app.route('/detail') def detail():user_info = session.get('user_info')if not user_info:return redirect('/login')else:# 詳細頁面# 獲取url值uid = request.args.get('uid')info = USER_DICT.get(uid)return render_template('detail.html',info = info) # 將info列表傳遞給htmlif __name__ == '__main__':app.run() <!--templates/login.html--> <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>用戶登錄</title> </head> <body><h1>登錄</h1><form method="post" ><input type="text" name="user" ><input type="password" name ="pwd"><input type="submit" value="提交" >{{msg}}</form> </body> </html> <!--templates/index.html--> <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>index頁面</title> </head> <body><ul><!-- 將python傳遞過來的user_dict解析 -->{% for k,v in user_dict.items() %}<!-- url傳值 --><li>用戶:{{v['name']}} <a href="/detail?uid={{k}}">查看詳情</a></li>{% endfor %}</ul> </body> </html> <!--templates/detail.html--> <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>詳細信息</title> </head> <body><h1>詳細信息</h1><!-- 將python后臺info列表傳遞到前臺解析出來 --><div>{{info.name}}</div> <div>{{info.age}}</div> </html>
今日作業
# Flask裝飾器 實現(位置、url起別名(不能重復)) # 類似django中間件的東西:before_request裝飾器 # 預習 上下文 from threading import local functools.wraps functools.partial 面向對象封裝 面向對象中 __setattr__ __getattr__ __delattr__Day2
# 裝飾器 # 帶參數的裝飾器 # 面向對象 封裝: 1. 將同一類方法分為一類:方法封裝到類中。 2. 將方法中共同的參數封裝到對象中:把共用值封裝到對象中。情況a b:
Flask配置文件
Flask框架之創建路由的兩種方式
# 一般都用方式一Flask框架之反向生成URL
Flask框架之自定義路由轉換器
Flask框架之app.route參數
Flask框架之獲取子域名的路由
Flask框架之視圖中添加裝飾器
Flask框架之CBV和FBV
常用FBV
Flask框架之請求和響應相關
# 請求相關 request # 響應相關Flask框架之模板引擎
# jinja2框架使用 # app.py from distutils.log import info from multiprocessing import context from flask import Flask ,render_template, request,redirect,session,Markupapp = Flask(__name__) app.secret_key = 'u2jksrls123lisr' app.debug = TrueUSER_DICT={'1':{'name':'taohy','age':18},'2':{'name':'admin','age':30},'3':{'name':'dabao','age':8} }# 登錄login頁面 @app.route('/login',methods=['GET','POST']) def login():if request.method == 'GET':return render_template('login.html')# request.args # 獲取url中 GET傳來的值# request.form # 獲取html中 POST傳過來的值user = request.form.get('user')pwd = request.form.get('pwd')if user == 'admin' and pwd =='11111':# 用戶信息放入sessionsession['user_info']= user# session['pwd_info'] = pwdreturn redirect('/index')else:return render_template('login.html',msg = '用戶名或密碼錯誤!')# 模板全局函數 @app.template_global() def g_add(a1,a2):return a1+a2# 自定義函數 def create_input_one(value):# 方法一 html加safe安全顯示inputreturn "<input value='%s' />" %valuedef create_input_two(value):# 方法二 py引入markupsafereturn Markup("<input value='%s' />" %value)# 后臺管理index頁面 @app.route('/index') def index():user_info = session.get('user_info')if not user_info:return redirect('/login')else:# return '歡迎'+user_info+'登錄后臺管理系統'stra = "我是一個字符串"lista = [1,2,3,4]# **字典多個值context={'k1':'我是context的k1','k2':['k2_1','k2_2','k3_2'],'k3':{'k3_name':'k3','k3_age':20},'k4':lambda x:x+1, # 傳遞函數'k5':create_input_one,'k6':create_input_two, # 模板內自定義函數'k7':g_add # 全局模板自定義函數}return render_template('index.html',stra=stra,user_dict = USER_DICT,lista=lista,**context) # 將user_dict傳遞到html# 退出系統 刪除session @app.route('/logout') def logout():del session['user_info']return redirect('/login')# 詳細信息頁面 @app.route('/detail') def detail():user_info = session.get('user_info')if not user_info:return redirect('/login')else:# 詳細頁面# 獲取url值uid = request.args.get('uid')info = USER_DICT.get(uid)return render_template('detail.html',info = info) # 將info列表傳遞給htmlif __name__ == '__main__':app.run() # index.html <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>index頁面</title> </head><body><p>jinja2框架</p><p>傳遞字符串:</p><div>{{stra}}</div><p>傳遞字典——遍歷字典:</p><ul><!-- 將python傳遞過來的user_dict解析 -->{% for k,v in user_dict.items() %}<!-- url傳值 --><li>用戶:{{v['name']}} <a href="/detail?uid={{k}}">查看詳情</a></li>{% endfor %}</ul><p>傳遞列表——遍歷列表:</p>{% for listaa in lista %}<div>{{listaa}}</div>{% endfor %}<p>傳遞字典——**多個值:</p><div>{{k1}}</div><div>{{k2[0]}} {{k2[1]}} {{k2[3]}}</div><!--k3.get('dontkonw','dontkonw') 不存在key:dontkonw 默認值給dontkonw--><div>{{k3['k3_name']}} {{k3['k3_age']}} {{k3.get('dontkonw','dontkonw')}} </div><!--k4函數 給參數執行--><div>{{k4(20)}}</div><!--方法一 k5自定義函數 新增input html新增安全顯示safe--><div>{{k5(20) |safe}} </div><!--方法二 k6自定義函數 新增input py引入Markup--><div>{{k6(20)}} </div><p>全局模板函數</p><div>{{k7(1,2)}}</div> </body></html> # layout 使用
session使用和源碼流程
after_request
Flask框架之特殊裝飾器
# 第一次訪問 # 定制404頁面 # 模板里用到的Flask框架之閃現
# 經常用的數據存session,不經常用的存flash
Flask中間件
Flask框架之藍圖
# 常用目錄框架 # 目錄結構劃分 # 某一類url加上前綴 # 某一類url加上before_request或者after_request # 大型項目藍圖,筆記資料里面,自行下載查看!擴展知識
pipreqs 項目依賴
# 按照依賴 pip3 install pipreqs # 生成依賴文件 requirements.txt pipreqs ./ # 安裝依賴文件 pip3 install -r requirements.txt函數和方法
類里面可以是方法,也可以是函數Day3
課前復習
threading.local學習
# threading.local 作用:為每個線程開辟一塊空間進行數據存儲。 # 問題:自己通過字典創建一個類似于threading.local的東西。 函數實現: 類實現:
Flask上下文管理之本質分析
Flask上下文管理之請求到來處理
第一階段Flask上下問管理之視圖調用階段
Flask中的g到底是什么?生命周期?
# 請求中的全局變量 # 單次執行完就銷毀了補充:面向對象的私有字段
Day4
組件的使用和原理
# session存儲方式
基于pymysql實現用戶登錄
基于數據庫連接池實現用戶登錄
# pip install DBUtils
數據庫連接池總結
wtforms介紹以及用戶登錄示例
# pip install wtfroms # python 做表單驗證wtforms用戶注冊示例
今日作業
Day5
補充:面向對象metaclass
wtforms實例化流程分析
相關面試題
ORM框架概念
SQLAlchemy框架快速使用
SQLAlchemy框架組件介紹
SQLAlchemy執行原生SQL
SQLAlchemy創建表結構
SQLAlchemy實現基本增刪查改
SQLAlchemy小練習
SQLAlchemy常用操作
今日作業
Day6
wtforms組件驗證流程
SQLAlchemy操作補充
今日作業
Day7
flask-script組件
組件應用
創建session的兩種方式
flask-migrate組件
flask自定義擴展
flask多app應用
flask信號blinker
before_request的區別
今日作業
總結
以上是生活随笔為你收集整理的Flak框架 Flask从入门到精通的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hive metastore mysql
- 下一篇: 翻页电子书/电子画册制作工具