溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

一、flask的基本使用-flask

發(fā)布時(shí)間:2020-06-17 02:55:54 來(lái)源:網(wǎng)絡(luò) 閱讀:346 作者:a120518129 欄目:編程語(yǔ)言

一、簡(jiǎn)介

Flask是一個(gè)基于Python開發(fā)并且依賴jinja2模板和Werkzeug  WSGI服務(wù)的一個(gè)微型框架,對(duì)于Werkzeug本質(zhì)是Socket服務(wù)端,其用于接收http請(qǐng)求并對(duì)請(qǐng)求進(jìn)行預(yù)處理,然后觸發(fā)Flask框架,開發(fā)人員基于Flask框架提供的功能對(duì)請(qǐng)求進(jìn)行相應(yīng)的處理,并返回給用戶,如果要返回給用戶復(fù)雜的內(nèi)容時(shí),需要借助jinja2模板來(lái)實(shí)現(xiàn)對(duì)模板的處理,即:將模板和數(shù)據(jù)進(jìn)行渲染,將渲染后的字符串返回給用戶瀏覽器。

“微”(micro) 并不表示你需要把整個(gè) Web 應(yīng)用塞進(jìn)單個(gè) Python 文件(雖然確實(shí)可以 ),也不意味著 Flask  在功能上有所欠缺。微框架中的“微”意味著 Flask 旨在保持核心簡(jiǎn)單而易于擴(kuò)展。Flask 不會(huì)替你做出太多決策——比如使用何種數(shù)據(jù)庫(kù)。而那些  Flask 所選擇的——比如使用何種模板引擎——?jiǎng)t很容易替換。除此之外的一切都由可由你掌握。如此,F(xiàn)lask 可以與您珠聯(lián)璧合。

默認(rèn)情況下,F(xiàn)lask 不包含數(shù)據(jù)庫(kù)抽象層、表單驗(yàn)證,或是其它任何已有多種庫(kù)可以勝任的功能。然而,F(xiàn)lask  支持用擴(kuò)展來(lái)給應(yīng)用添加這些功能,如同是 Flask  本身實(shí)現(xiàn)的一樣。眾多的擴(kuò)展提供了數(shù)據(jù)庫(kù)集成、表單驗(yàn)證、上傳處理、各種各樣的開放認(rèn)證技術(shù)等功能。Flask  也許是“微小”的,但它已準(zhǔn)備好在需求繁雜的生產(chǎn)環(huán)境中投入使用

二、安裝

pip3 install flask

三、werkzeug簡(jiǎn)介

     Werkzeug是一個(gè)WSGI工具包,他可以作為一個(gè)Web框架的底層庫(kù)。這里稍微說一下, werkzeug 不是一個(gè)web服務(wù)器,也不是一個(gè)web框架,而是一個(gè)工具包,官方的介紹說是一個(gè) WSGI 工具包,它可以作為一個(gè) Web 框架的底層庫(kù),因?yàn)樗庋b好了很多 Web 框架的東西,例如 Request,Response 等等

代碼示例:

from werkzeug.wrappers import Request, Response

@Request.application
def hello(request):
    return Response('Hello World!')

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    run_simple('localhost', 4000, hello)

四、flask快速使用

from flask import Flask
# 實(shí)例化產(chǎn)生一個(gè)Flask對(duì)象
app=Flask(__name__)
# 開啟調(diào)試模式后,修改代碼也可自動(dòng)重啟
app.debug=True
# 將 '/'與視圖函數(shù)index的對(duì)應(yīng)關(guān)系添加到路由中
@app.route('/')
def index():
    return 'ok'
if __name__ == '__main__':
    app.run()

案例:登錄,顯示用戶信息

main.py

from flask import Flask,render_template,request,redirect,session,url_for
app = Flask(__name__)
app.debug = True
app.secret_key = 'sdfsdfsdfsdf'

USERS = {
    1:{'name':'張三','age':18,'gender':'男','text':"道路千萬(wàn)條"},
    2:{'name':'李四','age':28,'gender':'男','text':"安全第一條"},
    3:{'name':'王五','age':18,'gender':'女','text':"行車不規(guī)范"},
}

@app.route('/detail/<int:nid>',methods=['GET'])
def detail(nid):
    user = session.get('user_info')
    if not user:
        return redirect('/login')

    info = USERS.get(nid)
    return render_template('detail.html',info=info)


@app.route('/index',methods=['GET'])
def index():
    user = session.get('user_info')
    if not user:
        # return redirect('/login')
        url = url_for('l1')
        return redirect(url)
    return render_template('index.html',user_dict=USERS)


@app.route('/login',methods=['GET','POST'],endpoint='l1')
def login():
    if request.method == "GET":
        return render_template('login.html')
    else:
        # request.query_string
        user = request.form.get('user')
        pwd = request.form.get('pwd')
        if user == 'lqz' and pwd == '123':
            session['user_info'] = user
            return redirect('http://www.baidu.com')
        return render_template('login.html',error='用戶名或密碼錯(cuò)誤')

if __name__ == '__main__':
    app.run()

templates/detail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h2>詳細(xì)信息 {{info.name}}</h2>
    <div>
        {{info.text}}
    </div>
</body>
</html>

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h2>用戶列表</h2>
    <table>
        {% for k,v in user_dict.items() %}
        <tr>
            <td>{{k}}</td>
            <td>{{v.name}}</td>
            <td>{{v['name']}}</td>
            <td>{{v.get('name')}}</td>
            <td><a href="/detail/{{k}}">查看詳細(xì)</a></td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

templates/login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post">
<p>用戶名:<input type="text" name="name"></p>
<p>密碼:<input type="password" name="pwd"></p>
<input type="submit" value="提交">
</form>
</body>
</html>
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI