摘要:項(xiàng)目介紹用語言來寫一個(gè),數(shù)據(jù)庫使用。如此選擇,主要目的是針對(duì)中小規(guī)模的網(wǎng)絡(luò)應(yīng)用,能充分利用關(guān)系數(shù)據(jù)庫的種種優(yōu)勢,來實(shí)現(xiàn)豐富的現(xiàn)代互聯(lián)網(wǎng)應(yīng)用。經(jīng)搜索,還需要配置后面兩個(gè)環(huán)境變量才能正常運(yùn)行,大概原因是版本與之間的區(qū)別。
項(xiàng)目介紹一直在用node.js做后端,要逐步涉獵大數(shù)據(jù)范圍,注定繞不過python,因此決定把一些成熟的東西用python來重寫,一是開拓思路、通過比較來深入學(xué)習(xí)python;二是有目標(biāo),有動(dòng)力,希望能持之以恒的堅(jiān)持下去。
用python語言來寫一個(gè)restful api service,數(shù)據(jù)庫使用mysql。因?yàn)橹蛔龊蠖宋⒎?wù),并且ORM的實(shí)現(xiàn)方式,采用自動(dòng)生成SQL的方式來完成,因此選擇了輕量級(jí)的flask作為web框架。如此選擇,主要目的是針對(duì)中小規(guī)模的網(wǎng)絡(luò)應(yīng)用,能充分利用關(guān)系數(shù)據(jù)庫的種種優(yōu)勢,來實(shí)現(xiàn)豐富的現(xiàn)代互聯(lián)網(wǎng)應(yīng)用。
restful apirestful api 的概念就不介紹了。這里說一下我們實(shí)現(xiàn)協(xié)議形式:
[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為資源標(biāo)識(shí);
第二節(jié),user,會(huì)被解析為數(shù)據(jù)庫表名;
查詢時(shí),id為空或0時(shí),id會(huì)被忽略,即為列表查詢;
新建和修改,除接收form表單外,url中的id參數(shù)也會(huì)被合并到參數(shù)集合中;
刪除同查詢。
讓flask支持正則表達(dá)式flask默認(rèn)路由不支持正則表達(dá)式,而我需要截取完整的URL自己來解析,經(jīng)查詢,按以下步驟很容易完成任務(wù)。
使用werkzeug庫 :from werkzeug.routing import BaseConverter
定義轉(zhuǎn)換器:
class RegexConverter(BaseConverter): def __init__(self, map, *args): self.map = map self.regex = args[0]
注冊(cè)轉(zhuǎn)換器 : app.url_map.converters["regex"] = RegexConverter
用正則來截取url : @app.route("/rs/
幾點(diǎn)疑問:
正則(.*)理論上應(yīng)該是匹配任何除回車的所有字符,但不知道為什么,在這里不識(shí)別問號(hào)(?)
我用request.data來取表單數(shù)據(jù),為何request.form取不到?
"/rs/
解析json數(shù)據(jù)很容易,但我需要對(duì)客戶端送上來的數(shù)據(jù)進(jìn)行校驗(yàn),下面是用異常處理又只解析一次的解決方案。
def check_json_format(raw_msg): try: js = json.loads(raw_msg, encoding="utf-8") except ValueError: return False, {} return True, jsURL解析
按既定協(xié)議解析URL,提取表名,為生成sql組合參數(shù)集合。
@app.route("/rs/pycharm項(xiàng)目配置", 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中運(yùn)行并單步調(diào)試,可以很熟悉flask框架的運(yùn)行原理。
Script path : /usr/local/bin/flask
Parameters : run
環(huán)境變量
FLASK_APP = index.py
LC_ALL = en_US.utf-8
LANG = en_US.utf-8
本以為配置完上面三條就能運(yùn)行了,因?yàn)樵诮K端模擬器上就已經(jīng)能正常運(yùn)行。結(jié)果在IDE中出現(xiàn)了一堆莫名的錯(cuò)誤,仔細(xì)看,大概是編碼配置的問題。經(jīng)搜索,還需要配置后面兩個(gè)環(huán)境變量才能正常運(yùn)行,大概原因是python版本2與3之間的區(qū)別。
完整代碼git clone https://github.com/zhoutk/pyrest.git cd pyrest export FLASK_APP=index.py flask run小結(jié)
今天利用flask完成了web基礎(chǔ)架構(gòu),能夠正確解析URL,提取客戶端提交的數(shù)據(jù),按請(qǐng)求的不同方式來組合我們需要的數(shù)據(jù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/44533.html
摘要:今天項(xiàng)目已經(jīng)能夠做一個(gè)簡單的后端服務(wù)了,在中新建一個(gè)表,就能自動(dòng)提供的服務(wù)了。函數(shù)用來區(qū)分是查詢還是執(zhí)行操作。字段組合值組合,由元組轉(zhuǎn)換為數(shù)組配置相應(yīng)的占位符修改接口以字典形式提供參數(shù),占位符的形式為,只支持按主鍵進(jìn)行修改。 今天項(xiàng)目已經(jīng)能夠做一個(gè)簡單的后端服務(wù)了,在mysql中新建一個(gè)表,就能自動(dòng)提供restful api的CURD服務(wù)了。 關(guān)鍵點(diǎn) 根據(jù)REST的四種動(dòng)詞形式,動(dòng)態(tài)...
摘要:今天我來和大家分享一下以及自動(dòng)化生成工具的開發(fā)經(jīng)驗(yàn)。代碼生成工具接著講講代碼生成工具,對(duì)于來講,有官方的代碼生成器,還有其他的同類開源項(xiàng)目比如。現(xiàn)有的代碼生成器沒有可以開箱即用的,都需要去進(jìn)行不少的修改。 前言 在開發(fā)工作中,經(jīng)常會(huì)遇到新產(chǎn)品、服務(wù)上線后,需要將其 API 編寫不同語言的 SDK。但不同語言 SDK 中都有很大一部分內(nèi)容是用來進(jìn)行 API 的描述,而且這部分代碼量是最大...
摘要:今天我來和大家分享一下以及自動(dòng)化生成工具的開發(fā)經(jīng)驗(yàn)。代碼生成工具接著講講代碼生成工具,對(duì)于來講,有官方的代碼生成器,還有其他的同類開源項(xiàng)目比如。現(xiàn)有的代碼生成器沒有可以開箱即用的,都需要去進(jìn)行不少的修改。 前言 在開發(fā)工作中,經(jīng)常會(huì)遇到新產(chǎn)品、服務(wù)上線后,需要將其 API 編寫不同語言的 SDK。但不同語言 SDK 中都有很大一部分內(nèi)容是用來進(jìn)行 API 的描述,而且這部分代碼量是最大...
閱讀 2394·2023-04-26 02:54
閱讀 2317·2021-10-14 09:43
閱讀 3366·2021-09-22 15:19
閱讀 2846·2019-08-30 15:44
閱讀 2704·2019-08-30 12:54
閱讀 988·2019-08-29 18:43
閱讀 1939·2019-08-29 17:12
閱讀 1333·2019-08-29 16:40