91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Python全棧中的Flask

發布時間:2021-11-23 10:36:41 來源:億速云 閱讀:131 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關如何理解Python全棧中的Flask,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

前言

Python Web框架里比較有名當屬Django,Django功能全面,它提供一站式解決方案,集成了MVT(Model-View-Template)和ORM,以及后臺管理。但是缺點也很明顯,它偏重。就像是一個裝潢好的房子,它提供好了你要用的東西,直接拿來用就可以。

Flask相對于Django而言是輕量級的Web框架。和Django不同,Flask輕巧、簡潔,通過定制第三方擴展來實現具體功能。

可定制性,通過擴展增加其功能,這是Flask最重要的特點。Flask的兩個主要核心應用是Werkzeug和模板引擎Jinja。 

WSGI

Web Server Gateway Interface(Web服務器網關接口,WSGI)已被用作Python Web應用程序開發的標準。 WSGI是Web服務器和Web應用程序之間通用接口的規范。

Werkzeug

它是一個WSGI工具包,它實現了請求,響應對象和實用函數。這使得能夠在其上構建web框架。 Flask框架使用Werkzeug作為其基礎之一。

jinja2

jinja2是Python的一個流行的模板引擎。Web模板系統將模板與特定數據源組合以呈現動態網頁。

Flask通常被稱為微框架。 它旨在保持應用程序的核心簡單且可擴展。Flask沒有用于數據庫處理的內置抽象層,也沒有形成驗證支持。相反,Flask支持擴展以向應用程序添加此類功能。一些受歡迎的Flask擴展將在本教程后續章節進行討論。

Flask

Flask擴展包:

  • Flask-SQLalchemy:操作數據庫

  • Flask-migrate:管理遷移數據庫

  • Flask-Mail:郵件

  • Flask-WTF:表單

  • Flask-script:插入腳本

  • Flask-Login:認證用戶狀態

  • Flask-RESTful:開發REST API的工具

  • Flask-Bootstrap:集成前端Twitter Bootstrap框架

  • Flask-Moment:本地化日期和時間

新建flask項目:

如何理解Python全棧中的Flask

 運行如下:

如何理解Python全棧中的Flask

必須在項目中導入Flask模塊。 Flask類的一個對象是我們的WSGI應用程序。

Flask構造函數使用當前模塊(__name __)的名稱作為參數。

以下是實例化一個Flask對象可填的參數,及其默認值:

  • template_folder:模板所在文件夾的名字, 默認就是templates

  • root_path:可以不用填,會自動找到,當前執行文件,所在目錄地址在return render_template時會將上面兩個進行拼接,找到對應的模板地址

  • static_folder:靜態文件所在文件的名字,默認是static,可以不用填

  • static_url_path:靜態文件的地址前綴,寫成什么,訪問靜態文件時,就要在前面加上這個

instance_path和instance_relative_config是配合來用的、這兩個參數是用來找配置文件的,當用app.config.from_pyfile('settings.py')這種方式導入配置文件的時候會用到

  • instance_relative_config:默認為False,當設置為True時,from_pyfile會從instance_path指定的地址下查找文件。

  • instsnce_path:指定from_pyfile查詢文件的路徑,不設置時,默認尋找和app.run()的執行文件同級目錄下的instance文件夾,如果配置了instance_path(注意需要是絕對路徑),就會從指定的地址下里面的文件

Flask類的route()函數是一個裝飾器,它告訴應用程序哪個URL應該調用相關的函數。

app.route(rule, options)
  • rule 參數表示與該函數的URL綁定。

  • options 是要轉發給基礎Rule對象的參數列表。

在上面的示例中,'/ ' URL與hello_world()函數綁定。因此,當在瀏覽器中打開web服務器的主頁時,將呈現該函數的輸出。

application對象的add_url_rule()函數也可用于將URL與函數綁定,如下:

def hello_world():
   return ‘hello world’
app.add_url_rule(‘/’, ‘hello’,hello_world)

最后,Flask類的run()方法在本地開發服務器上運行應用程序。

app.run(host, port, debug, options)
  • host:監聽的主機名

  • post:監聽的主機端口,默認5000

  • debug:調試模式,默認false,設置為frue則顯示調試信息

  • options:要轉發到底層的werkzeng服務器

給路由傳參示例:

from flask importFlask

app = Flask(__name__)
@app.route('/id/<int:idn>')def hello_world(idn):
   return 'HelloWorld! %d' %idn
if __name__ == '__main__':
   app.run()

路由傳遞的參數默認當做string處理,這里指定int,還支持float,path,尖括號中冒號后面的內容是動態的。

返回狀態碼示例:

如何理解Python全棧中的Flask

abort函數:

如果在視圖函數執行過程中,出現了異常錯誤,我們可以使用abort函數立即終止視圖函數的執行。通過abort函數,可以向前端返回一個http標準中存在的錯誤狀態碼,表示出現的錯誤信息。

使用abort拋出一個http標準中不存在的自定義的狀態碼,沒有實際意義。如果abort函數被觸發,其后面的語句將不會執行。其類似于python中raise。

from flask importFlask,abort

app = Flask(__name__)
@app.route('/id/<int:idn>')def hello_world(idn):
   abort(403)
   return 'HelloWorld! %d' %idn, 888
if __name__ == '__main__':
   app.run()

在Flask中通過裝飾器來實現捕獲異常,errorhandler()接收的參數為異常狀態碼。視圖函數的參數,返回的是錯誤信息。

重定向redirect示例:

from flask importFlask,redirect

app = Flask(__name__)
@app.route('/')def hello_world():
   return redirect('https://www.baidu.com')
if __name__ == '__main__':
   app.run()

效果如下:

如何理解Python全棧中的Flask

這里再介紹一下url_for(),url_for()函數對于動態構建特定函數的URL非常有用。該函數接受函數的名稱作為第一個參數,以及一個或多個關鍵字參數,每個參數對應于URL的變量部分。

如下:

@app.route('/user/<name>')def hello_user(name):
   if name=='admin':
      return redirect(url_for('hello_admin'))
   else:
      return redirect(url_for('hello_guest',guest =name))

HTTP方法:

Http協議是萬維網中數據通信的基礎。在該協議中定義了從指定URL檢索數據的不同方法。

方法介紹:

  • GET:以未加密的形式將數據發送到服務器獲取響應內容

  • POST: 用于將HTML表單數據上傳到服務器

  • PUT:用上傳的內容替換目標資源的數據

  • DELETE:刪除由URL給出的目標資源的數據

  • HEAD: 和GET方法相同,但沒響應體

默認情況下,Flask路由響應GET請求。但是,可以通過為route()裝飾器提供方法參數來更改此首選項。

為了演示在URL路由中使用POST方法,首先讓我們創建一個HTML表單,并使用POST方法將表單數據發送到URL。

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
   <body>

      <form action = "http://localhost:5000/login"method = "post">
         <p>Enter Name:</p>
         <p><input type = "text" name = "nm"/></p>
         <p><input type = "submit" value = "submit"/></p>
      </form>

   </body>
</html>

loginok.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>hello {
  
  
  { name }}</h2>
</body>
</html>

WC_public_flask.py

from flask importFlask, render_template, request

app = Flask(__name__, template_folder='templates')
@app.route('/')def login():
   return render_template('login.html')
@app.route('/login',methods = ['POST', 'GET'])def loginok():
   if request.method== 'POST':
      user = request.form['nm']
      return render_template('loginok.html',name =user)
   else:
      user = request.args.get('nm')
      return render_template('loginok.html',name =user)
if __name__ == '__main__':
   app.run(debug = True)

以上就是如何理解Python全棧中的Flask,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榆社县| 扶风县| 垫江县| 温宿县| 扶绥县| 靖宇县| 白沙| 桓台县| 蓬安县| 灵台县| 民丰县| 宁河县| 肇东市| 印江| 资讯| 昌宁县| 华安县| 呼和浩特市| 综艺| 广宁县| 奉新县| 高雄县| 永德县| 余姚市| 开阳县| 清苑县| 庄河市| 周宁县| 大冶市| 吴川市| 成都市| 罗山县| 泽普县| 海原县| 务川| 简阳市| 凤庆县| 怀化市| 开平市| 杭州市| 富川|