日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flak框架 Flask从入门到精通

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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


# login 除了登錄頁面,其他頁面執行之前,都要去判斷是否登錄

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的東西。 函數實現:

類實現:



自定義Local思路 自定義Local對象(基于函數) 自定義Local對象(基于面向對象)

Flask上下文管理之本質分析

Flask上下文管理之請求到來處理

第一階段

Flask上下問管理之視圖調用階段


Flask中的g到底是什么?生命周期?

# 請求中的全局變量 # 單次執行完就銷毀了

補充:面向對象的私有字段

Day4


組件的使用和原理

# session存儲方式


# 原生的session的bug解決方法


基于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从入门到精通的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。