python3+flask 開發web(一)
發表時(shí)間:2018-10-25
發布人(rén):融晨科技
浏覽次數:74
1、環境準備
1)安裝Python:https://www.python.org/
2)安裝python ide,pycharm:https://www.jetbrains.com/pycharm/
3)安裝flask:安裝好了(le/liǎo)python,電腦就(jiù)自動安裝了(le/liǎo)pip,在(zài)cmd中執行命令:pip install flask
2、寫代碼:
1)helloword:
from flask import Flask
app = Flask(__name__) #創建一個(gè)wsgi應用
@app.route('/') #添加路由:根
def hello_world():
return 'Hello World!' #輸出(chū)一個(gè)字符串
if __name__ == '__main__':
app.run(debug=True) #啓動app的(de)調試模式
?
執行後:
在(zài)浏覽器的(de)地(dì / de)址欄打開:http://127.0.0.1:50000/這(zhè)個(gè)url,顯示如下:
本例中app是(shì)Flask類的(de)一個(gè)實例,在(zài)實例化過程中傳遞了(le/liǎo)一個(gè)參數name,Flask通過這(zhè)個(gè)參數識别app是(shì)模塊級别還是(shì)包級别的(de)。實際上(shàng)app符合相關接口,它是(shì)一個(gè)WSGI應用。
有了(le/liǎo)app對象以(yǐ)後,它就(jiù)成爲(wéi / wèi)了(le/liǎo)一個(gè)中心節點,把所有的(de)URL規則、視圖函數、模闆配置等連接起來(lái),最終形成一個(gè)Web應用。
使用@app.route修飾函數創建一個(gè)URL規則,直接在(zài)被修飾的(de)函數中寫出(chū)處理該URL要(yào / yāo)做的(de)事情。使用過PHP、ASP的(de)童鞋可能剛開始不(bù)習慣這(zhè)種URL命名規則,因爲(wéi / wèi)最早使用腳本開發Web應用的(de)時(shí)候,一個(gè)文件就(jiù)會對應一個(gè)URL。
2)字符串
?
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello_word():
return '<h1>Hello Word!</h1>'
if __name__=='__main__':
app.run(debug=True)
?
執行結果:
3)json
?
?
?
from flask import Flask
import json
app=Flask(__name__)
@app.route('/json')
def do_json():
hello = {"name":"stranger", "say":"hello"}
return json.dumps(hello)
if __name__=='__main__':
app.run(debug=True)
?
?
?
執行結果;
4)http狀态碼:
?
?
?
?
from flask import Flask
import json
app=Flask(__name__)
@app.route('/status_500')
def status_500():
return "hello", 500
if __name__=='__main__':
app.run(debug=True)
?
?
?
?
執行結果:
5)http頭:
from flask import Flask
from flask import make_response
app=Flask(__name__)
@app.route('/set_header')
def set_header():
resp=make_response('<h1>This document has a modified header!</h1>')
resp.headers['X-Something']='A value'
resp.headers['Server']='My special http server'
return resp
if __name__=='__main__':
app.run(debug=True)
?
?
?
?
?
執行結果:
6)cookie:
什麽是(shì)cookie:
什麽是(shì)cookie?如果單單從數據結構的(de)角度來(lái)說(shuō),它可以(yǐ)被理解成用來(lái)保存數據的(de)一個(gè)dictionary,由一組組鍵值對組成.如果從作用上(shàng)來(lái)說(shuō),我們知道(dào)Http協議是(shì)一種無狀态的(de)協議.什麽叫無狀态呢,就(jiù)是(shì)本次的(de)客戶端請求不(bù)會保留上(shàng)一次客戶端請求的(de)狀态,簡單點說(shuō)就(jiù)是(shì)這(zhè)樣會要(yào / yāo)求我們每次在(zài)浏覽器中點開一個(gè)網站的(de)鏈接都會輸一次賬戶和(hé / huò)密碼.cookie就(jiù)是(shì)用來(lái)解決這(zhè)個(gè)問題的(de).
爲(wéi / wèi)了(le/liǎo)解決上(shàng)述問題,我們第一次登錄web服務器,服務端就(jiù)會在(zài)它的(de)響應中的(de)Set-Cookie字段中發送一些鍵值對,這(zhè)就(jiù)包括一個(gè)Session ID以(yǐ)及其他(tā)一些信息(也(yě)包括我們自定義的(de)cookie中的(de)鍵值對),并告訴客戶端在(zài)本地(dì / de)緩存這(zhè)個(gè)cookie.然後客戶端以(yǐ)後進行鏈接時(shí)每次都會發送這(zhè)個(gè)Session ID,服務器一看是(shì)哪個(gè)Session ID就(jiù)知道(dào)是(shì)哪個(gè)客戶端發起的(de)鏈接了(le/liǎo),就(jiù)不(bù)會要(yào / yāo)求我們再次輸賬戶和(hé / huò)密碼驗證了(le/liǎo).
我們在(zài)flask中自定義cookie,實際上(shàng)就(jiù)是(shì)在(zài)響應Response的(de)Set-Cookie字段中增加我們自定義的(de)鍵值對.而(ér)獲取cookie,就(jiù)是(shì)通過請求Request中通過鍵獲取其對應的(de)值.
(1)設置cookie和(hé / huò)獲取cookie
from flask import Flask
from flask import make_response
import datetime
from flask import request
app=Flask(__name__)
@app.route('/set_cookie') #設置cookie
def set_cookie():
response=make_response('<h1>This document carries a cookie!</h1>')
outdate=datetime.datetime.today()+datetime.timedelta(days=30) #cookie的(de)有效時(shí)長30天
response.set_cookie('username','evancss',expires=outdate)
return response
@app.route('/get_cookie') #獲取cookie
def get_cookie():
name=request.cookies.get('username')
return name
if __name__=='__main__':
app.run(debug=True)
執行結果:
set_cookie
get_cookie
注意cookie的(de)時(shí)效性:我們在(zài)浏覽器上(shàng)設置cookie的(de)有效時(shí)長優先級要(yào / yāo)高于(yú)我們在(zài)代碼中設置的(de)
(2)删除cookie常用的(de)方法:
1可以(yǐ)通過在(zài)浏覽器中設置來(lái)清除cookie.
2使用Response的(de)set_cookie進行清除
@app.route('/del_cookie')
def del_cookie():
response=make_response('delete cookie')
response.set_cookie('username','',expires=0)
return response
3使用Response的(de) delete_cookie方法.
def del_cookie2():
response=make_response('delete cookie2')
response.delete_cookie('username')
return response
7)重定向:
?
?
?
from flask import Flask
from flask import redirect
app=Flask(__name__)
@app.route('/redir')
def redir():
return redirect('https://www.baidu.com')
if __name__=='__main__':
app.run(debug=True)
?
?
?
?
執行結果:
用fiddler抓包看看:
8)abort:
?
?
?
from flask import Flask
from flask import abort
app=Flask(__name__)
@app.route('/user/<id>')
def get_user(id):
if int(id)>10:
abort(404)
return '<h1>Hello,%s</h1>'%id
if __name__=='__main__':
app.run(debug=True)
?
?
?
?
執行結果:
id=22
id=2
遇到(dào)的(de)問題:新建項目的(de)選擇解釋器和(hé / huò)location的(de)時(shí)候注意一下
參考博文:https://blog.csdn.net/langkew/article/details/51594880