国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用python寫通用restful api service(一)

LoftySoul / 2323人閱讀

摘要:項(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ū)別。

一直在用node.js做后端,要逐步涉獵大數(shù)據(jù)范圍,注定繞不過python,因此決定把一些成熟的東西用python來重寫,一是開拓思路、通過比較來深入學(xué)習(xí)python;二是有目標(biāo),有動(dòng)力,希望能持之以恒的堅(jiān)持下去。

項(xiàng)目介紹

用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 api

restful 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/", methods=["PUT", "DELETE", "POST", "GET"])

幾點(diǎn)疑問:

正則(.*)理論上應(yīng)該是匹配任何除回車的所有字符,但不知道為什么,在這里不識(shí)別問號(hào)(?)

我用request.data來取表單數(shù)據(jù),為何request.form取不到?

"/rs/"):query_url>"后若加個(gè)反斜杠("/rs/"):query_url>/"),request.data就取不到數(shù)據(jù),為什么?

解析json數(shù)據(jù)

解析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, js
URL解析

按既定協(xié)議解析URL,提取表名,為生成sql組合參數(shù)集合。

@app.route("/rs/", 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)
pycharm項(xiàng)目配置

配置好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

相關(guān)文章

  • pythonrestful api service(二)

    摘要:今天項(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)...

    liangzai_cool 評(píng)論0 收藏0
  • 自動(dòng)化代碼生成工具 Snips 開發(fā)實(shí)踐

    摘要:今天我來和大家分享一下以及自動(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 的描述,而且這部分代碼量是最大...

    only_do 評(píng)論0 收藏0
  • 自動(dòng)化代碼生成工具 Snips 開發(fā)實(shí)踐

    摘要:今天我來和大家分享一下以及自動(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 的描述,而且這部分代碼量是最大...

    qc1iu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

LoftySoul

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<