Python Web项目Cherrypy使用方法镜像


Posted in Python onNovember 05, 2020

1、介绍

搭建Java Web项目,需要Tomcat服务器才能进行。而搭建Python Web项目,因为cherrypy自带服务器,所以只需要下载该模块就能进行Web项目开发。

2、最基本用法

实现功能:访问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能请求到该函数
  def hello_world(self):
    print('Hello')
    return 'Hello World'

  @cherrypy.expose() # 保证html能请求到该函数http://127.0.0.1:8080/index
  def index(self): # 默认页为test_cherry.html
    return open(u'test_cherry.html')


cherrypy.quickstart(TestCherry(), '/')

运行结果

[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.表示没有自己配置,使用默认配置,如果需要可自己配置

运行py脚本后,打开浏览器输入http://127.0.0.1:8080/或者http://127.0.0.1:8080/index就可以看到test_cheery.html

Python Web项目Cherrypy使用方法镜像

点击hello_world按钮,就会访问py中的hello_world函数

Python Web项目Cherrypy使用方法镜像

解释:test_cherry.html中

function callHelloWorld() {

$.get('/hello_world', function (data, status) {

alert('data:' + data)

alert('status:' + status)

})}

1)请求/hello_world需要与py中的函数名一致

2)默认端口是8080,如果8080被占用,可以重新配置

cherrypy.quickstart(TestCherry(), '/')可以接收配置参数

若多次调试出现portend.Timeout: Port 8080 not free on 127.0.0.1.错误

是因为8080端口被占用了,如果你第一次调试时成功了,则你可以打开任务管理器把python进程停掉,8080就被释放了

3、导入webbrowser进行调试开发(可以自动打开浏览器,输入网址)

py代码

# -*- encoding=utf-8 -*-

import cherrypy
import webbrowser


class TestCherry():
  @cherrypy.expose() # 保证html能请求到该函数
  def hello_world(self):
    print('Hello')
    return 'Hello World'

  @cherrypy.expose() # 保证html能请求到该函数http://127.0.0.1:8080/index
  def index(self): # 默认页为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) #启动前每次都调用auto_open函数
cherrypy.quickstart(TestCherry(), '/')

这样运行py就能自动打开网页了,每次改变html代码如果没达到预期效果,可以试一试清理浏览器缓存!!!

4、带参数的请求

实现传入参数并接收返回显示在html上

py中添加一个函数(get_parameters)

# -*- encoding=utf-8 -*-

import cherrypy
import webbrowser


class TestCherry():
  @cherrypy.expose() # 保证html能请求到该函数
  def hello_world(self):
    print('Hello')
    return 'Hello World'

  @cherrypy.expose() # 保证html能请求到该函数http://127.0.0.1:8080/index
  def index(self): # 默认页为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) # 启动前每次都调用auto_open函数
cherrypy.quickstart(TestCherry(), '/')

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

运行结果

点击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"

能看出传入的参数已经打印出来了

Python Web项目Cherrypy使用方法镜像

5、config配置以及对应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': {
      # 主机0.0.0.0表示可以使用本机IP访问,如http://10.190.20.72:8090,可部署给别人访问
      # 否则只可以用http://127.0.0.1:8090
      'server.socket_host': service.host,
      # 端口号
      'server.socket_port': service.port,
      # 当代码变动时,是否自动重启服务,True==是,False==否
      # 设为True时,当该PY代码改变,服务会重启
      'engine.autoreload.on': False
    },
    # 根目录设置
    '/': {
      '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)})
  # 当代码变动时,是否重启服务,True==是,False==否
  # cherrypy.config.update({'engine.autoreload.on': False})
  # 支持http://10.190.20.72:8080/形式
  # cherrypy.server.socket_host = '0.0.0.0'
  # 启动时调用函数
  cherrypy.engine.subscribe('start', service.auto_open)
  cherrypy.quickstart(service, '/', conf)


if __name__ == '__main__':
  pass
  main()

工程文件夹

Python Web项目Cherrypy使用方法镜像

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
python计算方程式根的方法
May 07 Python
python如何通过protobuf实现rpc
Mar 06 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 Python
学习Django知识点分享
Sep 11 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
Python把图片转化为pdf代码实例
Jul 28 Python
运行python提示no module named sklearn的解决方法
Nov 29 Python
python 实现的车牌识别项目
Jan 25 Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 Python
Python实现异步IO的示例
Nov 05 #Python
Python requests HTTP验证登录实现流程
Nov 05 #Python
Python包资源下载路径报404解决方案
Nov 05 #Python
如何一键升级Python所有包
Nov 05 #Python
python实现磁盘日志清理的示例
Nov 05 #Python
Python常用外部指令执行代码实例
Nov 05 #Python
Python Pandas数据分析工具用法实例
Nov 05 #Python
You might like
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
WINXP下apache+php4+mysql
2006/11/25 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
三级下拉菜单的js实现代码
2011/05/23 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
js实现简单的碰壁反弹效果
2016/08/30 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
JavaScript实现区块链
2018/03/14 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
python发送邮件接收邮件示例分享
2014/01/21 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
python 对象和json互相转换方法
2018/03/22 Python
使用Django连接Mysql数据库步骤
2019/01/15 Python
django2.0扩展用户字段示例
2019/02/13 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
pytorch之添加BN的实现
2020/01/06 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
护士进修自我鉴定
2014/02/07 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
初二学生评语大全
2014/12/26 职场文书
公司总经理岗位职责
2015/04/01 职场文书
材料员岗位职责范本
2015/04/11 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
Python turtle编写简单的球类小游戏
2022/03/31 Python