2020-05-27--flask01--flask基礎(chǔ)01

  • flask框架概述
  • 虛擬環(huán)境的創(chuàng)建
  • pycharm創(chuàng)建flask項(xiàng)目
  • HelloWorld運(yùn)行
  • (___name____)詳解
  • 路由的使用
  • 終端(Terminal)的使用
  • 項(xiàng)目資源文件的配置
  • 程序加載配置
  • postman的使用

flask框架概述

Flask為Python屬下的web框架之一,具有比Django更大的靈活性,而由于建立時(shí)間較晚,因此相較于Django在實(shí)際應(yīng)用上略遜。但是Flask的強(qiáng)大在于其靈活性以及強(qiáng)可擴(kuò)展性,這是Django所望塵莫及的。作為一個(gè)微框架,F(xiàn)lask的體量也相對(duì)于Django小,其在大型網(wǎng)站的應(yīng)用暫時(shí)沒(méi)有實(shí)際示例,而小型app則有很多,因此學(xué)好flask框架有利于接下來(lái)學(xué)習(xí)數(shù)據(jù)挖掘、TensorFlow、PyTorch等工具后將其落地。

Flask誕生于2010年,是Armin ronacher(人名)用Python語(yǔ)言基于Werkzeug工具箱編寫的輕量級(jí)Web開發(fā)框架。它主要面向需求簡(jiǎn)單的小應(yīng)用。

Flask本身相當(dāng)于一個(gè)內(nèi)核,其他幾乎所有的功能都要用到擴(kuò)展(郵件擴(kuò)展Flask-Mail,用戶認(rèn)證Flask-Login),都需要用第三方的擴(kuò)展來(lái)實(shí)現(xiàn)。比如可以用Flask-extension加入ORM、窗體驗(yàn)證工具,文件上傳、身份驗(yàn)證等。Flask沒(méi)有默認(rèn)使用的數(shù)據(jù)庫(kù),你可以選擇MySQL,也可以用NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模塊) ,模板引擎則使用 Jinja2 。
可以說(shuō)Flask框架的核心就是Werkzeug和Jinja2。

Python最出名的框架要數(shù)Django,此外還有Flask、Tornado等框架。雖然Flask不是最出名的框架,但是Flask應(yīng)該算是最靈活的框架之一,這也是Flask受到廣大開發(fā)者喜愛(ài)的原因。

Flask的Github地址:https://github.com/pallets/flask
Flask中文文檔地址:http://docs.jinkan.org/docs/flask/

創(chuàng)建虛擬環(huán)境

與Django一樣,flask也是可以在虛擬環(huán)境下進(jìn)行創(chuàng)建的(這樣的好處就是當(dāng)項(xiàng)目的python版本不同時(shí)可以同時(shí)使用)

因?yàn)樵谥暗膁jango中已經(jīng)在該python版本(3.7.7)安裝了虛擬環(huán)境以及管理包,也就是:

pip install virtualenv
pip install virtualenvwrapper-win

所以直接創(chuàng)建虛擬環(huán)境即可:

mkvirtualenv -p python3 py_flask
或
mkvirtualenv flask_vir1   #在python下創(chuàng)建虛擬環(huán)境
workon flask_vir1       #進(jìn)入虛擬環(huán)境
pip install flask      安裝flask

deactivate (虛擬環(huán)境名)         #退出當(dāng)前的虛擬環(huán)境

在cmd:


pycharm創(chuàng)建項(xiàng)目

在pycharm專業(yè)版中可以直接創(chuàng)建flask項(xiàng)目,并且省略大部分的配置。
但是當(dāng)使用pycharm社區(qū)版時(shí),只能創(chuàng)建pure python項(xiàng)目。

在這里使用pycharm創(chuàng)建pure python項(xiàng)目搭建flask項(xiàng)目:
打開pycharm,創(chuàng)建pure python項(xiàng)目,選擇已有的虛擬環(huán)境(剛在創(chuàng)建的虛擬環(huán)境):



點(diǎn)擊create

HelloWorld

創(chuàng)建成功后,就是一個(gè)空項(xiàng)目,什么都沒(méi)有。
如果使用pycharm專業(yè)版創(chuàng)建flask項(xiàng)目,那么會(huì)有好幾個(gè)文件以及文件夾。
在項(xiàng)目下創(chuàng)建python文件---HelloWorld.py
要使用flask,就首先要導(dǎo)入flask框架中的Flask模塊。
HelloWorld.py:

from flask import Flask

#Flask接受一個(gè)參數(shù)__name__,他會(huì)指向程序所在的包
app = Flask(__name__)

#路由和函數(shù)
@app.route('/')
def index():
    return '頭像真帥'

#main函數(shù)
if __name__ == '__main__':
    app.run()

到這里就可以運(yùn)行了:


(___name____)詳解

main函數(shù):

if __name__ == '__main__':
類似c或者Java中的mian函數(shù),--程序的入口文件

test1.py:

def test_func():
    print(__name__)


def test1_func(name):
    print(type(name), name)

test_func()       #__main__
test1_func(__name__)        #<class 'str'> __main__

#在當(dāng)前模塊下運(yùn)行,在test_func函數(shù)中打印__name__,這個(gè)__name__就是當(dāng)前文件的__name__,所以打印__main__
#在test1_func函數(shù)中,傳入?yún)?shù)__name__,也是但當(dāng)前文件的__name__,所以還是打印__main__

name.py:

# __name__是類屬性,也就是靜態(tài)屬性

from test1 import test1_func,test_func

'''
在當(dāng)前模塊運(yùn)行時(shí),__name__ 為__main__
使用import導(dǎo)入時(shí), __name__  為  所在的模塊的文件名(去掉.py)
'''

test_func()     #test1
test1_func(__name__)     #<class 'str'> __main__

#import方式使用,test_func()打印的__name__,是test1文件下的__name__,所以打印test1。
#test1_func()中,參數(shù)傳遞的是當(dāng)前模塊的__name__,所以打印__main__。

到這里就知道了flask中

app = Flask(__name__)
和
if __name__ == '__main__':
    app.run()
#給Flask傳遞的參數(shù)__name__是當(dāng)前模塊的__name__,
#那么__name__就是__main__,那么程序自然就運(yùn)行到app.run()了。

路由的使用

在flask中也有類似于django的url路由,但是比django的簡(jiǎn)單很多,直接在相應(yīng)的視圖函數(shù)上加上一個(gè)裝飾器即可:

#裝飾器的作用就是講路由映射到相應(yīng)的視圖函數(shù)上
@app.route('/')
def index():
    return '頭像真帥'

終端(Terminal)的使用

在flask中要進(jìn)入python shell:

flask shell

但是前提是項(xiàng)目中必須有有app.py文件,并且要在app.py中寫最基本的組成部分。


項(xiàng)目資源文件的配置

在Flask類中有許多的初始化參數(shù):

'''
static_url_path:靜態(tài)訪問(wèn)路徑(可不傳,默認(rèn)為static)

static_folder:靜態(tài)文件夾(可不傳,默認(rèn)為static)

template_folder:模板訪問(wèn)路徑(可不傳,默認(rèn)為templates)

'''

static_url_path的設(shè)置:

  • 如果static_folder未被指定(也就是默認(rèn)值static),那么static_url_path取為static
  • 如果static_folder被指定了,那么static_url_path等于static_folder的最后一級(jí)文件夾名稱。
  • 手動(dòng)指定static_url_path時(shí),如果static_url_path不為空串,url的路徑必須以/開頭,如/static。
  • 手動(dòng)指定static_url_path時(shí),如果static_url_path為空串,url路徑不必以/開頭,否則相當(dāng)于static_url_path=None的情況,也就是使用static_folder的目錄名字。
  • static_url_path是前端訪問(wèn)資源文件的前綴目錄。默認(rèn)是/static,就是前端必須這樣訪問(wèn):<img src="/static/img/mylogo.jpg" />
    我們改成 ''",就可以這樣訪問(wèn)了:<img src="/img/mylogo.jpg" />。就達(dá)到前端從根目錄訪問(wèn)的目的了。
  • static_folder:
    static_folder表示靜態(tài)文件所在路徑,默認(rèn)為總項(xiàng)目下的static文件夾
    后端存儲(chǔ)資源文件的目錄。默認(rèn)是/static,就是指明你后端的資源文件,是放在<your project>/static/目錄下,一般不需要改動(dòng)。

也就是說(shuō)flask框架默認(rèn)總項(xiàng)目下的static文件靜態(tài)文件目錄(static_folder),templates為 模板目錄(template_folder)。以及前端訪問(wèn)靜態(tài)資源時(shí)的url根路徑(static_url_path)。
實(shí)例:
在項(xiàng)目中新建文件夾--static文件夾,在文件夾中新建index.html,然后運(yùn)行項(xiàng)目:
在url中訪問(wèn):

127.0.0.1:5000/static/index.html

這就是因?yàn)閟tatic_url_path默認(rèn)為static,所以可以訪問(wèn)到。

程序加載配置

在使用web框架時(shí)通常要配置很多的配置項(xiàng),在flask中常用的有兩種方式進(jìn)行加載配置

1.從配置對(duì)象中加載(常用)

也就是通過(guò)對(duì)象進(jìn)行配置,那么一定要?jiǎng)?chuàng)建類
在app.py中,創(chuàng)建了app實(shí)例后,進(jìn)行編寫配置類:

from flask import Flask

#Flask接受一個(gè)參數(shù)__name__,他會(huì)指向程序所在的包
app = Flask(__name__,static_folder='statics')

#1. 配置對(duì)象,里邊定義需要給APP添加的一系列配置
class Config(object):
    DEBUG = True    #在修改代碼之后直接保存,會(huì)自動(dòng)重啟服務(wù)器

# 程序加載配置
#1.從配置對(duì)象中加載,把類名傳給參數(shù)
app.config.from_object(Config)

#裝飾器的作用就是講路由映射到相應(yīng)的視圖函數(shù)上
@app.route('/')
def index():
    return '頭像真帥'

#main函數(shù)
if __name__ == '__main__':
    app.run()

添加的DEBUG=True,在修改代碼之后直接保存,會(huì)自動(dòng)重啟服務(wù)器,不需要像django重啟服務(wù)器,還可以設(shè)置數(shù)據(jù)庫(kù)等配置。
運(yùn)行:



修改index函數(shù)的返回值:



直接運(yùn)行:

2.配置文件中加載

顧名思義:就是創(chuàng)建一個(gè)文件,用于寫一些配置項(xiàng)。
使用:
在項(xiàng)目下新建文件config.ini,在該文件中寫:

#在此文件添加一些配置,一行一個(gè)
DEBUG = True

然后在app.py中使用:

#2.配置文件中加載,把文件名傳進(jìn)去
app.config.from_pyfile('config.ini')

再次運(yùn)行上一步中的結(jié)果,也是可以的。

3.從環(huán)境變量中加載(不常用)

app.run(參數(shù))
app.run(port=8000,debug=True)       #port:指定端口號(hào),debug :自動(dòng)保存,并重啟服務(wù)
  • port:指定端口號(hào)
  • debug :自動(dòng)保存,并重啟服務(wù)
    運(yùn)行:


postman

Postman是chrome的一款插件,也可以下載app使用,用于做接口請(qǐng)求測(cè)試,無(wú)論是前端,后臺(tái)還是測(cè)試人員,都可以用postman來(lái)測(cè)試接口,用起來(lái)非常方便。
就是模擬像后端服務(wù)器url發(fā)送請(qǐng)求,測(cè)試請(qǐng)求是否正常的。



模擬項(xiàng)向

[http://127.0.0.1:5001/](http://127.0.0.1:5001/)

發(fā)送請(qǐng)求:



上邊的是請(qǐng)求方?jīng)]有進(jìn)行傳參,當(dāng)進(jìn)行web開發(fā)時(shí),要對(duì)后端不斷地傳遞參數(shù)也就是位置參數(shù)。

有參方式

在app.py中編寫服務(wù)器代碼:

@app.route('/user/<user_id>')
def user_info(user_id):
    
    return f'hello{user_id}'

使用postman進(jìn)行測(cè)試:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容