Flask web開發 請求攔截和預處理

2022-09-16 02:24:13 字數 2776 閱讀 8211

我們在開發web應用時,往往會需要對所有的url請求進行攔截,做些預處理,比如許可權處理、日誌等統一處理。

本文介紹一下flask中的處理機制。我們通過乙個簡單的例子來說明。

1、編寫乙個簡單應用 run.py,內容如下

from flask import

flask

from flask import

render_template,request,redirect

)def

myredirect():

ifnot request.path=='/'

: username = request.args.get('

username')

ifnot

username:

return redirect('/'

)

else

:

print

'success''

/')def

hello_world():

return

'hello world!''

/name')

defhello_name():

return

'this is name\n''

/show')

defshow():

return

'this is show \n'if

__name__ == '

__main__':

'0.0.0.0

',80)

這個標識,flask會將所有的請求交給上面的myredirect()方法處理。

在這個方法中,判斷請求路徑是否是  / ,如果是不做任何處理,直接轉到 / 對應的方法處理。

如果不是 / ,則檢查url是否帶username查詢引數, 如果帶了,則只是列印下資訊,還是交給該url具體的路徑處理;否則跳轉到 / 請求。

2、完善前面的案例

有了前面這個基礎,我們可以完善下前面文章《flask web開發 處理session》中的遺留問題。

from flask import

flask

from flask import

render_template, redirect,url_for

from flask import

request,session

)def

before_action():

print

request.path

if request.path.find('

.ico

')==-1:

ifnot request.path=='

/login':

ifnot

'username'in

session:

session[

'newurl

']=request.path

return redirect(url_for('

login'))

'/login

', methods=['

post

','get'])

deflogin():

error =none

if request.method == '

post':

if request.form['

username

']=='

admin':

session[

'username

'] = request.form['

username']

if'newurl'in

session:

newurl = session['

newurl']

session.pop(

'newurl

', none)

return

redirect(newurl)

else

:

return redirect('

/home')

else

: error = '

invalid username/password

'return render_template('

login.html

', error=error)

'/home')

defhome():

return render_template('

home.html

',username=session['

username'])

'/test')

deftest():

return render_template('

test.html')

a0zr98j/3yx r~xhh!jmn]lwx/,?rt'if

__name__ == '

__main__':

'0.0.0.0

',80)

上面**增加了乙個攔截方法。

該方法先判斷請求是否是普通請求(等不做處理,這裡是示例,直接寫死了只對ico檔案不處理,實際有問題)。

如果是普通請求,判斷是否是login 請求。

如果不是login 請求,再判斷session中是否已經有 username(也就是是否已經登入),如果沒有則跳轉到login頁面。

Flask web開發 處理Ajax請求

本文介紹如何處理ajax請求,一 處理ajax的post請求 舉例一 js 舉例如下 var id obj.parentnode.parentnode.id post delitem id,function data json 對應的flask 舉例如下 delitem methods post d...

Flask web開發流程

flask專案開發流程 搭建開發環境 pipenv pip pipfile virtualenv 安裝pip和pipenv 建立虛擬環境 pipenv install 為當前專案建立虛擬環境 pipenv shell 啟用虛擬環境 pipenv run python hello.py 執行程式 非虛...

Flask web開發之路三

今天寫乙個url傳參 反轉url 頁面跳轉和重定向 from flask import flask def hello world return hello world article defarticle id return 您請求的引數是 s id if name main 首先,正轉是指由ur...