flask學習

安裝環境:css

centos 6.3html

python2.6python

 

使用easy_install安裝方式:flask

[root@localhost ~]# easy_install flaskcentos

 

簡單的hello瀏覽器

 

from flask import Flask安全

app = Flask(__name__)服務器

@app.route("/")cookie

def hello():app

        return "Hello World!"

if __name__ == "__main__":

        app.run()

運行:

[root@localhost flask]# python hello.py

 * Running on http://127.0.0.1:5000/

 

在瀏覽器中打開 http://127.0.0.1:5000/ ,就 能夠看到問候頁面了。

from flask import Flask

導入Flask

app = Flask(__name__)

實例化對象app,參數爲應用模塊或包的名稱,這裏__name__指的是__main__主程序。這個參數是必需的,這樣 Flask 就能夠知道在哪裏找

到模板和靜態文件等東西。

@app.route("/")

使用route()裝飾器告訴Flask觸發函數的URL

def hello():

        return "Hello World!"

定義的函數,用來生成相關聯的URL,並返回須要在用戶瀏覽器中顯示的信息。

app.run()

運行服務器應用,運行後默認只有本地能夠訪問,如需讓其餘鏈接,能夠指定host,如:app.run(host='0.0.0.0')

默認使用的端口是:5000,可使用自定義的端口:app.run(host="0.0.0.0",port=8000)

 

調試模式:

打開調試模式後,服務器會在修改應用以後自動重啓,而且當應用出錯時還會提供一個有用的調試器;

打開調試模式有兩種方法:

1.在應用對象上設置標誌

app.debug = True

app.run()

2.做爲參數傳遞給 run 方法:

app.run(debug=True)

路由:

route()裝飾器把一個函數綁定到一個URL,用戶在瀏覽器輸入相關的URl後,會獲得相應的函數返回。

 

from flask import Flask

app = Flask(__name__)

@app.route('/')

def index():

        return 'Index Page' 

@app.route('/hello')

def hello():

        return 'Hello World'

if __name__ == "__main__":

        app.debug = True

        app.run(host="0.0.0.0",port=8000)

 

在瀏覽器用直接訪問顯示Index Page,URL後面加/hello顯示Hello World.

 

變量規則:

經過把URl一部分標記爲 <variable_name>就能夠在URL中添加變量。標記的部分做爲關鍵字參數傳遞給函數。經過使用

 

<converter:variable_name>,能夠選擇性的加上一個轉換器,爲變量指定規則。

例:

from flask import Flask 

app = Flask(__name__)

@app.route('/user/<username>')

def show_user_profile(username):

        return 'User %s' % username

@app.route('/post/<int:postid>')

def show_post(post_id):

        return 'Post %d' % post_id 

if __name__ == "__main__":

        app.run(host='0.0.0.0')

 

其中int是爲轉換器,接受整數。

 

URL 構建

url_for()函數用於構建指定的函數URL的。它把函數名稱做爲第一個參數,其他參數對應URL中的變量。未知變量將添加到URL中查詢參數。

from flask import Flask, url_for

app = Flask(__name__)

@app.route('/')

def index():

        pass

@app.route('/login')

def login():

        pass

@app.route('/user/<username>')

def profile(username):

        pass

with app.test_request_context():

        print url_for('index')

        print url_for('login')

        print url_for('login', next='/')

        print url_for('profile', username='John Doe')

輸出:

/

/login

/login?next=%2F

/user/John%20Doe

 

test_request_context()方法的做用是告訴Flask咱們正在處理一個請求,這裏處於python 執行下,並無真正請求。

不把URL寫死在模板而用動態構建的三個理由:

1.反向解析一般比硬編碼URL更直觀。同時,更重要的是你能夠只在一個地方改變URL,而不用處處找。

2.URL建立會爲你處理特殊字符轉義和Unicode數據,不用你操心。

3.若是你的應用是放在URL根路徑以外的地方(如在/myapplication中,不在/中),url_for會爲你妥善處理。

 

HTTP 方法

默認狀況下一個路由只回應GET請求,可是可能經過methods參數使用不一樣方法。

例:

@app.route('/login', methods=['GET', 'POST'])

def login():

    if request.method == 'POST':

        do_the_login()

    else:

        show_the_login_form()

 

靜態文件

在開發過程當中, Flask 也能作好這個 工做。只要在你的包或模塊旁邊建立一個名爲 static 的文件夾就好了。靜態文件位於 應用的 

/static 中。

 

使用選定的'static' 端點就能夠生成相應URL:

url_for('static',filename='style.css')

這個靜態文件在文件系統中的位置應該是static/style.css

 

渲染模板

使用render_template()方法渲染模板,你只要提供模板名稱和須要做用參數傳遞給模板的變量就好了。

例:

Flask會有templates文件夾內尋找模板。所以,若是你的應用是一個模塊,尋麼模板文件夾應該在模塊旁邊;若是是一個包,那麼就應該在包裏面:

1.application.py 

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/hello')

@app.route('hello/<name>')

def hello(name=None):

        return render_template('hello.html', name = name)

if __name__ == "__main__:"

        app.run(host='0.0.0.0')

 

2.創建templates

mkdir templates

3.templates目錄下創建hello.html

<!doctype html>

<html>

<head>

<title>Hello from Flask</title>

</head>

<body>

{% if name %}

  <h1>Hello {{name}}! </h1>

{% else %}

  <h1>Hello World! </h1>

{% endif %}

</body>

</html>

測試:

自動轉義默認開啓。所以,若是 name包含HTML,那麼會被自動轉義。若是能夠信任某個變量,且知道它是安全的HTML,那麼可使用Markup類把它標記爲安全的。不然請在模板中使用|safe過濾器。

>>> from flask import Markup

>>> Markup('<strong>Hello %s!</strong>') % '<blink>hacker</blink>'

Markup(u'<strong>Hello <blink>hacker</blink>!</strong>')

>>> Markup.escape('<blink>hacker</blink>')

Markup(u'<blink>hacker</blink>')

>>> Markup('<em>Marked up</em> » HTML').striptags()

u'Marked up \xbb HTML'

 

文件上傳:

確保HTML表單中設置了enctype=multipart/form-data屬性。不然瀏覽器不會傳送文件。

已上傳的文件被儲存在內存或文件系統的臨時位置。能夠經過對象files屬性來訪問上傳的文件。每一個上傳的文件都儲存在這個字典屬性中,這個屬性基本和標準的python file對象同樣,另外多出一個用於用上傳的文件保存到服務器的文件系統中。

from flask import request

@app.route('/upload', methods=['GET', 'POST'])

def upload_file():

    if request.method == 'POST':

        f = request.files['the_file']

        f.save('/var/www/uploads/uploaded_file.txt')

cookies

讀取

username = request.cookies.get('username')

設置

resp.set_cookie('username', 'the username')

重定向和錯誤

from flask import abort, redirect, url_for

@app.route('/')

def index():

    return redirect(url_for('login'))

@app.route('/login')

def login():

    abort(401)

    this_is_never_executed()

相關文章
相關標籤/搜索