国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

flask文檔學習筆記1-快速入門

lingdududu / 2414人閱讀

摘要:示例如下靜態(tài)路由使用動態(tài)變量的路由未指定變量類型使用動態(tài)變量的路由指定變量類型指定的路由變量,可以作為被裝飾的函數(shù)參數(shù)傳入進來。

開始決定認真的在網(wǎng)上寫一些東西,主要原因還是在于希望能提升學習效果。雖說python寫了有幾年,但是web后端框架的確沒怎么接觸過,買了本狗書寥寥草草的過了一遍,發(fā)現(xiàn)很多東西還是理解不深,真的是好記性不如爛筆頭,知識也要從基礎開始,退回來好好看看官方文檔,再去看狗書吧。
網(wǎng)上有翻譯好的官方文檔,基本是基于0.10.1版本翻譯的,和目前版本對比了一下,細節(jié)上還是有一些不同(狗書也存在這個問題),所以還是老老實實的看英文原版學習吧,目前的版本是0.12.2

“微型”的含義

眾所周知,flask是一個使用Python開發(fā)的“微型”Web框架,文檔中特意強調了,所謂“微型”并不意味著Web應用的開發(fā)只能寫在一個Python文件里,也不意味著flask自身功能不夠豐富?!拔⑿汀钡哪康脑谟?,保持一個“簡單”并且“可擴展”的框架核心,為開發(fā)者提供一個選擇自由的Web框架。基于此,開發(fā)者可以自由的選擇數(shù)據(jù)庫或模板引擎,為自己的Web應用做合適的選擇。

最小應用

通過flask實現(xiàn)一個Hello World只需要幾行代碼

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"

把一頭大象放進冰箱只需三步:

引用Flask類,并創(chuàng)建Flask類的實例。這個實例就是HelloWorld應用的WSGI接口。

編寫hello_world函數(shù),返回"hello, World!"字符串消息。

使用route裝飾器,為hello_world創(chuàng)建路徑為"/"的路由。

這個示例代碼與0.10版不同,在舊版文檔中,通過在代碼中添加app.run()方法來運行這個Web應用,而在0.12版文檔中,應用的啟動工作使用了命令行的方式來處理:

$ export FLASK_APP=hello.py
$ flask run
 * Running on http://127.0.0.1:5000/

或者:

$ export FLASK_APP=hello.py
$ python -m flask run
 * Running on http://127.0.0.1:5000/

通過給FLASK_APP環(huán)境變量賦值,告訴flask它的web應用是哪個。我嘗試了在代碼中使用app.run()方法啟動,也一樣可以執(zhí)行。

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello World!"

if __name__ == "__main__":
    app.run("0.0.0.0")
Debug模式

開啟debug模式可實現(xiàn)代碼變更的熱加載,即:代碼修改后,不需要重啟flask server,就可以自動觸發(fā)變更代碼的載入。
另外,開啟debug模式可以實現(xiàn)在頁面查看運行中的錯誤信息,追蹤錯誤發(fā)生原因,適合開發(fā)過程中的錯誤調試。
開啟Debug模式的方法包括:

$ export FLASK_DEBUG=1
$ flask run

以及在代碼中,為Flask類實例的run方法中,指明debug參數(shù)為True:

app.run(debug=True)
路由

在Flask下,用戶可以使用@app.route()裝飾器為頁面設計具有可讀性的靜態(tài)路由,也可以在路由部分中加入變量,以使路由動態(tài)可變。
路由的形式類似于linux下的文件路徑。
示例如下:

#靜態(tài)路由
@app.route("/hello")
def hello():
    return "Hello, World"
#使用動態(tài)變量的路由(未指定變量類型)
@app.route("/user/")
def show_user_profile(username):
    # show the user profile for that user
    return "User %s" % username

#使用動態(tài)變量的路由(指定變量類型)
@app.route("/post/")
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return "Post %d" % post_id

指定的路由變量,可以作為被裝飾的函數(shù)參數(shù)傳入進來。當路由尾部加入"/"時,無論在瀏覽器地址欄中輸入的網(wǎng)址尾部是否加"/",瀏覽器都會自動重定向到有/的路由上。

url_for()函數(shù)

flask模塊提供了url_for()函數(shù)用于獲取函數(shù)的URL,因此在項目中所有引用到URL字符串的地方,都可以使用url_for(func, **kwargs)來獲取函數(shù)的URL,這樣做的好處在于,可以使項目更容易維護。當某函數(shù)URL發(fā)生變更時,只需修改一處地方即可,而無須修改每一處URL引用。個人認為,在開發(fā)過程的任何時候,使用硬編碼都是極為不妥的。

HTTP方法

http作為客戶端與服務端的交互協(xié)議,包含了不同類型的請求方法(method),F(xiàn)lask中,最長使用的是GET、PUT和POST方法,一條路由適用哪種方法,可以在route裝飾器中定義。如不明確定義,route裝飾器中默認定義為GET方法。
官方例子:

from flask import request

@app.route("/login", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        do_the_login()
    else:
        show_the_login_form()

http還包括HEAD以及OPTIONS方法,在較新的Flask中,已經(jīng)為用戶內部實現(xiàn),因此一般開發(fā)過程中無需在意。

靜態(tài)文件

Flask的靜態(tài)文件目錄默認為項目目錄內的static目錄,一般所有靜態(tài)文件都存放在這個目錄內。

模板渲染

Flask內置了Jinja2作為模板引擎,并提供render_template方法用于模板渲染,使用起來很方便,只需在方法內指定需要渲染的html文件名稱,并傳入模板變量值即可實現(xiàn)模板渲染。
官方示例:

from flask import render_template

@app.route("/hello/")
@app.route("/hello/")
def hello(name=None):
    return render_template("hello.html", name=name)

默認情況下,F(xiàn)lask會到當前項目目錄下的templates目錄內尋找模板文件。
官方模板文件示例:


Hello from Flask
{% if name %}
  

Hello {{ name }}!

{% else %}

Hello, World!

{% endif %}

模板文件之間可實現(xiàn)繼承,這一特性保證了不同頁面內的重復頁面元素(頁頭、頁腳、導航欄)等,可通過模板繼承的方式迅速實現(xiàn)。

訪問請求數(shù)據(jù)

來自客戶端的http請求,在server端以request對象存在。
Flask為每一個request創(chuàng)建一個處理線程,并在線程內部創(chuàng)建上下文實現(xiàn)線程安全。因此開發(fā)者在開發(fā)過程中不需要為線程安全費太多心思。
關于request對象,獲取客戶端傳輸來的數(shù)據(jù)方式非常簡單,類似于字典的形式,只需要在request.method中指明key的值即可實現(xiàn):

#獲取登錄表單數(shù)據(jù)
@app.route("/login", methods=["POST", "GET"])
def login():
    error = None
    if request.method == "POST":
        if valid_login(request.form["username"],
                       request.form["password"]):
            return log_the_user_in(request.form["username"])
        else:
            error = "Invalid username/password"
    # the code below is executed if the request method
    # was GET or the credentials were invalid
    return render_template("login.html", error=error)

文檔在此處還提及了文件上傳場景以及cookie的簡單用法,后續(xù)文檔應當有更加詳細的記錄,在此不詳述。

錯誤與重定向

Flask使用redirect()函數(shù)處理重定向邏輯。使用abort(error_code)處理錯誤返回。
若希望對錯誤頁面進行定制,可使用errorhandler(error_code)裝飾器修飾對應的視圖函數(shù),定義本地錯誤頁面。

關于應答

flask有自己的應答處理邏輯,可大致總結為:
1.視圖函數(shù)返回字符串時,flask會自動將返回字符串封裝如標準response對象內
2.用戶也可以在視圖函數(shù)內使用make_response()函數(shù)創(chuàng)建response對象并返回,這樣做的意義是,在返回前用戶可以對response對象的部分內容進行設置,例如cookie。
3.如果返回對象是一個tuple,那么內容順序格式應滿足(response, status, headers)這樣的格式

會話session

session記錄了客戶端與server之間的一些信息,官方文檔給出了用戶登陸狀態(tài)的例子。通過判斷session中是否存在username鍵值來判斷用戶是否已登錄,以此為依據(jù)返回不同的展示內容。
示例如下:

from flask import Flask, session, redirect, url_for, escape, request

app = Flask(__name__)

@app.route("/")
def index():
    if "username" in session:
        return "Logged in as %s" % escape(session["username"])
    return "You are not logged in"

@app.route("/login", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        session["username"] = request.form["username"]
        return redirect(url_for("index"))
    return """
        

""" @app.route("/logout") def logout(): # remove the username from the session if it"s there session.pop("username", None) return redirect(url_for("index")) # set the secret key. keep this really secret: app.secret_key = "A0Zr98j/3yX R~XHH!jmN]LWX/,?RT"

使用session的前提是必須設置密鑰,密鑰的獲取可以使用python提供的隨機函數(shù)生成。

>>> import os
>>> os.urandom(24)
日志模塊

flask的日志模塊與python的logging模塊使用方式類似,應該是做了內部集成,代碼形式略微不同,在此做記錄:

app.logger.debug("A value for debugging")
app.logger.warning("A warning occurred (%d apples)", 42)
app.logger.error("An error occurred")

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41363.html

相關文章

  • flask-admin 快速打造博客 系列一

    摘要:前言我想分享快速打造博客的詳細教程,可是發(fā)現(xiàn)網(wǎng)易課堂已經(jīng)有相應的免費課堂了,所以就不打算一點一滴的在這里做筆記,分享這些東西了。所以我主要集中在使用上的講解??晌疫€是錄了一套視頻效果不是很好,稍后想分享給大家。 前言: 我想分享flask+flask-admin快速打造博客的詳細教程,可是發(fā)現(xiàn)網(wǎng)易課堂已經(jīng)有相應的免費課堂了,所以就不打算一點一滴的在這里做筆記,分享這些東西了。所以我主要...

    李世贊 評論0 收藏0
  • 從零開始搭建論壇(三):Flask框架簡單介紹

    摘要:我們的論壇項目就使用了該框架。此外,麥子學院也有一個入門視頻教程,一共小時的視頻教程,涵蓋開發(fā)的方方面面,包括環(huán)境的搭建,語法介紹,項目結構的組織,全球化,單元測試等內容。博客地址更多閱讀的機制三個框架的對比 前面兩篇文章中我們已經(jīng)了解 Web(HTTP)服務器,Web應用程序,Web框架,WSGI這些 Python Web 開發(fā)中的概念。我們知道,Web框架通過將不同Web應用程序中...

    Alan 評論0 收藏0
  • 我的第一本 gitbook: Flask Web 開發(fā)筆記

    摘要:月份發(fā)布了第版,收到不少網(wǎng)友的良好建議,所以又抽空進行了完善,當然也拖了不少時間。本書主要介紹的基本使用,這也是我一開始在學習過程中經(jīng)常用到的。第章實戰(zhàn),介紹了如何開發(fā)一個簡單的應用。聲明本書由編寫,采用協(xié)議發(fā)布。 showImg(https://segmentfault.com/img/remote/1460000007484050?w=200&h=152); 書籍地址 head-f...

    KevinYan 評論0 收藏0
  • flask筆記:是flask.ext.sqlalchemy還是flask_sqlalchemy

    摘要:首先出結論,和是一個意思,區(qū)別是寫法不同,兼容性不同。是特有的拓展功能,目前,擴展必須支持以及原因擴展導入轉換我們推薦使用擴展的命名空間包。相反,我們現(xiàn)在推薦命名軟件包,而不是現(xiàn)在已棄用的。 最近入門python的flask框架,官方推薦用sqlalchemy庫作為與數(shù)據(jù)庫交互的工具。這時我在看網(wǎng)絡上一些文章資料時發(fā)現(xiàn)一個問題。 這里插個題外話,sqlalchemy和flask_sql...

    DandJ 評論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數(shù)據(jù)增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協(xié)議和RESTful API相關資料. 阮一峰:理解RESTful架構 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...

    Jeffrrey 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<