1. 程式人生 > >Flask簡單示例1

Flask簡單示例1

Flask:用Python語言基於Werkzeug工具箱編寫的輕量級Web開發框架

Flask和Django對比:

1.Django大而全,提供一站式解決方案,MVT模式,有ORM模式、後臺站點管理等功能。

2.Flask輕巧,簡潔,可擴充套件性強(Flask最重要特點),

其核心:WSGI 工具箱採用 Werkzeug(路由模組)

                模板引擎則使用 Jinja2


#coding=utf-8

from flask import Flask, make_response, current_app, request

# 匯入Flask

from settingsimport Config

# 匯入werkzeug的路由模組, 轉換器

from werkzeug.routing import BaseConverter

# Flask接受一個引數name,引數指向程式所在模組

# __name__引數作用,是為了確認程式所在的位置

# Flask預設建立靜態路由

# 預設引數是預設字串,不能是int整值,不能傳入python模組名

app = Flask(__name__)

# 配置物件可以匯入配置檔案,config配置物件,方法from_object,引入配置檔案

app.config.from_object(Config)

# 自定義轉換器

# 正則url作用:限制訪問(不符合條件的),優化訪問

class Regex(BaseConverter):

    """Base class for all converters"""

    def __init__(self, map, *args):

        super(Regex, self).__init__(map)

        self.regex = args[0]

# 新增轉換器對映

app.url_map.converters['re'] = Regex

# 優化訪問路徑,處理請求高效

# 使用訪問物件,make_response,(響應物件)current_app,把指定的物件響應給瀏覽器

@app.route('/<re(".*"):filename>')

def demo5(filename):

    if not filename:

        filename == 'index.html'

    else:

        filename == 'html/' + filename

    resp = make_response(current_app.send_static_file(filename))

    return resp

正則

@app.route('/re/<re("[a-z]{6}"):num>')

def demo4(num):

    return 'laowang11:%s' % num

# 自定義轉換器   Regex繼承BaseConverter

class Regex(BaseConverter):

    regex = '[0-9]{4}'

# 新增轉換器的對映

app.url_map.converters['re'] = Regex

@app.route('/<re:num>')

def demo3(num):

    return 'langwang:%s' % num

# 狀態保持:因為http協議的無狀態,http使用TCP/IP協議

# web應用保持某種狀態,cookie的本質是字典

#1 設定cookie

@app.route('/setcookie')

def demo6():

    resp = make_response('set cookies success')

    resp.set_cookie('user', 'python', max_age=300)

    return resp

# 2獲取cookie,request

@app.route('/getcookie')

def demo7():

    resp = request.cookies.get('user')

    return resp

# 定義檢視

# route方法的實現是通過轉換器,

# rule類儲存的一條路由規則,

# Map儲存所有路由規則,

# MapAdapter類負責匹配集體的url和檢視

# 檢視函式不能重名,路由可以從復,動態生成引數可以通過<>

# 動態生成引數,預設的資料型別str,相容數值型,不包括浮點型

@app.route('/',methods=['POST','GET'])#請求方法post, get,

def demo():

    return 'hello world'

@app.route('/<float:name>', methods=['POST', 'GET'])

def demo2(name):

    return 'LAOWANG:%s' % name

# 啟動伺服器

# 當檔案匯入其他檔案使用時,該表示式不成立, __name__==demo,

if __name__=='__main__':

    # app.run(debug=True)開發環境debug=Ture開發區環境,程式碼有變動會自動更新,其他情況下,會記憶體洩漏

    # 檢視所有路由對映

    print app.url_map

    app.run()