文章目錄
一、對於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”。