Bottlepy的一點(diǎn)小問(wèn)題

第一次寫(xiě)東西呀,嘻嘻??不斷學(xué)習(xí)不斷反??!


因?yàn)檫@個(gè)問(wèn)題并不清楚是不是Bottlepy的本意,所以只能稱(chēng)之為問(wèn)題而不是bug。
公司需要用網(wǎng)頁(yè)訪問(wèn)串口,網(wǎng)頁(yè)當(dāng)然只能用JS了,但是瀏覽器運(yùn)行的JS是運(yùn)行在沙箱模式下,不能訪問(wèn)串口這么底層的硬件(Node.js這種非瀏覽器運(yùn)行的JS是可以的)。走了許多彎路之后選擇用Bottlepy建立一個(gè)localhost,網(wǎng)頁(yè)再訪問(wèn)localhost即可實(shí)現(xiàn)訪問(wèn)硬件。但是,這樣直接用Ajax訪問(wèn)屬于跨域的,需要CORS相關(guān)支持。于是需要在服務(wù)器上稍微設(shè)置一下。把每次Ajax請(qǐng)求用一個(gè)header包裹一下。

@bottle.hook('after_request')
def enable_cors():
    bottle.response.headers['Access-Control-Allow-Origin'] = '*'

但是實(shí)測(cè)仍然是500錯(cuò)誤,Chrome控制臺(tái)一看Ajax并沒(méi)有header(此處應(yīng)有圖)。網(wǎng)上Google了外國(guó)人的資料并沒(méi)有有用的東西,最后還是靠國(guó)人的文章提示才弄明白(原文是互相轉(zhuǎn)載的,我也搞不清原作者是誰(shuí),一并謝過(guò))。Bottlepy的源代碼中有一段初始化header的代碼(下段被注釋掉的代碼)在我們執(zhí)行上述代碼之后,實(shí)際上等于把我們的設(shè)置都變成無(wú)用功了。修改一下,如果已經(jīng)有header了就不要初始化了,問(wèn)題解決。

class HTTPResponse(Response, BottleException):
    def __init__(self, body='', status=None, headers=None, **more_headers):
        super(HTTPResponse, self).__init__(body, status, headers, **more_headers)

    def apply(self, response):
        response._status_code = self._status_code
        response._status_line = self._status_line
        # response._headers = self._headers
        if self._headers:
            if response._headers:
                response._headers.update(self._headers)
            else:
                response._headers = self._headers
        response._cookies = self._cookies
        response.body = self.body

在GitHub上看官方解釋?zhuān)袀€(gè)人提議把@bottle.hook('after_request')改成@bottle.hook('before_request'),我并沒(méi)有試過(guò)這樣行不行。


訪問(wèn)localhost奇慢,而且第一次訪問(wèn)一定要等至少10秒鐘才會(huì)有結(jié)果,在這十秒鐘之內(nèi)的Ajax也是pending到10秒一起返回,之后的任何Ajax都要延時(shí)3到4秒。這倒不是Bottlepy的問(wèn)題,是我使用的系統(tǒng)設(shè)置問(wèn)題。貌似是因?yàn)槟J(rèn)啟用了IPv6但是實(shí)際上又沒(méi)用到IPv6導(dǎo)致的。解析localhost不是::1會(huì)花很長(zhǎng)時(shí)間,直接訪問(wèn)127.0.0.1就沒(méi)事了。


把localhost指定到0.0.0.0即可實(shí)現(xiàn)局域網(wǎng)內(nèi)任何電腦訪問(wèn)192.168.X.X(你的IP)就能訪問(wèn)你建立的localhost了。

bottle.run(host='0.0.0.0', port=8080, debug=True)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,699評(píng)論 19 139
  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對(duì)象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,580評(píng)論 0 7
  • 起兮,落兮,日月兮,白兮,黑兮, 今明兮,時(shí)間走著未來(lái), 時(shí)間留下了回憶,忘了傷,記了情。
    春城怡景閱讀 393評(píng)論 0 1
  • 15年畢業(yè)生,莫名其妙來(lái)到SZ。畢業(yè)難,找工作難,什么都碰上了。 談及大學(xué),不同的人有不同的說(shuō)法。一千個(gè)讀者眼中,...
    走著走著你就不見(jiàn)了閱讀 477評(píng)論 0 0

友情鏈接更多精彩內(nèi)容