ttp協議是萬維網數據通信的基礎。 它協議定義了從指定URL中檢索不同數據的方法。
下表概括了不同的http方法 -
編號 | 方法 | 描述 |
1 | GET | 將數據以未加密的形式發送到服務器,這最常用的方法。 |
2 | HEAD | 與GET相同,但沒有響應主體 |
3 | POST | 用于將HTML表單數據發送到服務器。通過POST方法接收的數據不會被服務器緩存。 |
4 | PUT | 用上傳的內容替換目標資源的所有當前表示。 |
5 | DELETE | 刪除由URL給出的所有目標資源的所有表示 |
默認情況下,Flask路由響應GET請求。 但是,可以通過為route()裝飾器提供方法參數來更改此首選項。
為了演示在URL路由中使用POST方法,首先創建一個HTML表單并使用POST方法將表單數據發送到URL。
將以下腳本保存到文件:login.html
# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.cainiaojc.com
# Date : 2020-08-08
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Flask HTTP請求方法處理</title>
</head>
<body>
<form action="http://localhost:5000/login" method="post">
<p>輸入姓名:</p>
<p><input type="text" name="name" value=""/></p>
<p><input type="submit" value="提交" /></p>
</form>
</body>
</html>
現在在Python shell中輸入以下腳本。
示例
# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.cainiaojc.com
# Date : 2020-08-08
from flask import Flask, redirect, url_for, request
app=Flask(__name__)
@app.route('/success/<name>')
def success(name):
return 'welcome %s' % name
@app.route('/login',methods=['POST', 'GET'])
def login():
if request.method=='POST':
user=request.form['name']
return redirect(url_for('success',name=user))
else:
user=request.args.get('name')
return redirect(url_for('success',name=user))
if __name__=='__main__':
app.run(debug=True)
開發服務器開始運行后,在瀏覽器中打開login.html,在文本字段中輸入名稱(如: maxsu )并單擊 提交。
表單數據被提交到<form>標簽的action屬性指定的URL。
http://localhost:5000/login被映射到login()函數。 由于服務器已通過POST方法接收數據,因此從表單數據獲得'name'參數的值,通過以下方式-
# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.cainiaojc.com
# Date : 2020-08-08
user=request.form['name']
它作為可變部分傳遞給URL:/success。 瀏覽器在窗口中顯示歡迎消息。
將login.html中的方法參數更改為GET并在瀏覽器中再次打開。 在服務器上收到的數據是通過GET方法。 'name'參數的值現在通過以下方式獲得 -
# Filename : example.py
# Copyright : 2020 By Nhooo
# Author by : www.cainiaojc.com
# Date : 2020-08-08
User=request.args.get('name')
這里,args是字典對象,它包含一系列表單參數及其對應值。 與之前一樣,與'name'參數對應的值將傳遞到URL:/success。
叫駱駝
會點兒代碼,會點兒讀書
這世上的書浩如煙海
我能做的就是盡量整理分享給你
在上一個小節Flask項目第一彈中,我們創建了第一個 Flask 程序,并且在瀏覽器中成功看到了 Flask 程序給我們返回的 Hello World。
但是你有沒有注意到,我們看到的內容只是在后臺進行寫死的,也就是說無論你怎么請求,看到的永遠是 Hello World,有沒有辦法根據自己的需求讓 Flask 程序返回給你想要的內容?
答案肯定是有的。想想計算機網絡中的HTTP 協議,它提供了多種方法訪問服務端資源。本小節講解常用的 HTTP 方法。并通過一個具體的例子,說明如何在 Flask 中使用不同的 HTTP 方法。
HTTP協議
HTTP 協議是 Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫, 用于從萬維網(World Wide Web)服務器傳輸超文本到本地瀏覽器的傳送協議。
HTTP 協議工作于客戶端-服務端架構為上。瀏覽器作為 HTTP 客戶端通過 URL 向 服務端發送請求,服務端根據接收到的請求 URL,向客戶端發送響應信息。HTTP 請求-響應模型如下所示:
HTTP請求-響應模型圖
如果再細致一點兒,那就是這樣:
HTTP請求響應模型圖in版
HTTP請求消息(請求頭、請求行、請求體)
隨便找一個界面,然后點開 F12 ,點擊網絡,查看資源:
請求
HTTP 協議是一個簡單的請求-響應協議,它指定了客戶端可能發送給服務器什么樣的消息以及得到什么樣的響應。
如下,是一個 HTTP 請求消息的例子
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
User-Agent: Mozilla/5.0 AppleWebKit/537.36 Chrome/81.0
Accept: text/html,application/xml;image/webp,image/png,*/*;
...
省略
...
第一行是請求行,用來說明請求方法,要訪問的資源,以及所使用的 HTTP 版本。此例中,請求方法是 GET,要訪問的資源是 /,HTTP 版本是 1.1,表示要獲取網站首頁 / 的內容。
請求行之后的部分是請求頭,用作說明服務器要使用的附加信息。例如:Host 指出請求的主機名: www.baidu.com。
請求頭部之后是請求體,在請求體中可以添加任意的其他數據,此例請求體為空(省略部分)。
HTTP常規方法以及對應 Flask 應用
HTTP方法之Flask
下面我們通過一個具體的例子,說明如何在 Flask 中使用不同的 HTTP 方法:
首先,導入類 flask.Flask 和 flask.request,request 封裝了請求消息,可以獲取請求的各種參數。
from flask import Flask, request
app=Flask(__name__)
定義處理路徑 /login 的函數 login,裝飾器 @app.route(’/login’, methods=[‘GET’]) 表示使用 GET 方法處理路徑 /login 的請求。
@app.route('/login', methods=['GET'])
def login():
return (
'''
<form action="/check_login" method="POST">
<span><input type="text" name="name"/></span>
<span><input type="password" name="password"/></span>
<button type="submit">提交</button>
</form>
'''
)
注意:Flask 可以識別路由函數返回的 HTML 語法,但是需要包裹在 """ """ 中。
函數 login 返回一段用于登錄的 HTML 表單,表單包括 2 個字段: name 和 password。在第 5 行,指定使用 POST 方法提交表單給服務端的 /check_login 處理函數。
定義處理路徑 /check_login 的函數 check_login,裝飾器 @app.route(’/check_login’, methods=[‘POST’]) 表示使用 POST 方法處理路徑 /check_login 的請求。
函數 check_login 根據請求的參數 name 和 password 是否正確,返回給用戶相應的信息。在第 3 行,提取參數 name 的值,在第 4 行,提取參數 password 的值。如果 name 是 admin,password 是 1234,則返回 Login Succeed 消息,否則返回Login Failed 消息。
@app.route('/check_login', methods=['POST'])
def check_login():
name=request.form['name']
password=request.form['password']
if name=='admin' and password=='1234':
return 'Login Succeed'
else:
return 'Login Failed'
運行配置
還記得如何運行嗎?
if __name__=='__main__':
app.run(load_dotenv=True)
load_dotenv 是配合我們的配置文件運行的,如果忘記了配置文件長什么樣子,那么可以看看Flask項目實戰第一彈。
打開 cmd ,運行如下:
(flask) D:\01-code\python\pythonProject>flask run
* Serving Flask app 'manage' (lazy loading)
* Environment: development
* Debug mode: on
* Restarting with stat
* Debugger is active!
* Debugger PIN: 438-008-053
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
調試運行
用戶在瀏覽器中輸入 http://localhost:5000/login,瀏覽器顯示:
login
此時輸入 admin、1234 ,則返回的 URL 與服務器資源如下:
succeed
如果賬戶和密碼不是這兩個 value ,則會看到服務器給你返回的結果是這樣的:
failed
到此,基礎的 HTTP 協議和方法 以及 Flask 對應的使用已經講完了,恭喜你,又進一步![玫瑰]
對于登錄這個功能來說,如果業務邏輯只是這樣處理,那太太太簡單了。你瞅瞅應該做的(下圖只考慮功能邏輯)
登錄功能需求分析
我們不可能自己造輪子,為了滿足需求,是不是有現有的輪子讓我們用呢?答案是肯定有的。不過這里先不做過多介紹,后面我們慢慢來,慢就是快。這一塊兒需求今天先存檔。
我整理了自學 Python 的視頻,涉及到 爬蟲、Web、數據分析、機器學習和深度學習等內容,留言轉發并后臺發送:“你好,Python”,就可以免費獲取啦![比心]
爬蟲
我也是從大學一路自學走來的,深知自學的情況下,沒有項目是多么的難受。現在免費贈送python項目實戰,后臺私聊即可獲得。[比心]
最后,動動手點個贊,您的支持是我創作的最大動力[碰拳]
言:
Flask 是一個簡單而靈活的 Python Web 開發框架。它被設計成易于使用,并且能夠快速開發 Web 應用程序。Flask 提供了一個簡潔的核心,并以擴展的方式提供了許多功能。作為一個微型框架,Flask 提供了最基本的功能,可以使用插件或擴展來添加更多的功能,以滿足開發者的需求。
Flask 的主要特點包括:
Flask 以簡潔為設計理念,核心只包含了最基本的功能,不對開發者進行限制,方便開發者進行自定義擴展。
Flask 的 API 設計簡單明了,沒有過多的概念和復雜的配置。開發者可以很快上手,快速開發出功能完備的 Web 應用。
Flask 將復雜的任務分解為簡單的組件,并通過插件系統進行擴展。它沒有強制性的依賴,只需要安裝 Flask 就可以開始開發。
Flask 對創建 RESTful API 提供了強大的支持,可以輕松地構建符合 RESTful 架構風格的 Web 服務。
下面我們通過一個簡單的示例來演示 Flask 的使用。
首先,我們需要安裝 Flask,可以使用以下命令通過 pip 進行安裝:
pip install flask
接下來,我們創建一個 app.py 文件并在其中編寫以下代碼:
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
if __name__=='__main__':
app.run()
在上面的代碼中,我們導入了 Flask 模塊并創建了一個 Flask 應用。@app.route('/') 是一個裝飾器,用于定義 URL 路由。當用戶訪問根路徑時,會執行 hello() 函數,并返回 ‘Hello, World!’。
最后,我們可以在命令行中運行以下命令啟動應用:
python app.py
運行后,你將看到類似以下的輸出:
* Running on http://localhost:5000/ (Press CTRL+C to quit)
現在,你可以在瀏覽器中訪問 http://localhost:5000/,就能看到頁面顯示 ‘Hello, World!’。
當使用 Flask 進行 Web 開發時,你將會涉及到很多常用的功能和技術,下面我將介紹一些常見的 Flask 功能和實例代碼。
在 Flask 中,使用路由來定義 URL 和相應的視圖函數。路由是通過裝飾器 @app.route() 來創建的。
下面是一個接收 URL 參數的示例:
@app.route('/user/<username>')
def show_user(username):
return f"Hello, {username}!"
Flask 提供了方便的用于處理請求和響應的功能。通過 request 對象可以獲取請求的信息,通過 make_response() 函數可以創建響應對象。
下面是一個獲取請求參數并返回響應的示例:
from flask import request
@app.route('/hello')
def hello():
name=request.args.get('name', 'Anonymous')
return f"Hello, {name}!"
使用模板引擎可以將動態數據渲染到 HTML 頁面中。Flask 默認支持 Jinja2 模板引擎。
下面是一個使用模板引擎的示例:
from flask import render_template
@app.route('/')
def index():
return render_template('index.html', title='Home')
在上面的示例中,index.html 是一個模板文件,可以包含動態的數據和邏輯。
Flask 提供了 Flask-WTF 擴展來處理 Web 表單。它能夠方便地實現表單驗證和數據處理。
下面是一個使用 Flask-WTF 處理表單的示例:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
class MyForm(FlaskForm):
name=StringField('Name', validators=[DataRequired()])
submit=SubmitField('Submit')
@app.route('/form', methods=['GET', 'POST'])
def form():
form=MyForm()
if form.validate_on_submit():
name=form.name.data
return f"Hello, {name}!"
return render_template('form.html', form=form)
在上面的示例中,我們定義了一個表單類 MyForm,其中包含一個文本字段和一個提交按鈕。當表單被提交時,表單數據會被驗證,并通過 form.validate_on_submit() 方法進行判斷。
Flask 可以與各種數據庫進行集成,常用的有 SQLite、MySQL、PostgreSQL 等。通過使用 Flask 的擴展,如 Flask-SQLAlchemy 或 Flask-MySQLdb,可以輕松地進行數據庫操作。
下面是一個使用 Flask-SQLAlchemy 進行數據庫操作的示例:
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///mydatabase.db'
db=SQLAlchemy(app)
class User(db.Model):
id=db.Column(db.Integer, primary_key=True)
username=db.Column(db.String(50), nullable=False)
@app.route('/users')
def users():
users=User.query.all()
return render_template('users.html', users=users)
在上面的示例中,我們定義了一個 User 模型類,并使用 SQLAlchemy 來進行數據庫操作。users() 函數查詢所有用戶,并將結果傳遞給模板進行渲染。
這只是一小部分 Flask 的功能和示例,Flask 還提供了許多其他功能和擴展,如用戶認證、API 開發、錯誤處理等。你可以根據自己的需求選擇合適的擴展,以及查閱 Flask 的官方文檔和社區資源,進一步學習和深入了解 Flask 的用法和特性。
總結一下,Flask 是一個靈活、易學的 Python Web 開發框架,通過使用路由、視圖函數、請求和響應、模板渲染、表單處理、數據庫集成等功能,可以快速地構建出功能豐富的 Web 應用程序。無論是初學者還是專業開發者,Flask 都是一個值得學習的。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。