Python Web項目Cherrypy使用方法鏡像
1、介紹
搭建Java Web項目,需要Tomcat服務(wù)器才能進(jìn)行。而搭建Python Web項目,因為cherrypy自帶服務(wù)器,所以只需要下載該模塊就能進(jìn)行Web項目開發(fā)。
2、最基本用法
實現(xiàn)功能:訪問html頁面,點擊按鈕后接收后臺py返回的值
html頁面(test_cherry.html)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test Cherry</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<h1>Test Cherry</h1>
<p id="p1"></p>
<button type="button" onclick="callHelloWorld()">hello_world</button>
<script>
function callHelloWorld() {
$.get('/hello_world', function (data, status) {
alert('data:' + data)
alert('status:' + status)
})
}
</script>
</body>
</html>
編寫腳本py
# -*- encoding=utf-8 -*-
import cherrypy
class TestCherry():
@cherrypy.expose() # 保證html能請求到該函數(shù)
def hello_world(self):
print('Hello')
return 'Hello World'
@cherrypy.expose() # 保證html能請求到該函數(shù)http://127.0.0.1:8080/index
def index(self): # 默認(rèn)頁為test_cherry.html
return open(u'test_cherry.html')
cherrypy.quickstart(TestCherry(), '/')
運行結(jié)果
[27/May/2020:09:04:42] ENGINE Listening for SIGTERM.
[27/May/2020:09:04:42] ENGINE Bus STARTING
CherryPy Checker:
The Application mounted at '' has an empty config.[27/May/2020:09:04:42] ENGINE Set handler for console events.
[27/May/2020:09:04:42] ENGINE Started monitor thread 'Autoreloader'.
[27/May/2020:09:04:42] ENGINE Serving on http://127.0.0.1:8080
[27/May/2020:09:04:42] ENGINE Bus STARTED
能看到啟動的路徑為127.0.0.1::8080端口號是8080
The Application mounted at '' has an empty config.表示沒有自己配置,使用默認(rèn)配置,如果需要可自己配置
運行py腳本后,打開瀏覽器輸入http://127.0.0.1:8080/或者h(yuǎn)ttp://127.0.0.1:8080/index就可以看到test_cheery.html

點擊hello_world按鈕,就會訪問py中的hello_world函數(shù)

解釋:test_cherry.html中
function callHelloWorld() {
$.get('/hello_world', function (data, status) {
alert('data:' + data)
alert('status:' + status)
})}
1)請求/hello_world需要與py中的函數(shù)名一致
2)默認(rèn)端口是8080,如果8080被占用,可以重新配置
cherrypy.quickstart(TestCherry(), '/')可以接收配置參數(shù)
若多次調(diào)試出現(xiàn)portend.Timeout: Port 8080 not free on 127.0.0.1.錯誤
是因為8080端口被占用了,如果你第一次調(diào)試時成功了,則你可以打開任務(wù)管理器把python進(jìn)程停掉,8080就被釋放了
3、導(dǎo)入webbrowser進(jìn)行調(diào)試開發(fā)(可以自動打開瀏覽器,輸入網(wǎng)址)
py代碼
# -*- encoding=utf-8 -*-
import cherrypy
import webbrowser
class TestCherry():
@cherrypy.expose() # 保證html能請求到該函數(shù)
def hello_world(self):
print('Hello')
return 'Hello World'
@cherrypy.expose() # 保證html能請求到該函數(shù)http://127.0.0.1:8080/index
def index(self): # 默認(rèn)頁為test_cherry.html
return open(u'test_cherry.html')
def auto_open():
webbrowser.open('http://127.0.0.1:8080/')
cherrypy.engine.subscribe('start', auto_open) #啟動前每次都調(diào)用auto_open函數(shù)
cherrypy.quickstart(TestCherry(), '/')
這樣運行py就能自動打開網(wǎng)頁了,每次改變html代碼如果沒達(dá)到預(yù)期效果,可以試一試清理瀏覽器緩存?。?!
4、帶參數(shù)的請求
實現(xiàn)傳入?yún)?shù)并接收返回顯示在html上
py中添加一個函數(shù)(get_parameters)
# -*- encoding=utf-8 -*-
import cherrypy
import webbrowser
class TestCherry():
@cherrypy.expose() # 保證html能請求到該函數(shù)
def hello_world(self):
print('Hello')
return 'Hello World'
@cherrypy.expose() # 保證html能請求到該函數(shù)http://127.0.0.1:8080/index
def index(self): # 默認(rèn)頁為test_cherry.html
return open(u'test_cherry.html')
@cherrypy.expose()
def get_parameters(self, name, age, **kwargs):
print('name:{}'.format(name))
print('age:{}'.format(age))
print('kwargs:{}'.format(kwargs))
return 'Get parameters success'
def auto_open():
webbrowser.open('http://127.0.0.1:8080/')
cherrypy.engine.subscribe('start', auto_open) # 啟動前每次都調(diào)用auto_open函數(shù)
cherrypy.quickstart(TestCherry(), '/')
html中添加一個新按鈕和對應(yīng)按鈕事件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test Cherry</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<h1>Test Cherry</h1>
<p id="p1"></p>
<button type="button" onclick="callHelloWorld()">hello_world</button>
<button type="button" id="postForParameters">get_parameters</button>
<p id="getReturn"></p>
<script>
function callHelloWorld() {
$.get('/hello_world', function (data, status) {
alert('data:' + data)
alert('status:' + status)
})
}
$(document).ready(function () {
$('#postForParameters').click(function () {
alert('pst')
$.post('/get_parameters',
{
name: 'TXT',
age: 99,
other: '123456'
},
function (data, status) {
if (status === 'success') {
$('#getReturn').text(data)
}
})
})
})
</script>
</body>
</html>
運行結(jié)果
點擊get_parameters按鈕后
D:\Python37_32\python.exe D:/B_CODE/Python/WebDemo/test_cherry.py
[27/May/2020:09:58:40] ENGINE Listening for SIGTERM.
[27/May/2020:09:58:40] ENGINE Bus STARTING
CherryPy Checker:
The Application mounted at '' has an empty config.[27/May/2020:09:58:40] ENGINE Set handler for console events.
[27/May/2020:09:58:40] ENGINE Started monitor thread 'Autoreloader'.
[27/May/2020:09:58:41] ENGINE Serving on http://127.0.0.1:8080
[27/May/2020:09:58:41] ENGINE Bus STARTED
127.0.0.1 - - [27/May/2020:09:58:41] "GET / HTTP/1.1" 200 1107 "" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
127.0.0.1 - - [27/May/2020:09:59:37] "GET / HTTP/1.1" 200 1136 "" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
127.0.0.1 - - [27/May/2020:09:59:37] "GET /favicon.ico HTTP/1.1" 200 1406 "http://127.0.0.1:8080/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
127.0.0.1 - - [27/May/2020:10:02:50] "GET / HTTP/1.1" 200 1208 "" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
127.0.0.1 - - [27/May/2020:10:02:50] "GET /favicon.ico HTTP/1.1" 200 1406 "http://127.0.0.1:8080/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
name:TXT
age:99
kwargs:{'other': '123456'}
127.0.0.1 - - [27/May/2020:10:02:54] "POST /get_parameters HTTP/1.1" 200 22 "http://127.0.0.1:8080/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
能看出傳入的參數(shù)已經(jīng)打印出來了

5、config配置以及對應(yīng)url(追加,所以代碼不同了)
# -*- encoding=utf-8 -*-
import json
import os
import webbrowser
import cherrypy
class Service(object):
def __init__(self, port):
self.media_folder = os.path.abspath(os.path.join(os.getcwd(), 'media'))
self.host = '0.0.0.0'
self.port = int(port)
self.index_html = 'index.html'
pass
@cherrypy.expose()
def index(self):
return open(os.path.join(self.media_folder, self.index_html), 'rb')
def auto_open(self):
webbrowser.open('http://127.0.0.1:{}/'.format(self.port))
@cherrypy.expose()
def return_info(self, sn):
cherrypy.response.headers['Content-Type'] = 'application/json'
cherrypy.response.headers['Access-Control-Allow-Origin'] = '*'
my_dict = {'aaa':'123'}# 或者用list[]可保證有序
return json.dumps(my_dict).encode('utf-8')
def main():
service = Service(8090)
conf = {
'global': {
# 主機(jī)0.0.0.0表示可以使用本機(jī)IP訪問,如http://10.190.20.72:8090,可部署給別人訪問
# 否則只可以用http://127.0.0.1:8090
'server.socket_host': service.host,
# 端口號
'server.socket_port': service.port,
# 當(dāng)代碼變動時,是否自動重啟服務(wù),True==是,F(xiàn)alse==否
# 設(shè)為True時,當(dāng)該PY代碼改變,服務(wù)會重啟
'engine.autoreload.on': False
},
# 根目錄設(shè)置
'/': {
'tools.staticdir.on': True,
'tools.staticdir.dir': service.media_folder
},
'/static': {
'tools.staticdir.on': True,
# 可以這么訪問http://127.0.0.1:8090/static加上你的資源,例如
# http://127.0.0.1:8090/static/js/jquery-1.11.3.min.js
'tools.staticdir.dir': service.media_folder
},
}
# 可以使用該種寫法代替config配置
# cherrypy.config.update(
# {'server.socket_port': service.port})
# cherrypy.config.update(
# {'server.thread_pool': int(service.thread_pool_count)})
# 當(dāng)代碼變動時,是否重啟服務(wù),True==是,F(xiàn)alse==否
# cherrypy.config.update({'engine.autoreload.on': False})
# 支持http://10.190.20.72:8080/形式
# cherrypy.server.socket_host = '0.0.0.0'
# 啟動時調(diào)用函數(shù)
cherrypy.engine.subscribe('start', service.auto_open)
cherrypy.quickstart(service, '/', conf)
if __name__ == '__main__':
pass
main()
工程文件夾

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python taipy庫輕松地將數(shù)據(jù)和機(jī)器學(xué)習(xí)模型轉(zhuǎn)為功能性Web應(yīng)用
- Python streamlit構(gòu)建令人驚嘆的可視化Web高級主題界面
- 使用Python Flask構(gòu)建輕量級靈活的Web應(yīng)用實例探究
- Python?PyWebIO開發(fā)Web應(yīng)用實例探究
- Python Shiny庫創(chuàng)建交互式Web應(yīng)用及高級功能案例
- Python?Web開發(fā)通信協(xié)議WSGI?uWSGI?uwsgi使用對比全面介紹
- Python實現(xiàn)Web指紋識別實例
- 極簡Python庫CherryPy構(gòu)建高性能Web應(yīng)用實例探索
相關(guān)文章
利用Python實現(xiàn)去重聚合Excel數(shù)據(jù)并對比兩份數(shù)據(jù)的差異
在數(shù)據(jù)處理過程中,常常需要將多個數(shù)據(jù)表進(jìn)行合并,并進(jìn)行比對,以便找出數(shù)據(jù)的差異和共同之處,本文將介紹如何使用 Pandas 庫對兩個 Excel 數(shù)據(jù)表進(jìn)行合并與比對,需要的可以參考下2023-11-11
Python 之pandas庫的安裝及庫安裝方法小結(jié)
Pandas 是一種開源的、易于使用的數(shù)據(jù)結(jié)構(gòu)和Python編程語言的數(shù)據(jù)分析工具,它與 Scikit-learn 兩個模塊幾乎提供了數(shù)據(jù)科學(xué)家所需的全部工具,今天通過本文給大家介紹Python 之pandas庫的安裝及庫安裝方法小結(jié),感興趣的朋友跟隨小編一起看看吧2022-11-11
pytorch 求網(wǎng)絡(luò)模型參數(shù)實例
今天小編就為大家分享一篇pytorch 求網(wǎng)絡(luò)模型參數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python中的Descriptor描述符學(xué)習(xí)教程
簡單來說,數(shù)據(jù)描述符是指實現(xiàn)了__get__、__set__、__del__方法的類屬性,等效于定義了三個方法的接口,下面就來詳細(xì)看一下Python中的Descriptor修飾符學(xué)習(xí)教程2016-06-06
Python的代理類實現(xiàn),控制訪問和修改屬性的權(quán)限你都了解嗎
這篇文章主要為大家詳細(xì)介紹了Python的代理類實現(xiàn),控制訪問和修改屬性的權(quán)限,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03

