技術:flask框架、sse和gevent
下面的示意圖可以看出客戶端,伺服器,wsgi,程式之間的關係。
gevent.pywsgi.wsgiserver() 初始化函式:
socket使用教程:
flask 的教程:
1、render_template
不僅能渲染靜態的html檔案,也能傳遞引數給html,使乙個html模板根據引數的不同顯示不同的內容,這是因為flask使用了jinja2這個模板引擎。要使用模板,在render_template
引數中以key=value
形式傳入變數,在html中使用}
來顯示傳入的變數,例如:
# 檢視函式
def index():
return render_template('index.html', contents='this is index page')
# html
瀏覽器顯示的結果與上文是一樣的。我們還可以直接把乙個類的例項傳遞過去,並在模板中訪問類的屬性,例如假設乙個類物件obj
有a
和b
屬性,關鍵部分的**如下:
# 檢視函式中
return render_template('index.html', object=obj)
...# html中
a: }
b: }
傳入乙個字典也可以,並且在模板中既可以用dict[key]
,也可以用dict.key
。
使用過濾器,可以在html中對傳入的變數進行處理,其格式是}
,例如將前文的}
修改為}
,瀏覽器顯示的內容就變成了:
所以我們可以很容易就理解,過濾器其實就是以變數為引數的函式,返回處理後的結果,在後端一樣可以先用字串物件的upper()
函式處理好再傳遞給模板,效果是完全一樣的。jinja2自帶了一些過濾器,例如length/reverse/lower
等等 ,並且我們也可以自己按照需求自定義過濾器,模板還支援}
這樣的操作。想要深入了解的話,可以搜尋jinja2過濾器去進一步學習。
模板中還可以使用if else
和for in
控制語句,與變數使用}
不同,控制語句要放在裡,例如前文的
contents
傳入乙個list:
contents=[i for i in range(10)]
html中**如下:
使用for
遍歷contents
的內容,並用}
顯示出來,同時還用
加了乙個注釋,還要注意需要使用
來提示迴圈區域的結束,因為html不像python那樣通過縮進來判斷迴圈的區域,if
也是同理。瀏覽器顯示結果:
最後for
和if
結合使用:
}是偶數
}是奇數
結果如下(只是演示一下,不要吐槽排版和美觀):
前端模組化方案總結
js設計之初,是用來進行表單驗證等工作的,所以那個年代的js 量相當少,邏輯也是比較簡單的。但是隨著cpu 瀏覽器效能的大幅度提公升,js從乙個簡單的驗證器一躍成為當前最為流行的程式語言之一。隨之而來的是前端 量的迅速膨脹,邏輯也是變的相當複雜。如果我們還是像當初一樣,把變數和方法寫在根作用於win...
前端模組化的一些總結
目前前端模組化規範比較多,有主張非同步載入的amd和cmd,還有同步載入的commonjs,還有es6實現的esm,等等 以後再有新知識再補充 這裡做一下總結 amd和cmd都使用非同步載入的方式,代表作如下 規範代表作 amdrequirejs cmdseajs 我個人比較喜歡seajs,用起來方...
前端程式設計題 模組
完成函式 createmodule,呼叫之後滿足如下要求 1 返回乙個物件 2 物件的 greeting 屬性值等於 str1,name 屬性值等於 str2 3 物件存在乙個 sayit 方法,該方法返回的字串為 greeting屬性值 name屬性值 解決 1 字面量模式 function cr...