XML
可擴(kuò)展標(biāo)記語(yǔ)言(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語(yǔ)言。無(wú)限制。
<Hello>
<bcd>China</bcd>
<bcd>USA</bcd>
<bcd>UK</bcd>
</Hello>
HTML
超文本標(biāo)記語(yǔ)言。HTML是一種用來(lái)定義網(wǎng)頁(yè)的文本,可以編寫網(wǎng)頁(yè)。有規(guī)范。
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
CSS簡(jiǎn)介
CSS是Cascading Style Sheets(層疊樣式表)的簡(jiǎn)稱。是將樣式信息與網(wǎng)頁(yè)內(nèi)容分離的一種標(biāo)記語(yǔ)言。
<html>
<head>
<title>Hello</title>
<style>
h1 {
color: #333333;
font-size: 48px;
text-shadow: 3px 3px 3px #666666;
}
</style>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
JavaScript簡(jiǎn)介
JavaScript是為了讓HTML具有交互性而作為腳本語(yǔ)言添加的,JavaScript既可以內(nèi)嵌到HTML中,也可以從外部鏈接到HTML中。
<html>
<head>
<title>Hello</title>
<style>
h1 {
color: #333333;
font-size: 48px;
text-shadow: 3px 3px 3px #666666;
}
</style>
<script>
function change() {
document.getElementsByTagName('h1')[0].style.color = '#ff0000';
}
</script>
</head>
<body>
<h1 onclick="change()">Hello, world!</h1>
</body>
</html>
HTTP協(xié)議簡(jiǎn)介
HTTP是在網(wǎng)絡(luò)上傳輸HTML的協(xié)議,用于瀏覽器和服務(wù)器的通信。
超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁(yè)面的方法。
典型的響應(yīng)消息
HTTP/1.0200OK
Date:Mon,31Dec200104:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Tue,17Apr200106:46:28GMT
Etag:"a030f020ac7c01:1e9f"
Content-length:39725426
Content-range:bytes55******/40279980
在線學(xué)習(xí)網(wǎng)站w3schools
WSGI接口
WSGI:Web Server Gateway Interface。
Web應(yīng)用的本質(zhì)就是:
瀏覽器發(fā)送一個(gè)HTTP請(qǐng)求;
服務(wù)器收到請(qǐng)求,生成一個(gè)HTML文檔;
服務(wù)器把HTML文檔作為HTTP響應(yīng)的Body發(fā)送給瀏覽器;
瀏覽器收到HTTP響應(yīng),從HTTP Body取出HTML文檔并顯示。
處理底層TCP連接、HTTP原始請(qǐng)求和響應(yīng)格式
運(yùn)行WSGI服務(wù)
# hello.py
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return '<h1>Hello, web!</h1>'
# server.py
# 從wsgiref模塊導(dǎo)入:
from wsgiref.simple_server import make_server
# 導(dǎo)入我們自己編寫的application函數(shù):
from hello import application
# 創(chuàng)建一個(gè)服務(wù)器,IP地址為空,端口是8000,處理函數(shù)是application:
httpd = make_server('', 8000, application)
print "Serving HTTP on port 8000..."
# 開(kāi)始監(jiān)聽(tīng)HTTP請(qǐng)求:
httpd.serve_forever()
http://localhost:8000/ 訪問(wèn)
Flask來(lái)使用
流行的web框架flask, 是一個(gè) python web micro framework。簡(jiǎn)潔高效,使用也很簡(jiǎn)單。flask 依賴兩個(gè)庫(kù) werkzeug 和 jinjia2。采用 pip 方式安裝即可。
pip install flask
使用 flask 寫一個(gè)簡(jiǎn)單的 web 服務(wù)
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def home():
return '<h1>Home</h1>'
@app.route('/signin', methods=['GET'])
def signin_form():
return '''<form action="/signin" method="post">
<p><input name="username"></p>
<p><input name="password" type="password"></p>
<p><button type="submit">Sign In</button></p>
</form>'''
@app.route('/signin', methods=['POST'])
def signin():
# 需要從request對(duì)象讀取表單內(nèi)容:
if request.form['username']=='admin' and request.form['password']=='password':
return '<h3>Hello, admin!</h3>'
return '<h3>Bad username or password.</h3>'
if __name__ == '__main__':
app.run()
除了Flask,常見(jiàn)的Python Web框架還有:
Django:全能型Web框架;
web.py:一個(gè)小巧的Web框架;
Bottle:和Flask類似的Web框架;
Tornado:Facebook的開(kāi)源異步Web框架。
Flask默認(rèn)支持的模板是jinja2
Gunicorn
Gunicorn 綠色獨(dú)角獸 是一個(gè)Python WSGI UNIX的HTTP服務(wù)器。這是一個(gè)pre-fork worker的模型,從Ruby的獨(dú)角獸(Unicorn )項(xiàng)目移植。該Gunicorn服務(wù)器大致與各種Web框架兼容,只需非常簡(jiǎn)單的執(zhí)行,輕量級(jí)的資源消耗,以及相當(dāng)迅速。
gunicorn -w 4 -b 127.0.0.1:8000 WebModule:app
我們需要用 8000 的端口進(jìn)行訪問(wèn),原先的5000并沒(méi)有啟用。其中 gunicorn 的部署中,,-w 表示開(kāi)啟多少個(gè) worker,-b 表示 gunicorn 開(kāi)發(fā)的訪問(wèn)地址。