1. 程式人生 > >Flask入門及如何反向解析url

Flask入門及如何反向解析url

前言:
    flask 輕量級框架 WEB框架
    AJAX  在web中完成非同步請求和響應
    DJango 重量級的web框架

Python Web

1.靜態網頁和動態網頁
    1.靜態網頁:無法與伺服器做動態互動的網頁
    2.動態網頁:可以和伺服器做動態互動的網頁

2.web與伺服器
    1.web:網頁(html,css,js)
    2.伺服器
        能夠給使用者提供服務的機器就稱為伺服器
        1.硬體與軟體
            硬體:一臺主機
            軟體:一個能夠接收使用者請求並響應的程式
                1.APACHE
                2.TOMCAT
                3.IIS(internet information service)
                4.Nginx
        2.作用:
            1.儲存web上的資訊
            2.能夠處理使用者的請求(request)並給出響應(response)
            3.執行伺服器端程式
            4.具備一定的安全功能

3.框架
    1.什麼是框架
        框架實際是一個為了解決某一開放性問題而存在的一種程式結構
        框架本身提供了一些基本的功能
        我們只需要在基礎的功能上搭建自己的操作就可以了.

 

    2.python web框架
        1.flask-輕量級
        2.webpy-輕量級
        3.tornado-非同步框架
        4.Django-重量級框架
    3.框架模式
        1.MTV
            M:Models:模型層,主要負責資料庫建模
            T:Templates:模板,用來處理使用者的顯示內容  如:html
            V:Views,檢視,處理與使用者打交道的內容(請求和響應)
        2.MVC
            M:Models:模型層,主要負責資料庫建模
            V:Views,檢視處理使用者的顯示內容
            C:Controller,控制器,用於與使用者互動的部分內容(請求和響應)
    4.Flask框架
        1.什麼是Flask框架
            Flask是一個基於Python並且依賴於jinja2模板引擎和Werkzeug WSGI服務的一個微型框架
                WSGI:WEB SERVER GATEWAY INTERFACE(WEB服務網管埠)
            Flask是採用MTV的框架模式

 

        2.安裝Flask
            1.檢視已安裝的Flask版本
            在python的互動模式中:
                1.import flask
                    沒報錯:已經安裝Flask,可以繼續檢視版本
                2.flask _version_
                    檢視已安裝的版本
            2.安裝Flask
            sudo pip3 install flask

        3.Flask初始化詳情
            見程式碼....

from flask import Falsk

app = Flask(__name__)

@app.route("/")

def index():
    return "hello"


if __name__ == "__main__":
   # app執行falsk的應用(啟動flask的服務),預設在本機開啟的埠是5000,port = 5555,
   # 在制定埠啟動程式端
   # debug = True 將啟動模式更改為除錯模式(開發環境中推薦寫Ture,生產環境中必須改為False)
   app.run(debug=True)

 

    5.Flask -路由(route)
        1.什麼是路由
            客戶端傳送請求給web伺服器,web伺服器再將請求傳送給Flask程式例項
            程式例項需要知道每一個url請求地址,到python執行函式的一個對映.
            處理url和函式之間的關係的程式就是"路由"
        2.路由的體現
            在flsak中,路由是通過@app.route 裝飾器來表示的
            1.路由的基本表示
                @app.route('/')
                def index():
                    return "xxx"
              
                #localhost:5000/admin/lodin
                @app.route('/admin/login')
                def admain_login():
                    return "xxx"
            2.帶引數的路由
                路由中可以攜帶引數表示不同的資料
                http://localhost:5000/show/laowang
                http://localhost:5000/show/wangwc
                http://localhost:5000/show/laowang.gebi

                1.基本帶參路由
                    @app.route('/show/<name>')
                    def show(name):
                        name:表示的就是從位址列上傳遞過來的資料
                        return 'xxx'

                2.帶多個路徑的路由
                    http://localhost:5000/show/laowang/36

                    @app.route("/show/<name>/<age>")

                    def show(name,age):
                        return "xxx"

                3.指定引數型別的路由
                    @app.route("/show/<name>/<int:age>")
                    def show(name,age):
                        name:字串
                        age:整數

                    int:型別轉換器
                    flask中支援的型別轉換器:
                        型別轉換器     作用
                          預設         字串,不能有斜槓("/")
                          int:           整型
                          float:        浮點型
                          path:       字串,可以有斜槓('/')

 

            3.多個URL的路由匹配
                為多個訪問地址匹配同一個檢視處理函式
                @app.route('/地址1')
                @app.route('/地址2')
                ...
                def index():
                    return "xxx"


            4.路由中設定http的請求方法
                flask路由也允許設定對應的請求方法(post/get),只有將匹配上請求方法的路徑才能交給對應的檢視處理函式去處理
                所有的路由,預設只接受get請求

                @app.route("/xxx/xxx",methods=["POST"])
                def xxx:
                    pass

                @app.route("/xxx/xxx",methods=["GET","POST"])
                def xxx:
                    #該函式既能接受get請求也能接受post請求
                    pass
            5.URL的反向解析
                正向解析:
                    程式自動解析,根據@app.route()中的訪問路徑,來匹配處理函式

                反向解析:
                    通過檢視處理函式的名稱自動生成對應的訪問路徑

                在flask 中實現反向解析的話要使用:
                    url_for(funName,args)
                        funName:要生成的地址的函式名
                        args:該地址中需要的引數

from flask import Flask, url_for

app = Flask(__name__)

@app.route('/index')
def index():
    return "<h1>這是首頁</h1>"

@app.route('/admin/login/form/show/<name>')
def show(name):
    return "引數的值為:%s" % name

@app.route('/url')
def url():
    #通過index()解析出對應的訪問路徑
    url_index = url_for('index')
    print("index():"+url_index)
    #通過show(name)解析出對應的訪問路徑
    url_show = url_for('show',name='wangwc')
    print("show(name):"+url_show)
    return "<a href='%s'>訪問show(name)</a>" % url_show


if __name__ == "__main__":
    app.run(debug=True)