欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python編程Flask框架簡單使用教程

 更新時間:2021年11月03日 15:20:37   作者:Pert-  
這篇文章主要為大家介紹了python編程中Flask框架簡單使用教程,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步早日升職加薪

基礎(chǔ)知識

使用框架的優(yōu)點

穩(wěn)定性和可擴展性強
可以降低開發(fā)難度,提高了開發(fā)效率

Flask誕生于2010年,是Armin ronacher用Python語言基于Werkzeug工具箱編寫的輕量級Web開發(fā)框架
Flask本身相當于一個內(nèi)核,其他幾乎所有的功能都要用到擴展(郵件擴展Flask-Mail,用戶認證Flask-Login,數(shù)據(jù)庫Flask-SQL_Alchemy),都需要用第三方的擴展來實現(xiàn)。
其WSGI工具箱采用Werkzeug(路由模塊),模塊引擎則使用Jinja2.這兩個也是Flask框架的核心

Flask常用擴展包

Flask-SQLalchemy 操作數(shù)據(jù)庫
Flask-script 插入腳本
Flask-migrate 管理遷移數(shù)據(jù)庫
Flask-Session Session存儲方式指定
Flask-WTF 表單
Flask-Mail 郵件
Flask-Bable 提供國際化和本地化支持,翻譯;
Flask-Login 認證用戶狀態(tài);
Flask-OpenID 認證;
Flask-RESTful 開發(fā)REST API的工具;
Flask-Bootstrap 集成前端Twitter Bootstrap框架
Flask-Moment 本地化日期和時間
Flask-Admin 簡單而可擴展的管理接口的框架

擴展列表:http://shouce.jb51.net/flask0.10/extensions.html

1.中文文檔(http://shouce.jb51.net/flask0.10/index.html
2.英文文檔(http://flask.pocoo.org/docs/0.11/

基本格式

from flask import Flask
app=Flask(__name__)
@app.route('/')
def a():
    return 'aa'
app.run()

打開谷歌 網(wǎng)址為你的ip地址后加上:再加上默認的端口號5000 頁面展示為aa

app.run(host='0.0.0.0',port=80,debug=True)

host:設置為'0.0.0.0'時在同一個局域網(wǎng)別的電腦ip都能訪問,不設置這個參數(shù)時只有自己的ip能訪問
port:是默認端口號,為80時,網(wǎng)址后面不用加:你設置的端口號,
debug:在代碼中修改return的值后debug的值為True時,不用重新執(zhí)行程序,刷新網(wǎng)頁即可刷新內(nèi)容

拓展

from flask import Flask
app=Flask(__name__)
@app.route('/<orders_id>')    #加個<>  <>里寫的內(nèi)容為參數(shù)
def a(orders_id):
    return '%s'%orders_id
app.run()

在谷歌里輸入你的ip后加上/你要寫的內(nèi)容 網(wǎng)頁展示內(nèi)容即為你要寫的內(nèi)容
如果限制只能是數(shù)字的話 <int:orders_id> <float:orders_id>

return

return 只能返回字符串 和render_template
如果要返回字典之類的 要轉(zhuǎn)成json類型

import json
json.dumps()
from flask import Flask,jsonify

return {'a':'b'}  #報錯
return str({'a':'b'})  #純文本形式,沒有數(shù)據(jù)類型,即沒有鍵值對
return json.dumps({'a':'v'})  #文本形式,但保留了鍵值對
return jsonify({'a':'v'})  #json類型  有鍵值對

app.conifg['JSON_AS_ASCII']=False   #將返回的漢字不以ASCII形式返回

app.config.from_pyfile('settings.ini')  # 可以新建settings.ini  在這里寫配置 

重定向

from flask import Flask,redirect,url_for
app=Flask(__name__)
@app.route('/')
def a():
    return 'a'
@app.route('/five')
def five():
    return redirect(url_for('a'))   #當你輸入網(wǎng)址為你的ip+/+five 時 這個網(wǎng)頁展示內(nèi)容其實就跳轉(zhuǎn)到a()方法里返回的內(nèi)容

#重定向到黑馬官網(wǎng)
@app.route('/demo5')
def demo5():
    return redirect('http://www.itheima.com')

#重定向到自己寫的視圖函數(shù)
#可以直接填寫自己url路徑
#也可以使用url_for生成指定視圖函數(shù)所對應的url

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

#重定向
@app.route('/demo5')
def demo5():
    return redirect(url_for('demo1'))

#重定向到帶有參數(shù)的視圖函數(shù)
#在 url_for 函數(shù)中傳入?yún)?shù)

# 路由傳遞參數(shù)
@app.route('/user/<int:user_id>')
def user_info(user_id):
    return 'hello %d' % user_id

# 重定向
@app.route('/demo5')
def demo5():
    # 使用 url_for 生成指定視圖函數(shù)所對應的 url
    return redirect(url_for('user_info', user_id=100))



取網(wǎng)址參數(shù)

from flask import Flask,request,jsonify
app=Flask(__name__)
@app.route('/<id>')
def a(id):
    return '%s'%id

#當你輸入的網(wǎng)址為你的ip + / + 你要展現(xiàn)的內(nèi)容,  頁面內(nèi)容即為你要展現(xiàn)的內(nèi)容

@app.route('/')
def b():
    name=request.args.get('name')
    id=request.args.get('id')
    return jsonify({'name':name,'id':id})

#當你輸入的網(wǎng)址為你的ip + /? +name=小明&id=7  展現(xiàn)的內(nèi)容即為{'name':小明,'id':7}

content-type

json類型: 'content-type':'application/json'
字符串類型:'content-type':'text/plain'
解析類型:'content-type':'text/html'

cookie\session

獲取cookie  request.get.cookie('')
獲取session  session.get('')

cookie:指某些網(wǎng)站為了辨別用戶身份、進行會話跟蹤而儲存在用戶本地的數(shù)據(jù)(通常經(jīng)過加密)
復數(shù)形式Cookies
cookie是由服務器生成,發(fā)送給客戶端瀏覽器,瀏覽器會將Cookie的Key/value保存,下次請求同一網(wǎng)站時就發(fā)送該cookie給服務器(前提是瀏覽器設置為啟用cookie)
cookie的Key/value可以由服務器端自己定義

Cookie是存儲在瀏覽器中的一段純文本信息,建議不要存儲敏感信息如密碼,因為電腦上的瀏覽器可能被其它人使用
Cookie基于域名安全,不同域名的Cookie是不能互相訪問的
如訪問itcast.cn時向瀏覽器中寫了Cookie信息,使用同一瀏覽器訪問baidu.com時,無法訪問到itcast.cn寫的Cookie信息
瀏覽器的同源策略
當瀏覽器請求某網(wǎng)站時,會將本網(wǎng)站下所有Cookie信息提交給服務器,所以在request中可以讀取Cookie信息

#設置cookie
from flask import Flask,Response
@app.route('/cookie')
    def set_cookie():
        resp=Response("this is to set cookie")
        resp.set_cookie('username','itcast')
        return resp

設置過期時間
@app.route('/cookie')
def set_cookie():
    response=Response('hello world')
    response.set_cookie('username','itheima',3600)    #單位是秒
    return response

獲取cookie
from flask import Flask,request
#獲取cookie
@app.route('/request')
def resp_cookie():
    resp=request.cookies.get('username')
    return resp

Session
對于敏感重要的信息,建議儲存在服務器端,在服務器端進行狀態(tài)保持的方案就是session
session依賴于cookie
session數(shù)據(jù)的獲取
session:請求上下文對象,用于處理http請求中的一些數(shù)據(jù)內(nèi)容
@app.route('/index1')
def index1():
    session['username']='itcast'
    return reddirect(url_for('index'))
@app.route('/')
def index():
    return session.get('username')
記得設置secretz-key='itcast'  這個里面的值自己可以隨意設置

刪除session
session.pop('')

app.config['PERMANENT_SESSION_LIFETIME']=20  #設置session的時效



flask路由

指定路由地址
#指定訪問路徑為demo1
@app.route('/demo')
def demo1():
    return 'demo1'

給路由傳參 
有時我們需要將同一類URL映射到同一個視圖函數(shù)處理,比如:使用同一個視圖函數(shù)來顯示不同用戶的個人信息

#路由傳遞參數(shù)
@app.route('/user/<user_id>')
def user_info(user_id):
    return 'hello %s'%user_id

輸入的網(wǎng)址后綴加的什么 在網(wǎng)頁展示的就是什么,下面那個函數(shù)括號里必須是上面的參數(shù)
路由傳遞的參數(shù)默認當作string處理,也可以指定參數(shù)的類型

#路由傳遞參數(shù)
@app.route('user/<int:user_id>')
def user_info(user_id):
    return 'hello %d'%user_id

這里指定int,尖括號中的內(nèi)容是動態(tài)的。在此暫時可以理解為接受int類型的值,實際上int代表使用IntergeConverter去處理url傳入的參數(shù)

指定請求方式
在Flask中。定義一個路由,默認的請求方式為:
GET
OPTIONS(自帶)
HEAD (自帶)

如果像添加請求方式,
@app.route('/demo2',methods=['GET','POST'])
def demo2():
    #直接從請求中取到請求方式并返回
    return request.method

request屬性

request就是flask中代表當前請求的request對象,期中一個請求上下文變量

(理解成全局變量,在視圖函數(shù)中直接使用可以取到當前本次請求)
屬性      說明                  類型

data        記錄請求的數(shù)據(jù),并轉(zhuǎn)換為字符串     *
form      記錄請求中的表單數(shù)據(jù)          MultiDict
args        記錄請求中的查詢參數(shù)          MultiDict
cookies     記錄請求中的cookie信息          Dict
headers     記錄請求中的報文頭           EnvironHeaders
method      記錄請求使用的HTTP方法           GET/POST
url     記錄請求的URL地址          string
files       記錄請求上傳的文件           *
Request.Form:獲取以POST方式提交的數(shù)據(jù)(接收Form提交來的數(shù)據(jù));
Request.QueryString:獲取地址欄參數(shù)(以GET方式提交的數(shù)據(jù))
Request:包含以上兩種方式(優(yōu)先獲取GET方式提交的數(shù)據(jù)),它會在QueryString、Form、ServerVariable中都搜尋一遍。

requests模塊發(fā)送請求有data、params兩種攜帶參數(shù)的方法。

params在get請求中使用,data在post請求中使用。params是往url后面添加參數(shù),data是指POST請求傳入的字典或?qū)ο?/p>

上下文

上下文:相當于一個容器,保存了Flask程序運行過程中的一些信息
Flask中有兩種上下文,請求上下文和應用上下文

請求上下文(request context)
思考:在試圖函數(shù)中,如何取到當前請求的相關(guān)數(shù)據(jù)?比如:請求地址,請求方式,cookie等等
在flask中,可以直接在視圖函數(shù)中使用request這個對象進行獲取相關(guān)數(shù)據(jù),而request就是請求上下文的對象,保存了當前本次請求的相關(guān)數(shù)據(jù),請求上下文對象有:request,session

request:
封裝了HTTP請求的內(nèi)容,針對的是http請求。舉例:user=request.args.get('user'),獲取的是get請求的參數(shù)

session:
用來記錄請求會話中的信息,針對的是用戶信息,舉例:session['name']=user.id,可以記錄用戶信息,還可以通過session.get['name']獲取用戶信息

應用上下文對象有:current_app , g
current_app
應用程序上下文用于存儲應用程序中的變量,可以通過current_app.name打印當前app的名稱,也可以在current_app中存儲一些變量,例如:
應用的啟動腳本是哪個文件,啟動時指定了哪些參數(shù)
加載了哪些配置文件,導入了哪些配置
連了那個數(shù)據(jù)庫
有哪些public的工具類,常量
應用跑在那個機器上,IP多少,內(nèi)存多大
current_app.name
current_app.text_value='value'

g變量
g作為flask程序全局的一個臨時變量,充當著中間媒介的作用,我們可以通過它傳遞一些數(shù)據(jù),g保存的是當前請求的全局變量,不同的請求會有不同的全局變量,通過不同的thread id區(qū)別

g.name='abc'
注意:不同的請求,會有不同的全局變量

兩者區(qū)別:
請求上下文:保存了客戶端和服務器交互的數(shù)據(jù)
應用上下文:flask應用程序運行過程中,保存的一些配置信息,比如程序名、數(shù)據(jù)庫連接、應用信息等
上下文中的對象只能在指定上下文使用,超出范圍不能使用, 請求上下文和應用上下文原理實現(xiàn):http://shouce.jb51.net/flask0.10/appcontext.html

注冊路由

@app.route('/')
def hello():
    #會返回status code
    #content-type 在http headers里
    #content-type=text/html  #默認值 當成html格式來解析
    #將返回的結(jié)果封裝成一個Response對象
    headers={
        # 'content-type':'text/plain',  #當成普通的字符串來解析

        'content-type':'application/json'   #返回json類型
    }
    # response=make_response('<html></html>',200)    #301是重定向
    # response.headers=headers
    # return response
    # return '<html></html>'
    return '<html></html>',200,headers

# app.add_url_rule('/hello',view_func=hello)   #也可以這樣來注冊路由的

以上就是python編程Flask框架簡單使用教程的詳細內(nèi)容,更多關(guān)于python教程Flask框架使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 中面向接口編程詳情

    Python 中面向接口編程詳情

    這篇文章主要介紹了Python 中面向接口編程詳情,Python 中的接口與大多數(shù)其它語言的處理方式不同,它們的設計復雜性也不同,關(guān)于Python 接口編程的介紹,需要的小伙伴可以參考下面文章內(nèi)容
    2022-05-05
  • 如何用python實現(xiàn)復制粘貼功能

    如何用python實現(xiàn)復制粘貼功能

    這篇文章主要介紹了如何用python實現(xiàn)復制粘貼功能,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-03-03
  • python單例模式實例分析

    python單例模式實例分析

    這篇文章主要介紹了python單例模式,實例分析了單例模式的原理與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • python實現(xiàn)超級瑪麗游戲

    python實現(xiàn)超級瑪麗游戲

    這篇文章主要為大家詳細介紹了python實現(xiàn)超級瑪麗游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • python實現(xiàn)桌面托盤氣泡提示

    python實現(xiàn)桌面托盤氣泡提示

    這篇文章主要為大家詳細介紹了python實現(xiàn)桌面托盤氣泡提示,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python3之簡單搭建自帶服務器的實例講解

    Python3之簡單搭建自帶服務器的實例講解

    今天小編就為大家分享一篇Python3之簡單搭建自帶服務器的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python寫一個基于MD5的文件監(jiān)聽程序

    Python寫一個基于MD5的文件監(jiān)聽程序

    這篇文章主要給大家介紹了關(guān)于利用Python如何寫一個基于MD5的文件監(jiān)聽程序的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 解決python nohup linux 后臺運行輸出的問題

    解決python nohup linux 后臺運行輸出的問題

    今天小編就為大家分享一篇解決python nohup linux 后臺運行輸出的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python編程中Python與GIL互斥鎖關(guān)系作用分析

    Python編程中Python與GIL互斥鎖關(guān)系作用分析

    GIL互斥鎖用來保護Python世界里的對象,防止同一時刻多個線程執(zhí)行Python字節(jié)碼,確保線程安全,但也導致Python線程無法利用多核CPU優(yōu)勢,本文來探討Python將來是否有可能去除GIL
    2021-09-09
  • Python爬蟲制作翻譯程序的示例代碼

    Python爬蟲制作翻譯程序的示例代碼

    這篇文章主要介紹了Python爬蟲制作翻譯程序的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論