<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          盤點(diǎn)Python網(wǎng)頁開發(fā)輕量級框架Flask知識(上篇)

          共 7251字,需瀏覽 15分鐘

           ·

          2021-06-30 19:22

          點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書籍”即可獲贈Python從入門到進(jìn)階共10本電子書

          無可奈何花落去,似曾相識燕歸來。

          前言

          今天來給大家說一個(gè)Python的輕量級web開發(fā)框架-------Flask,為什么要推薦它呢?當(dāng)然是因?yàn)樗鼔蜉p量級了,開發(fā)迅速是它的特點(diǎn),當(dāng)然它也有缺點(diǎn),不過這里不說,因?yàn)榧扔盟终f它差感覺不好。

          一、安裝flask

          pip install flask #需要注意的是,還有flake,那個(gè)是檢查錯(cuò)誤的模塊,不要搞混了

          可以看到成功了,總共下載了四個(gè)模塊,分別是對應(yīng)的web開發(fā)中的模板渲染,網(wǎng)絡(luò)服務(wù)都是一些flask依賴包。


          二、flask的用法

          1.啟動

          既然說到用法,那第一個(gè)就肯定得說說它是怎么啟動的,不然別人哪里還學(xué)的下去啊,廢話少說,開干。

          from flask import Flaskapp=Flask(__name__) #創(chuàng)建應(yīng)用實(shí)例
          @app.route('/') # route裝飾器創(chuàng)建路由def hello(): # 訪問此路由時(shí)執(zhí)行的視圖函數(shù) return 'hello' # 視圖函數(shù)的返回值,又叫‘響應(yīng)’if __name__ == '__main__': app.run(debug=True) #開始運(yùn)行flask應(yīng)用程序,以調(diào)試模式運(yùn)行 #可以設(shè)置啟動的host地址和端口號,具體方法:app.run(host='192.168.1.2',port=3243)

          從上面可以看出,因?yàn)槲倚薷牧艘晥D函數(shù)和返回值,只需在瀏覽器刷新即可,完全不用退出重啟,sublime text 3真是神器啊,給力,墻裂建議大家使用。


          2.創(chuàng)建Flask應(yīng)用注意事項(xiàng)

          要想創(chuàng)建一個(gè)Flask應(yīng)用,首先我們要建立一個(gè)項(xiàng)目文件夾,里面至少要有兩個(gè)文件夾,一個(gè)存放媒體文件(static),一個(gè)存放網(wǎng)頁文件(templates),如果Python程序不多,可以不用給它單獨(dú)建立文件夾。Flask不像Django一樣可以自動創(chuàng)建文件夾,需要我們自己創(chuàng)建。如果你想查看flask創(chuàng)建的路由信息:

          url_map存儲的是url與endpoint的映射。那么這個(gè)endpoint是什么意思了?實(shí)際上,當(dāng)請求傳來一個(gè)url的時(shí)候,會先通過rule找到endpoint,然后再根據(jù)endpoint再找到對應(yīng)的視圖函數(shù)。通常,endpoint的名字都和視圖函數(shù)名一樣。這里還有一點(diǎn)特別注意,那就是所有的控制臺輸出信息語句必須寫在app.run()之前,否則不起作用。


          3.Flask的妙用

          我們可以看到Flask里面有一個(gè)name,這個(gè)是為了啟動模板專門設(shè)立的,除了這個(gè),它還有:

          static_url_path:靜態(tài)網(wǎng)頁地址

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

          template_folder:模板文件夾,默認(rèn)為templates文件夾


          4.添加配置文件

          1)直接在app.run()函數(shù)里添加

          比如以調(diào)試模式運(yùn)行Flask應(yīng)用就可以使用:app.run(debug=True)

          2)直接配置

          app.config=True

          3)建立配置文件

          在項(xiàng)目文件夾根目錄建立一個(gè)配置文件夾,名字為 hw.hw,后綴名你隨便取,內(nèi)容為 DEBUG=True,然后在app.run()前面添加app.config.from_pyfile('hw.hw') 即可。


          5.視圖函數(shù)用法

          1)下級頁面

          @app.route('/index')def index():    return 'index'

          2)轉(zhuǎn)換器

          @app.route('/index/<int:num>') #定義轉(zhuǎn)換器名字numdef num(num): #將轉(zhuǎn)換器傳入函數(shù)中    if num>10: #如果它的值大于10輸出dog,小于10輸出pig        return 'dog'    else:        return 'pig'

          這里需要說到的是,轉(zhuǎn)換器主要是將頁面后的值作為某一個(gè)標(biāo)準(zhǔn)來得到另一個(gè)頁面,我們??吹降募用茏址褪怯眠@個(gè)做的,那么它有哪些類型呢?

          Flask的默認(rèn)轉(zhuǎn)換器:DEFAULT_CONVERTERS = {‘default’: UnicodeConverter,‘string’: UnicodeConverter,‘a(chǎn)ny’: AnyConverter,‘path’: PathConverter,‘int’: IntegerConverter,‘float’: FloatConverter,‘uuid’: UUIDConverter,}

          除此之外,我們也可以自定一轉(zhuǎn)換器,定義轉(zhuǎn)換器需要使用依賴包,方法如下:

          class rc(BaseConverter):       # 重寫父類的屬性,定義轉(zhuǎn)換?規(guī)則    def __init__(self,url_map):        super(rc,self).__init__(url_map)        #驗(yàn)證QQ郵箱的正則表達(dá)式        self.regex ='[0-9a-zA-Z_]{0,19}@qq.com'    #定義視圖函數(shù)下的返回值    def to_python(self,value):        val=value        return val    def to_url(self,value):#返回url        return valueapp.url_map.converters['em'] = rc #將自定義的轉(zhuǎn)換器添加到轉(zhuǎn)換器列表中@app.route('/emm/<em:email>') #加入新的轉(zhuǎn)換器def email(email):    return 'email is:%s' % email #返回email

          可以通過反向解析將添加了自定義轉(zhuǎn)換器的視圖函數(shù)拿來用,這里需要用到重定向和反向解析:

          @app.route('/search')def jj():    url=url_for('email',email='[email protected]')    return redirect(url)

          如果不注明轉(zhuǎn)換器類型,就是默認(rèn)的字符串型:

          @app.route('/hw/<boy>') def hw(boy):    return 'boy:%s'%boy

          還可以定義默認(rèn)的轉(zhuǎn)換器的默認(rèn)值:

          @app.route('/ha/<string:haid>',defaults={'haid':'hello,boy'}) #設(shè)置默認(rèn)值def ha(haid):    return 'haid:%s'%haid

          3)多個(gè)路由指向同一地址

          @app.route('/1')@app.route('/2')def fg():    return '1122'

          這里訪問下級頁面1或者頁面2都會得出同樣的結(jié)果’1122‘


          6.重定向

          重定向即是指從一個(gè)網(wǎng)頁跳轉(zhuǎn)到另一個(gè)網(wǎng)頁,相當(dāng)于刷新之后的操作,這里涉及到flask里的兩個(gè)模塊(redirect,url_for)。

          1)直接跳轉(zhuǎn)

          直接跳轉(zhuǎn)到路由下

          from flask import redirect,url_for@app.route('/refer')def refer():    return redirect('/1')

          這樣就可以直接跳轉(zhuǎn)到路由函數(shù)fg中并顯示返回值。

          2)間接跳轉(zhuǎn)

          我們可以先訪問路由函數(shù),然后跳轉(zhuǎn)到相應(yīng)內(nèi)容頁面

          @app.route('/ref')def ref():    return redirect(url_for('fg')) #跳轉(zhuǎn)

          這樣直接訪問ref子頁面就可以直接跳轉(zhuǎn)到相應(yīng)頁面了


          7.定義錯(cuò)誤頁面

          有兩種方式,一是使用系統(tǒng)的abort直接賦值,二是使用自定義errorhandler函數(shù)。

          1)abort

          直接使用系統(tǒng)自帶的錯(cuò)誤內(nèi)容

          @app.route('/use/<id>')def get_use(id):    if int(id)<10:        abort(404)    elif int(id)>20:        return '---Error---'    return 'hello:%s'%str(id)

          2)errorhandler

          自定義錯(cuò)誤頁面內(nèi)容

          @app.errorhandler(404)def error(err):    return 'hello,%s'%err

          3)定義錯(cuò)誤頁面

          它可以將自定義的錯(cuò)誤寫入到頁面中,平時(shí)會用的比較多。

          @app.route('/error1')def err1():    error1=('index error',666,[('key','div'),('value','zero')])    return error1

          當(dāng)然還有一種表述方式:

          @app.route('/error2')def err2():    error2=('login error',444,{'serise':'100','dataframe':'200'})    return error2  

          4)設(shè)置請求

          這里需要說到一個(gè)新的模塊make_response(),當(dāng)然你也可以使用Response()。

          @app.route('/error3')def err3():    resp=make_response('search error') #這里只需把make_response()換成Response()即可    resp.status='400'    resp.headers['hrr']='zjj'    resp.headers['hw']='zj'    return resp

          8.json數(shù)據(jù)讀取

          flask中有個(gè)非常給力的可以處理json數(shù)據(jù)的模塊,jsonify。

          @app.route('/json1')def json1():    data={'name':'HW','first':'ZJ'}    return jsonify(data)

          @app.route('/json2')def json2(): return jsonify(hour=12,second=21)

          9.cookie的操作

          1)設(shè)置cookie

          #cookie的設(shè)置#set_cookie(key, value='', max_age=None, expires=None,path='/', domain=None, secure=False, httponly=False,samesite=None)
          #key:鍵#value:值#max_age:設(shè)置過期時(shí)間(秒)#expires:設(shè)置過期時(shí)間,時(shí)間戳的形式(1970離現(xiàn)在的時(shí)間)#path:當(dāng)前主域名#domain:子域名#設(shè)置cookie和headers@app.route('/set_cookie')def set_cookie(): response=make_response('cookie設(shè)置成功') #cookie有效時(shí)長30天也可以是hour second minute time=datetime.datetime.today()+datetime.timedelta(days=30)#設(shè)置cookie的有效時(shí)長 response.set_cookie('user','admin',expires=time) #設(shè)置用戶名的cookie response.set_cookie('pass','123456',expires=time) #設(shè)置密碼的cookie response.headers['X-Something']='mything' #這里不允許出現(xiàn)中文 response.headers['Server']='Linux' #服務(wù)器名稱 return response

          2)獲取cookie

          這里需要用到一個(gè)模塊request,它相當(dāng)于模擬一個(gè)請求,你可以把它當(dāng)做requests模塊一樣。

          @app.route('/get_cookie')def get_cookie():    name="用戶名:"+request.cookies.get('user')+"密碼:"+request.cookies.get('pass')    return name

          3)刪除cookie

          有兩種刪除方式來刪除cookie。

          1.通過設(shè)置cookie過期時(shí)間為0即可刪除

          @app.route('/del_cookie1')def del_cookie1():    response=make_response('delete cookie 1')    response.set_cookie('user','',expires=0)    response.set_cookie('pass','',expires=0)    return response

          2.直接刪除cookie

          @app.route('/del_cookie2')def del_cookie2():    response=make_response('delete cookie 2')    response.delete_cookie('user')    response.delete_cookie('pass')    return response


          10.session操作

          session里面保留的就是會話內(nèi)容,它存在于cookie當(dāng)中,通過它我們可以直接登陸某些已經(jīng)登陸過的系統(tǒng)。要想操作session我們需要引入為它專門準(zhǔn)備的session模塊,還有需要配置安全秘鑰才可以使用session。

          1)設(shè)置session

          一、配置安全秘鑰:
          app.config['SECRET_KEY']=os.urandom(30)
          二、設(shè)置session字典
          session['user']='hw'session['pass']='zj'
          三、設(shè)置session過期方式
          session.parmanent=True #默認(rèn)31天后過期#session兩個(gè)小時(shí)過期app.config['PERMANENT_SESSION_LIFETIME']= timedelta(hour=2)
          四、綜合代碼
          @app.route('/session1')def session1():    session['user']='hw'    session['pass']='zj'    session.parmanent=True #默認(rèn)31天后過期    return 'login success'

          以看到session成功設(shè)置在cookie里面了,并且瀏覽器也記錄了。當(dāng)然你也可以只設(shè)置cookie,不過為了安全建議你設(shè)置session。

          2)獲取session

          跟cookie獲取有點(diǎn)不同。

          一、get()獲取
          @app.route('/session2')def session2():    us=session.get("user")    pa=session.get("pass")    return 'hello %s %s'%(us,pa)
          二、索引獲取

          這種方式如果獲取不到值容易產(chǎn)生異常,建議用上一種方法,除非你知道一定能獲取到值。

          @app.route('/session2')def session2():    us=session["user"]    pa=session["pass"]    return 'hello %s %s'%(us,pa)

          3)刪除session

          也有兩種方法,不過一種是一個(gè)一個(gè)刪除,另一種則是全部刪除。

          一、逐一刪除
          @app.route('/session3')def session3():    session.pop('user',None)    session.pop('pass',None)    return 'delete successful!!!!'
          二、全部刪除
          @app.route('/session4')def session4():    session.clear()    return 'delete successful!!!!'


          11.總結(jié)

              本文著重講解了Flask的最基礎(chǔ)的用法,F(xiàn)lask是一個(gè)十分優(yōu)秀的web開發(fā)框架,它可以十分迅速的開發(fā)出web應(yīng)用,但是它需要依賴眾多的包才能完善更多的功能。這里只是講述了Flask一半的知識,下一篇文章,繼續(xù)給大家盤點(diǎn),一起學(xué)習(xí),共同進(jìn)步!

          ------------------- End -------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請?jiān)诤笈_回復(fù)【入群

          萬水千山總是情,點(diǎn)個(gè)【在看】行不行

          /今日留言主題/

          說一兩個(gè)你知道的Python框架吧~

          瀏覽 60
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          Flask微型Python框架
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一区二区三区综合 | 国产精品99久久久久久www | 午夜操骚逼| 亚洲经典一 | 伊人大香蕉久久 |