1.flask 簡單應用
1.FLASK簡單的示例
test.py #!/usr/bin/env python # -*- coding:utf-8 -*- from flask import Flask #匯入Flask app = Flask(__name__) #建立一個Flask例項 #設定路由,即url @app.route('/') @app.route('/index') #url對應的函式 def index(): return "hello world" #這個不是作為模組匯入的時候執行,比如這個檔案為aa.py,當python aa.py就執行這個程式碼。如果是在其他檔案import的話,不執行這個檔案。(這個屬於python的基礎知識) if __name__ == '__main__': # 設定監聽地址 埠 app.run(host="0.0.0.0",port=50000) python test.py * Running on http://0.0.0.0:50000/ (Press CTRL+C to quit) 測試: curl 10.227.101.154:50000/ hello world
2.FLASK中的請求應用示例
#!/usr/bin/env python import json #匯入Flask app = Flask(__name__) #建立一個Flask例項 #設定路由,即url @app.route('/') @app.route('/index') #url對應的函式 def index(): return "hello world" @app.route('/login',methods=['POST', 'GET']) def login(): error=None if request.method == 'POST': req = json.loads(request.data) if 'username' in req: return "name: " + req['username'] elif request.method == "GET": return "it is get" #這個不是作為模組匯入的時候執行,比如這個檔案為aa.py,當python aa.py就執行這個程式碼。如果 是在其他檔案import的話,不執行這個檔案。(這個屬於python的基礎知識) if __name__ == '__main__': app.run(host="0.0.0.0",port=50000)
1.路由
使用路線()裝飾器把函式繫結到URL
例:
@app.route('/')
def index():
return 'Index Page'
2.變數規則
可以在URL中新增變數,並設定引數型別
@app.route('/user/<username>') def show_user_profile(username): # show the user profile for that user return 'User %s' % username @app.route('/post/<int:post_id>') def show_post(post_id): # show the post with the given id, the id is an integer return 'Post %d' % post_id @app.route('/path/<path:subpath>') def show_subpath(subpath): # show the subpath after /path/ return 'Subpath %s' % subpath
3. URL後加/和不加的區別
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'The about page'
project()可以被/ projects和/ projects /訪問
about()只能被/ about訪問,/ about /訪問會報404錯誤
4.http方法
預設情況下路由只響應GET請求,可以使用路線()裝飾器的方法引數來處理HTTP方法
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return “post”
else:
return "get"
5.請求物件
6.檔案上傳
使用請求的檔案屬性
@ app.route('/ upload',methods = ['GET','POST'])
def upload_file():
if request.method =='POST':if'file
'不在request.files中:
return“upload”失敗“
f = request.files ['file']
f.save('/ uploaded_file.json')
返回”上傳成功“
如果想要知道檔案上傳之前其在客戶端系統中的名稱,可以使用 filename
屬性。但是請牢記這個值是可以偽造的,永遠不要信任這個值。如果想要把客戶端的檔名作為伺服器上的檔名,可以通過Werkzeug提供的 secure_filename()
函式:
from werkzeug.utils import secure_filename
f = request.files['file']
f.save('/' + secure_filename(f.filename))
7.cookie
什麼是餅乾嗎?如果單單從資料結構的角度來說,它可以被理解成用來儲存資料的一個字典,由一組組鍵值對組成。如果從作用上來說,我們知道的Http協議是一種無狀態的協議。什麼叫無狀態呢,就是本次的客戶端請求不會保留上一次客戶端請求的狀態,簡單點說就是這樣會要求我們每次在瀏覽器中點開一個網站的連結都會輸一次賬戶和密碼.cookie就是用來解決這個問題的。
為了解決上述問題,我們第一次登入web伺服器,服務端就會在它的響應中的Set-Cookie欄位中傳送一些鍵值對,這就包括一個Session ID以及其他一些資訊(也包括我們自定義的cookie中的鍵值對),並告訴客戶端在本地快取這個cookie.然後客戶端以後進行連結時每次都會發送這個Session ID,伺服器一看是哪個Session ID就知道是哪個客戶端發起的連結了,就不會要求我們再次輸賬戶和密碼驗證了.
設定cookie
@app.route('/cookie')
def cookie_test():
response=make_response(“set cookies”');
response.set_cookie('Name','Hyman')
return response
設定cookie時常
outdate=datetime.datetime.today() + datetime.timedelta(days=30)
response.set_cookie('Name','Hyman',expires=outdate)
獲取cookie
@app.route('/get_cookie')
def get_cookie():
name=request.cookies.get('Name')
return name
刪除cookie
共有三種方法可以刪除一個cookie:
(1) 可以通過在瀏覽器中設定來清除cookie.
(2) 使用Response的set_cookie進行清除
@app.route('/del_cookie')
def del_cookie():
response=make_response('delete cookie')
response.set_cookie('Name','',expires=0)
return response
(3)使用Response的 delete_cookie方法.
@app.route('/del_cookie2')
def del_cookie2():
response=make_response('delete cookie2')
response.delete_cookie('Name')
return response
8.重定向
@app.route("/index.html", methods=["GET"])
def login_redirect():
return redirect("https://soc.sangfor.com.cn/")
9.session
設定session
from flask import session
app.secret_key = 'fkdjsafjdkfdlkjfadskjfadskljdsfklj'
#session
#設定session
@app.route('/set_session')
def set_session():
session['uid'] = '1223'
return 'set session'
設定sesison存活時間
#設定session 設定過期時間
@app.route('/set_session/')
def set_session():
#開啟session持久化儲存
session.permanent = True
#設定session存活時間為1分鐘 如果不給當期的存活時間 則為1個月
app.permanent_session_lifetime = timedelta(seconds=60)
session['uid'] = '1'
return '設定session'
獲取session
#獲取會話
@ app.route('/ get_session /')
def get_session():
返回'uid的值為{}'。format(session.get('uid'))
刪除會話
#刪除session
@ app.route('/ del_session /')
def del_session():
#刪除key為uid的會話值
#session.pop('uid')
#刪除所有會話
session.clear()
返回'刪除成功'