flask中request中的一些方法 cookie和session的創建、刪除以及使用 上傳圖片和使用圖片 裝飾器(多個裝飾器順序) 對於manage.py的補充 項目DEBUG調試的開啓

一、對於manage.py的補充


1. 使用flask插件 完成migrate、runserver等方法


① 安裝Flask-script


Flask-script 是三方提供的flask項目,交互式插件,可以使用flask-script管理安裝項目命令

pip install flask-script

② 在文件中導入Manager,實例化方法


在這裏插入圖片描述
@manage.command 和@manager.option

腳本管理功能可以通過命令方式啓動某個函數,從而對服務器進行管理和維護,並將腳本與系統分開。flask通過flask_script擴展提供腳本管理的功能。使用時只要從該模塊中導入Manage類,然後傳入當前的Flask應用對象生成一個Manage類對象,調用該對象的run方法後,就可以接收命令行中的選項作爲函數名參數調用。作爲可以被腳本調用的函數,需要在函數前用修飾器“@manager.command”或“@manager.option”修飾,前者用來修飾無參數的函數,後者可以用來修飾有參數的函數。


二、配置pycharm啓動項目DEBUG調試的開啓


在這裏插入圖片描述

  • 老版本開啓辦法
    在這裏插入圖片描述
    本機
    在這裏插入圖片描述
  • 新版本自帶 flask server
    在這裏插入圖片描述

三、flask請求request


通常web服務請求:

  • form表單
  • url get請求
  • ajax
  • 爬蟲

1. Django中的request請求一些方法


django中:

request 請求對象 視圖中的形參
request.POST 獲取post請求參數
request.GET 獲取get請求參數
request.COOKIES 獲取cookie
request.META request.META 是一個Python字典,包含了所有本次HTTP請求的Header信息,比如用戶IP地址和用戶Agent(通常是瀏覽器的名稱和版本號)。
request.body 主要用來接收前端傳遞給後端的json字符串中的數據的(請求體中的數據的);前端不能使用GET方式提交數據,而是用POST方式進行提交。

2. Flask中的request請求一些方法


要導包

from flask import request
request 作用
request.form 獲取post請求的 從表單請求中獲取
request.args 獲取get請求的 從url中獲取
request.cookies 獲取cookie
request.files 請求攜帶的文件 如圖像
request.method 請求的方式
request.url 請求的路由
request.headers 請求的頭

四、request獲取圖片的方法


flask中沒有ImageField方法,只能用String代替。
此時存在數據庫的就是字符串:圖片的名字

  • 從request.files中獲取圖片名字
 photo = request.files.get("photo")
 photo_name = photo.filename
當前文件所在的目錄
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
如同Django中用static代替絕對路徑
STATIC_PATH = os.path.join(BASE_DIR,"static")
static中圖片的路徑
photo_path = os.path.join("img",photo_name)
文件路徑
path = os.path.join(STATIC_PATH,photo_path)
圖片本身保存文件路徑
photo.save(path)
保存圖片
user.photo = photo_path

在這裏插入圖片描述
在這裏插入圖片描述
使用圖片
在這裏插入圖片描述

  • request.files中的屬性
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 獲取除了__的屬性
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 一些屬性的作用
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

五、COOKIE 和 session的區別


相同點:都是一種會話機制

不同點:

  • Cookie
    • 優點:成本低,能夠解決瀏覽器訪問無狀態的問題
    • 缺點:安全性低,cookie 下發到用戶,放在用戶本地
  • session
    • 優點:解決了cookie安全性的問題,
    • 缺點:成本高,需要放在服務器上面,通常放在數據庫中,flask放在內存中

六、Cookie的操作


1. 設置cookie


response = redirect("//")
response.set_cookie("鍵",值)

在這裏插入圖片描述


2. 獲取cookie


    cookie = request.cookies.get("user_id")
    print (cookie)

3. 刪除cookie


@app.route("/logout/",methods=["get","post"])
def logout():
    rep = redirect("/login/")
    rep.delete_cookie("email")
    rep.delete_cookie("user_id")
    return rep

七、session的操作


flask使用session,session默認存在內存中的,需要使用插件才能夠將存儲在數據庫中

django中settings.py 中有secretkey session_id session內容

flask中沒有,需要配置

session的使用需要配置

  • 第一種
    在這裏插入圖片描述
  • 第二種
    在這裏插入圖片描述

1. 設置session


from flask import session
session["key"] = "value"

2. 獲取session


在這裏插入圖片描述


3. 刪除session


  • 兩種方法
    在這裏插入圖片描述

八、裝飾器


1. flask中裝飾器


flask 中是由裝飾器寫路由,登錄裝飾器涉及兩個裝飾器的使用

  • 裝飾器的順序
    在這裏插入圖片描述
  • 裝飾器返回函數的名字(函數名重複)
    解決辦法
    導包:import functools
    在這裏插入圖片描述

2. 多個裝飾器的順序


在這裏插入圖片描述
在這裏插入圖片描述
函數執行順序由上而下,一開始兩個函數都不執行,但每個函數都會分配一個內存塊;
直到遇到第一個裝飾器,因爲下面還有一個裝飾器,因此進入第二個裝飾器,
一開始index作爲一個函數單獨在內存中分配一個內存塊,第二個裝飾器相當於index=loginouter(index),
將index當做參數傳入loginouter中的函數,inner中相當於是一個index函數;
因此打印“我是登錄驗證裝飾器”,遇到函數inner沒調用不打印,
通過return inner返回傳入的參數index即下面的index函數。
然後再走第一個裝飾器,打印“我是flask裝飾器”,相同的,
將下面的裝飾器返回的函數作爲一個整體傳入flask_url內的函數體,並將函數體返回;
此時走到下面的實例化函數,函數體在flask_url內。因此,打印“url”,
func(*args,**kwargs)函數調用函數體,打印“驗證”,此時func()調用index函數,打印“index”。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章