Unity結合Flask實現排行榜功能

發表于:2015-04-01來源:uml.org.cn作者:娃娃點擊數: 標簽:Unity
業余做的小游戲,排行榜本來是用PlayerPrefs存儲在本地,現在想將數據放在服務器上。因為功能很簡單,就選擇了小巧玲瓏的Flask來實現。 閑話少敘。首先考慮URL的設計。排行榜無

  業余做的小游戲,排行榜本來是用PlayerPrefs存儲在本地,現在想將數據放在服務器上。因為功能很簡單,就選擇了小巧玲瓏的Flask來實現。

  閑話少敘。首先考慮URL的設計。排行榜無非是一堆分數score的集合,按照REST的思想,不妨將URL設為/scores。用GET獲得排行榜數據,用POST添加一條新紀錄到排行榜。此外,按照慣例,排行榜的數據不需要更新和刪除。

  Flask自身不支持REST,但我們可以通過route和method自己實現。下面創建一個原型版本的rank_server.py。命名沿襲了Rails的習慣:

from flask import Flask
  app = Flask(__name__)
  @app.route('/scores', methods=['GET'])
  def index():
  return 'index'
  @app.route('/scores', methods=['POST'])
  def create():
  return 'create'
  if __name__ == '__main__':
  app.run(debug=True)

  執行python rank_server.py來啟動自帶的服務器。下面我們安裝cURL來測試應用。

 brew install curl

  測試GET:

`curl -i -X GET 127.0.0.1:5000/scores`

  測試POST:

`curl -i -X POST 127.0.0.1:5000/scores`

  -i參數可以展示響應的頭部信息,便于debug。-X參數指定請求的方法method。

  可以看到測試成功。

  下面我們建立存儲數據的表。本地測試我們使用sqlite,之后部署使用mysql。

  建表文件create_rank.sql內容如下:

DROP TABLE IF EXISTS rank;
  CREATE TABLE rank(
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name VARCHAR(255) NOT NULL,
  score INTEGER NOT NULL
  );

  Mac自帶sqlite。執行下面語句導入sql文件:

sqlite3 rank.db < create_rank.sql

  然后隨便插入幾條測試數據。如:

INSERT INTO rank (name, score) VALUES ('A', 100);
  INSERT INTO rank (name, score) VALUES ('B', 200);
  INSERT INTO rank (name, score) VALUES ('C', 300);

  針對數據庫,我們在rank_server.py中加入下面一段代碼,用于在請求前后處理數據庫連接。

import sqlite3
  DATABASE = 'rank.db'
  @app.before_request
  def before_request():
  g.db = sqlite3.connect(DATABASE)
  @app.teardown_request
  def teardown_request(exception):
  if hasattr(g, 'db'):
  g.db.close()

  我們規定服務器和客戶端使用JSON傳輸數據。

  GET請求返回的JSON格式如下:

{
"data":
[
{
"id": 0,
"name": "A",
"score": 100
},
{
"id": 1,
"name": "B",
"score": 200
}
]
}

原文轉自:http://www.uml.org.cn/Test/201503235.asp

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97