摘要:項目介紹用語言來寫一個,數據庫使用。如此選擇,主要目的是針對中小規模的網絡應用,能充分利用關系數據庫的種種優勢,來實現豐富的現代互聯網應用。經搜索,還需要配置后面兩個環境變量才能正常運行,大概原因是版本與之間的區別。
項目介紹一直在用node.js做后端,要逐步涉獵大數據范圍,注定繞不過python,因此決定把一些成熟的東西用python來重寫,一是開拓思路、通過比較來深入學習python;二是有目標,有動力,希望能持之以恒的堅持下去。
用python語言來寫一個restful api service,數據庫使用mysql。因為只做后端微服務,并且ORM的實現方式,采用自動生成SQL的方式來完成,因此選擇了輕量級的flask作為web框架。如此選擇,主要目的是針對中小規模的網絡應用,能充分利用關系數據庫的種種優勢,來實現豐富的現代互聯網應用。
restful apirestful api 的概念就不介紹了。這里說一下我們實現協議形式:
[GET]/rs/user/{id}/key1/value1/key2/value2/.../keyn/valuen [POST]/rs/user[/{id}] [PUT]/rs/user/{id} [DELETE]/rs/user/{id}/key1/value1/key2/value2/.../keyn/valuen
說明:
rs為資源標識;
第二節,user,會被解析為數據庫表名;
查詢時,id為空或0時,id會被忽略,即為列表查詢;
新建和修改,除接收form表單外,url中的id參數也會被合并到參數集合中;
刪除同查詢。
讓flask支持正則表達式flask默認路由不支持正則表達式,而我需要截取完整的URL自己來解析,經查詢,按以下步驟很容易完成任務。
使用werkzeug庫 :from werkzeug.routing import BaseConverter
定義轉換器:
class RegexConverter(BaseConverter): def __init__(self, map, *args): self.map = map self.regex = args[0]
注冊轉換器 : app.url_map.converters["regex"] = RegexConverter
用正則來截取url : @app.route("/rs/
幾點疑問:
正則(.*)理論上應該是匹配任何除回車的所有字符,但不知道為什么,在這里不識別問號(?)
我用request.data來取表單數據,為何request.form取不到?
"/rs/
解析json數據很容易,但我需要對客戶端送上來的數據進行校驗,下面是用異常處理又只解析一次的解決方案。
def check_json_format(raw_msg): try: js = json.loads(raw_msg, encoding="utf-8") except ValueError: return False, {} return True, jsURL解析
按既定協議解析URL,提取表名,為生成sql組合參數集合。
@app.route("/rs/pycharm項目配置", methods=["PUT", "DELETE", "POST", "GET"]) def rs(query_url): (flag, params) = check_json_format(request.data) urls = query_url.split("/") url_len = len(urls) if url_len < 1 or url_len > 2 and url_len % 2 == 1: return "The params is wrong." ps = {} for i, al in enumerate(urls): if i == 0: table = al elif i == 1: idd = al elif i > 1 and i % 2 == 0: tmp = al else: ps[tmp] = al ps["table"] = table if url_len > 1: ps["id"] = idd if request.method == "POST" or request.method == "PUT": params = dict(params, **{"table": ps.get("table"), "id": ps.get("id")}) if request.method == "GET" or request.method == "DELETE": params = ps return jsonify(params)
配置好Run/Debug Configurations才能在IDE中運行并單步調試,可以很熟悉flask框架的運行原理。
Script path : /usr/local/bin/flask
Parameters : run
環境變量
FLASK_APP = index.py
LC_ALL = en_US.utf-8
LANG = en_US.utf-8
本以為配置完上面三條就能運行了,因為在終端模擬器上就已經能正常運行。結果在IDE中出現了一堆莫名的錯誤,仔細看,大概是編碼配置的問題。經搜索,還需要配置后面兩個環境變量才能正常運行,大概原因是python版本2與3之間的區別。
完整代碼git clone https://github.com/zhoutk/pyrest.git cd pyrest export FLASK_APP=index.py flask run小結
今天利用flask完成了web基礎架構,能夠正確解析URL,提取客戶端提交的數據,按請求的不同方式來組合我們需要的數據。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44533.html
摘要:今天項目已經能夠做一個簡單的后端服務了,在中新建一個表,就能自動提供的服務了。函數用來區分是查詢還是執行操作。字段組合值組合,由元組轉換為數組配置相應的占位符修改接口以字典形式提供參數,占位符的形式為,只支持按主鍵進行修改。 今天項目已經能夠做一個簡單的后端服務了,在mysql中新建一個表,就能自動提供restful api的CURD服務了。 關鍵點 根據REST的四種動詞形式,動態...
摘要:今天我來和大家分享一下以及自動化生成工具的開發經驗。代碼生成工具接著講講代碼生成工具,對于來講,有官方的代碼生成器,還有其他的同類開源項目比如。現有的代碼生成器沒有可以開箱即用的,都需要去進行不少的修改。 前言 在開發工作中,經常會遇到新產品、服務上線后,需要將其 API 編寫不同語言的 SDK。但不同語言 SDK 中都有很大一部分內容是用來進行 API 的描述,而且這部分代碼量是最大...
摘要:今天我來和大家分享一下以及自動化生成工具的開發經驗。代碼生成工具接著講講代碼生成工具,對于來講,有官方的代碼生成器,還有其他的同類開源項目比如。現有的代碼生成器沒有可以開箱即用的,都需要去進行不少的修改。 前言 在開發工作中,經常會遇到新產品、服務上線后,需要將其 API 編寫不同語言的 SDK。但不同語言 SDK 中都有很大一部分內容是用來進行 API 的描述,而且這部分代碼量是最大...
閱讀 2384·2023-04-26 02:54
閱讀 2307·2021-10-14 09:43
閱讀 3341·2021-09-22 15:19
閱讀 2837·2019-08-30 15:44
閱讀 2697·2019-08-30 12:54
閱讀 980·2019-08-29 18:43
閱讀 1932·2019-08-29 17:12
閱讀 1325·2019-08-29 16:40