python3+flask 開發web(一) - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 網站建設 >

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

相關案例查看更多