1. 程式人生 > >python——Web服務開發(一)Flask模組

python——Web服務開發(一)Flask模組

flask的誕生於2010年的愚人節,本來它只是作者無意間寫的一個小玩具,沒想到它卻悄悄流行起來了。漫長的8年時間,flask一直沒有釋出一個嚴肅的正式版本,但是卻不能阻擋它成為即將被微軟收購的亞洲最大同性交友網站github上最受好評的Python Web框架。

現在flask終於釋出了1.0正式版本,雖然也沒什麼卵用,不過還是可以贊一波的。


flask核心內建了兩個最重要的元件,所有其它的元件都是通過易擴充套件的外掛系統整合進來的。這兩個內建的元件分別是werkzeug和jinja2。werkzeug是一個用於編寫Python WSGI程式的工具包,它的結構設計和程式碼質量在開源社群廣受褒揚,其原始碼被尊為Python技術領域最值得閱讀的開源庫之一。而

jinja2是一個功能極為強大的模板系統,它完美支援unicode中文,每個模板都執行在安全的沙箱環境中,使用jinja2編寫的模板程式碼非常優美。

安裝flask就不多說了,pip瞭解一下。



路由:

路由通過使用Flask的app.route裝飾器來設定。

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

@app.route('/hello')
def hello():
    return 'Hello, World'
HTTP方法:

使用route裝飾器的methods引數設定。

from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        do_the_login()
    else:
        show_the_login_form()

靜態檔案:

url_for('static', filename='style.css')

日誌模組:

 app.Logger

app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')

request物件:

Request 物件是一個全域性物件,利用它的屬性和方法,我們可以方便的獲取從頁面傳遞過來的引數。
method屬性會返回HTTP方法的類似,例如post和get。form屬性是一個字典,如果資料是POST型別的表單,就可以從form屬性中獲取。下面是 Flask 官方的例子,演示了 Request 物件的method和form屬性。

from flask import request

@app.route('/login', methods=['POST', 'GET'])
def login():
    error = None
    if request.method == 'POST':
        if valid_login(request.form['username'],
                       request.form['password']):
            return log_the_user_in(request.form['username'])
        else:
            error = 'Invalid username/password'
    # the code below is executed if the request method
    # was GET or the credentials were invalid
    return render_template('login.html', error=error)
更多介面可以參考API文件http://flask.pocoo.org/

我們先簡單起一個小服務,返回輸入的2倍:

import math
from flask import Flask, request

app = Flask(__name__)

@app.route("/double")
def double():
    # 預設引數
    a = int(request.args.get('a', '100'))
    return str(a*2)
    
if __name__ == '__main__':
    app.run()

web快取:可以通過鍵值作為索引,下次可以直接從快取中獲取結果。

import math
import threading
from flask import Flask, request
from flask.json import jsonify

app = Flask(__name__)


class Cache(object):

    def __init__(self):
        self.pis = {}
        self.lock = threading.RLock()

    def set(self, input, output):
        with self.lock:
            self.pis[input] = output

    def get(self, input):
        with self.lock:
            return self.pis.get(input)

cache = Cache()

@app.route("/double")
def double():
    # 預設引數
    a = int(request.args.get('a', '100'))
    result = cache.get(a)
    if result:
        return jsonify({"cached": True, "result": result})
    result=a*2
    cache.set(a, result)
    return jsonify({"cached": False, "result": result})
    
if __name__ == '__main__':
    app.run()

第一次:

第二次:


相關推薦

python——Web服務開發Flask模組

flask的誕生於2010年的愚人節,本來它只是作者無意間寫的一個小玩具,沒想到它卻悄悄流行起來了。漫長的8年時間,flask一直沒有釋出一個嚴肅的正式版本,但是卻不能阻擋它成為即將被微軟收購的亞洲最大

python——Web服務開發分散式快取

上一篇部落格寫了flask模組實現web服務搭建的基本方法以及簡單的快取功能,但是這種快取隨著服務重啟便會丟失,也無法滿足多個服務共享快取的需求,因此,我們通過redis來實現web服務的分散式快取。import redis client = redis.StrictRedi

web前端開發—HTML基礎

目錄 web前端簡介 web前端開發是從網頁製作演變而來,名稱上有很明顯的時代特徵。在網際網路的演化程序中,網頁製作是Web1.0時代的產物,早期網站主要內容都是靜態,以圖片和文字為主

tomcat啟動慢?自己動手打造輕量web服務

http協議 127.0.0.1 hello src java.net cat start 輸入 val 廢話少說,直接上代碼。 編程語言:kotlin import java.net.ServerSocketimport java.net.Socketfun main(

python 正則表示式 re模組match、search、findall、finditer 使用demo

''' 正則表示式的功能全部在re模組上實現 1)match函式:嘗試從字串的起始位置匹配一個模式,如果不是從起始位置匹配成功 也返回None def match(pattern, string, flags=0): patter:匹配的正則表示式 string:要匹配的字串 flags:標誌位,用

Flask Web開發基於pythonWeb表單

做一個簡單的web表單,當你輸入使用者名稱的時候會產生相應的歡迎資訊,效果展示如下: 其實空字元提交時會出現一行Resquired()函式產生的提醒文字,截圖時點選螢幕就消失了。。。。 看到導航欄裡有兩個選項,在head中有標籤圖示,這些都是在下

flask web 開發

阿里雲伺服器購買 修改密碼是修改網頁遠端登入的密碼 可能修改後會需要重啟  我的是六位純數字 重置密碼 是修改遠端連線的密碼 我的賬號是Administrator 密碼是八位(必須含有大寫字母,小寫字母,數字,我的好幾位)   遠端連線使用mstsc,tomcat

NIO原理剖析與Netty初步----淺談高性能服務開發

返回 創建 基於 register 訪問 io操作 nbsp info class 除特別註明外,本站所有文章均為原創,轉載請註明地址 在博主不長的工作經歷中,NIO用的並不多,由於使用原生的Java NIO編程的復雜性,大多數時候我們會選擇Netty,m

Python自動化開發【未完待續】

urn sts dha sel def open entos div 初始 1、創建項目    2、創建models from django.db import models # Create your models here. # 主機表 class Host(m

微信公眾號開發微信驗證開發者服務器接口

mage down charset 流程圖 ringbuf image put 不知道 als 微信驗證開發者服務器接口 微信驗證開發者服務器接口 如圖所示,開發者可填寫自己服務器的驗證token的接口地址,以及自定義的token(博主申請的測試號,使用natapp來進

微信支付APP支付-服務開發

微信支付,首先需要註冊一個商戶平臺公眾賬號,(網址:https://pay.weixin.qq.com/index.php/home/d_login) 目前微信支付的接入方式有四種方式:公眾號支付,APP支付,掃描支付,刷卡支付。本文中我將詳細講解一下APP支付。 微信支付→APP支付官方文件:https

Twisted之web開發

主要概念講述 Site Objects   負責建立HTTPChannel例項來解析HTTP請求,也負責執行。包括URL的根部資源。 Recource   相當於一個單獨的URL欄位。IResiurce介面負責描述資源物件的方法   負責定義所有的URL,相當於一個對映表 .rpy scripts

Python爬蟲開發:零基礎入門

0×00 介紹 本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論視訊分享學習。Python是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎接變化,並

Spring Boot2--Web開發

Web開發的核心內容主要包括內嵌Servlet容器和Spring MVC。 Spring Boot提供了spring-boot-starter-web為Web開發予以支援,spring-boot-starter-web為我們提供了嵌入的Tomcat以及Spring MVC的

Go語言進行web開發 搭建一個簡單的web伺服器

Go語言也被成為“自帶電池”的語言,有大量的web相關工具整合在其中,構建web應用成了一件信手拈來的事情,只要呼叫http包的兩個函式就可以了。 package main import (

Springboot+Maven多模組開發 初始化工程新建第一個web工程

學習Springboot+maven多模組開發筆記。 首先建立一個空專案,新建一個pom檔案,該pom檔案是整個工程的parent pom。 pom檔案內容如下: <pre name="code" class="html"><?xml version

SSM框架開發web專案系列 環境搭建篇

前言   開發環境:Eclipse Mars + Maven + JDK 1.7 + Tomcat 7 + MySQL   主要框架:Spring + Spring MVC + Mybatis   目的:快速上手搭建SSM開發環境,熟悉客戶端請求到資料庫操作的流程。

Flask專案之手機端租房網站的實戰開發

說明:該篇部落格是博主一字一碼編寫的,實屬不易,請尊重原創,謝謝大家! 一丶專案介紹 產品:關於手機端的移動租房網站 角色:在這個產品中使用者包括房東與房客 功能:房東可以在這個平臺釋出自己的房屋,房客可以在這個平臺尋找自己想要租的房子(類似短租平臺) 設計模式:

Python學習之路 開發環境搭建

目錄目錄正文前言:python3應該是Python的趨勢所在,當然目前爭議也比較大,這篇隨筆的主要目的是記錄在centos6.7下搭建python3環境的過程以及碰到的問題和解決過程。另外,如果本機安裝了python2,儘量不要管他,使用python3執行python指令碼就

使用php開發簡單的線上直播服務-前期準備writing...2016-12-29更新

本次開發兩個版本,分別為使用swoole拓展和不使用swoole拓展。只是一個個人能力鍛鍊的娛樂小專案O(∩_∩)O~。 技術配置 Mac OS系統 PHP7.1 swoole拓展(非必需) nginx-rtmp mongodb Video.j