python-Web-flask-路由和視圖

1 路由和視圖:

簡介:django

Flask框架包含兩個核心:Werkzeug工具箱,Jinja2模板引擎json

flask: 提供基本功能,屬於輕量級flask

django: 提供相對完整功能,重量級服務器

搭建虛擬環境cookie

 

Helloworld :app

#1.導入Flask類

from flask import Flask

#2.建立Flask對象接收一個參數__name__,它會指向程序所在的包

app = Flask(__name__)

#3.裝飾器的做用是將路由映射到視圖函數index

@app.route('/')

def index():

    return 'Hello World'

#4.Flask應用程序實例的run方法,啓動WEB服務器

if __name__ == '__main__':

    app.run()

 

相關配置參數:

初始化參數:框架

app = Flask(__name__)

static_url_path靜態文件訪問路徑,默認爲:/ + static

static_folder靜態文件存儲的文件夾,默認爲 static

template_folder模板文件存儲的文件夾,默認爲 templates

 

加載參數:函數

from flask import Flask

app = Flask(__name__)

# 配置對象,裏面定義須要給 APP 添加的一系列配置

class Config(object):

    DEBUG = True

app.config.from_object(Config)# 從配置對象中加載配置

#app.config.from_pyfile('config.ini')# 從配置文件中加載配置

#app.config.from_envvar('FLASKCONFIG')# 加載指定環境變量名稱所對應的相關配置

@app.route('/')

def index():

    return 'Hello World'

if __name__ == '__main__':

    app.run(host="0.0.0.0", port=5000, debug = True)

 

路由:工具

設置路由,路徑,參數,請求方式post

# 路由傳遞參數,整數,get或post方式

@app.route('/user/<int:user_id>',methods=['GET', 'POST'])

def user_info(user_id):

    return 'the num is %d' % user_id

 

響應:

# 生成json數據響應體

@app.route('/demo4')

def demo4():

    json_dict = {

        "user_id": 10,

        "user_name": "laowang"

    }

return jsonify(json_dict)

# 路由傳遞參數string

@app.route('/user/<int:user_id>')

def user_info(user_id):

    return 'hello %d' % user_id

# 重定向redirect(url_for(‘’,參))

@app.route('/demo5')

def demo5():

    # 使用 url_for 生成指定視圖函數所對應的 url

return redirect(url_for('user_info', user_id=100))

# 渲染響應render_response(‘’,name=name)

 

轉換器:

.系統自帶轉換器

DEFAULT_CONVERTERS = {

    'default':          UnicodeConverter,

    'string':           UnicodeConverter,

    'any':              AnyConverter,

    'path':             PathConverter,

    'int':              IntegerConverter,

    'float':            FloatConverter,

    'uuid':             UUIDConverter,

}

.自定義轉換器

from flask import Flas

k#導入基類轉換器

from werkzeug.routing import BaseConverter

app = Flask(__name__)

# 1.自定義類,繼承自BaseConverter

class MyRegexConverter(BaseConverter):

    # 2.編寫初始化方法, init方法, 接收兩個參數, url_map, regex, 並初始化父類空間和子類空間

    def __init__(self,url_map,regex):

        super(MyRegexConverter, self).__init__(url_map)

        self.regex = regex

# 3.將自定義轉換器類,添加到默認的轉換列表中

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

#使用自定義轉換器#接收3位整數

@app.route('/<re("\d{3}"):num>')

def hello_world(num):

    print("num = %s"%num)

    return "the num is %s"%num

#接收一個手機號

@app.route('/<re("1[345678]\d{9}"):mobile>')

def get_phone_number(mobile):

    return "the mobile is %s"%mobile

if __name__ == '__main__':

    app.run()

 

異常捕獲:

from flask import Flask,abort

app = Flask(__name__)

@app.route('/game/<int:age>')

def play_game(age):

    #異常拋出

    abort(404)

    return "helloworld"

#異常捕獲

@app.errorhandler(404)

def page_not_found(e):

    print(e)

    return "找不到服務器資源,服務器搬家了"

if __name__ == '__main__':

    app.run()

 

鉤子:

請求鉤子是經過裝飾器的形式實現,Flask支持以下四種請求鉤子:

# 在第一次請求以前調用,能夠在此方法內部作一些初始化操做

@app.before_first_request

def before_first_request():

    print("before_first_request")

# 在每次請求以前調用,直接return以後那麼就不會執行視圖函數

@app.before_request

def before_request():

    print("before_request")

# 在執行完視圖函數以後會調用,而且會把視圖函數所生成的響應傳入,能夠在此方法中對響應作最後一步統一的處理

@app.after_request

def after_request(response):

    print("after_request")

    response.headers["Content-Type"] = "application/json"

    return response

# 請每一次請求以後都會調用,會接受一個參數,參數是服務器出現的錯誤信息

@app.teardown_request

def teardown_request(e):

    print("teardown_request")

 

Request:

屬性

說明

類型

data

記錄請求的數據,並轉換爲字符串

*

form

記錄請求中的表單數據

MultiDict

args

記錄請求中的查詢參數

MultiDict

cookies

記錄請求中的cookie信息

Dict

headers

記錄請求中的報文頭

EnvironHeaders

method

記錄請求使用的HTTP方法

GET/POST

url

記錄請求的URL地址

string

files

記錄請求上傳的文件

*

相關文章
相關標籤/搜索