當我們新建乙個flask專案的時候,預設就會有乙個hello_world
函式,如下面這樣
'/')
defhello_world()
:return
'hello world'
這就是flask中url與函式的對映。
'/article_detail//'
)def
article_detail
(article_id)
:return
"你檢視到文章id 為 %s"
% article_id
然後啟動專案,在瀏覽器中輸入127.0.0.1:5000/article_detail/3/
等相似 的url,就能夠檢視到相應的效果了。
上面的例子中雖然我們能夠將引數通過url傳入函式檢視中,但是我們並不能對url做型別限制,比如我們想要的article_id
必須是乙個int
資料,當使用者傳入的引數不是int型的資料的時候,那麼他就訪問不到我們這個函式檢視.出現404頁面.那麼flask中怎樣實現這樣這個需求呢?
在flask中,我們是可以對url指定型別的。
'/article_detail//'
)def
article_detail
(article_id)
:return
"你檢視到文章id 為 %s"
% article_id
這樣,我們就對傳入的引數做了型別限制。只需要引數前面寫上我們的型別就可以了.
在flask中,除了支援int型別外,還支援以下型別:
'///'
)def
detail
(url_path,id)
:if url_path ==
'blog'
:return
'blog detail is '
+str(id
)else
:return
'article detail is '
+str(id
)這樣,我們在瀏覽器中輸入127.0.0.1:5000/blog/3/
或127.0.0.1:5000/article/3/
都能夠訪問到這個檢視,那麼我們怎麼知道當前是以哪個url訪問的呢,我們可以通過:
後面我們定義的url_path
引數來接受這個值,然後我們在檢視中也要寫入這個引數。然後我們就能拿到這個值了.
url中以查詢字元竄的方式傳遞引數(get請求)
有些時候,我們並不需要向上面那樣傳遞引數,通過?***=***
這樣的形式傳遞引數。
那麼在flask中,我們怎樣得到這種引數的值呢?
from flask import request
'/search/'
)def
search()
: name = request.args.get(
'name'
)return
"查詢字串傳入引數 %s"
% name
比如在上面的檢視函式中,我想傳入name=***,以查詢字元竄的方式(get請求),那麼我們直接在瀏覽器中輸入127.0.0.1:5000/search/?name=***
,然後我們在函式檢視中通過request.args.get()
方法就能夠拿到這個值了。
如果我們url中沒有傳入name
這個引數,那麼我們的程式也不會報錯,只會得到乙個none
,並不會影響我們**的執行。
在上面的**中,都是通過在瀏覽器中輸入url,從而找到我們的檢視函式。那麼我們可不可以反過來呢,知道檢視函式,從而得到相應的url。
這個時候我們就需要使用url_for了,首先我們的先導入。
from flask import url_for
'/url_for/'
)def
url_for_demo()
:return
'url_for_demo'
'/index/'
)def
index()
:# 函式的名字
return url_for(
'url_for_demo'
)
url_for
中引數為函式的名字,如果傳入的函式不存在就會報錯。讓我們在瀏覽器中輸入127.0.0.1:5000/index/
的時候,我們就能夠看到url_for_demo
這個函式對應的url了。沒有引數的url學會了,那麼如果url中攜帶引數怎麼辦?
在url_for
這個函式中,我們也是可以傳入關鍵字引數
的,只需要和url中的引數對應上就好了。
'/article//'
)def
article_detail
(article_id)
:return
"article id is "
+str
(article_id)
'/index/'
)def
index()
:# 注意 這裡的關鍵字引數的key不是隨便取的,必須的和該函式對應的url中引數名一樣
url = url_for(
'article_detail'
,article_id=2)
return url
這樣,我們也能在url_for
中傳入url的引數了
那麼如果我們在url_for
中傳入url中不存在的關鍵字引數,會怎麼樣呢?
'/article//'
)def
article_detail
(article_id)
:return
"article id is "
+str
(article_id)
'/index/'
)def
index()
:# 注意 這裡的關鍵字引數的key不是隨便取的,必須的和該函式對應的url中引數名一樣
url = url_for(
'article_detail'
,article_id=
2,name=
'***'
)return url
當我們訪問這個url的時候,就會返回這樣的乙個url:/article/2/?name=***
也就是說,當我們傳入url中沒有的關鍵之引數,url_for
就會以查詢字元竄的方式給我們新增到url上。
那麼我們的到函式對應的url有什麼用呢?
url_for一般是和重定向一起使用,一般不會單獨使用,所以接下來我們來講重定向。
重定向分為永久性重定向與暫時性重定向
在flask中,使用重定向需要使用到direct
這個函式.
我們通過乙個小例子來說明重定向的使用。
需求:當我們訪問個人中心的時候,如果沒有登陸,就需要跳轉至登陸頁面,這裡我們假設在url中傳入了name引數,就認為是登陸了。**如下
from flask import redirect,url_for
'/login/'
)def
login()
:return
'login'
'/profile/'
)def
profile()
: name = request.args.get(
'name'
)if name:
return
'profile 頁面'
else
:return redirect( url_for(
'login'
))
上面的**就實現了我們的需求。
這個時候可能有人會問,在redirect
函式中,我們也可以不使用url_for
,直接構造手動構造url啊,也不是特別麻煩的,例如這樣。return redirect('login')
,這樣,我也能直接跳轉至login頁面啊。
這裡就大概說一下使用url_for
的好處吧:
當我們的url中擁有特殊字元的時候,如』/』,如果我們直接手動構造這個引數的話,那麼就可能會出現歧義了,這個』/『是當做url中的』/『來識別呢還是當做乙個普通的字元』/『來識別呢,所以可能就會出現頁面找不到的情況,而使用url_for
的話,url_for
就會將』/'編碼,然後我們使用的時候優惠解碼回來,所以就不會出翔上面那種狀況。
# 只允許post方法
'/post_demo/'
,methods=
['post'])
defpost_demo()
:return
'post'
# 預設的就是這種情況,所以當方法為get請求是,我們一般都省略不寫
'/get_demo/'
,methods=
['get'])
defget_demo()
:return
'get'
# get,post方法都允許
'/all_demo/'
,methods=
['post'
,'get'])
defall_demo()
:return
'all'
注意: 重定向 Linux重定向用法詳解
相信大家平時都會有需要複製貼上資料的時候,如果是開啟檔案進行複製貼上,就不可避免的需要較多的滑鼠與鍵盤的操作,就會比較繁瑣。那麼有沒有可以省掉這些繁瑣操作的複製貼上的方法呢?答案是肯定的,那就是重定向。重定向是一種高效的方法,無需大量的滑鼠與鍵盤操作就可以完成資料的轉移。重定向可以分為輸入重定向以及...
linux重定向詳解
理論 0 一般代表的就是stdin fileno 標準輸入 1 一般代表的就是stdout fileno 標準輸出 2 一般代表的就是stderr fileno 標準錯誤 0 表示鍵盤輸入 1表示螢幕輸出 2表示螢幕錯誤輸出 例項 command out.file 2 1 例項解釋 command ...
Linux中重定向 追加重定向與輸入重定向
簡單介紹一下重定向 追加重定向與輸入重定向,輸入追加重定向的用法 重定向 我們可以將想要輸出的內容通過重定向新增到某個檔案中 ps 將hello寫入到當前資料夾下的a.txt檔案中,然後檢視a.txt檔案內容 追加重定向 追加重定向和重定向大致相同,不同點是追加重定向在檔案的基礎上繼續新增內容 ps...