热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:python之Bottle框架

篇首语:本文由编程笔记#小编为大家整理,主要介绍了python之Bottle框架相关的知识,希望对你有一定的参考价值。一、简单的Bottle框架1)bott

篇首语:本文由编程笔记#小编为大家整理,主要介绍了python之Bottle框架相关的知识,希望对你有一定的参考价值。


一、简单的Bottle框架

1)bottle框架简介



安装 pip install bottle
Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架。
此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块。


bottle简介

2)bottle框架的组成部分



1、路由系统,将不同请求交由指定函数处理
2、模板系统,将模板中的特殊语法渲染成字符串,值得一说的是Bottle的模板引擎可以任意指定:Bottle内置模板、mako、jinja2、cheetah
3、公共组件,用于提供处理请求相关的信息,如:表单数据、COOKIEs、请求头等
4、服务,Bottle默认支持多种基于WSGI的服务


bottle框架的组成部分

 Bottle默认支持多种基于WSGI的服务



server_names = {
\'cgi\': CGIServer,
\'flup\': FlupFCGIServer,
\'wsgiref\': WSGIRefServer,
\'waitress\': WaitressServer,
\'cherrypy\': CherryPyServer,
\'paste\': PasteServer,
\'fapws3\': FapwsServer,
\'tornado\': TornadoServer,
\'gae\': AppEngineServer,
\'twisted\': TwistedServer,
\'diesel\': DieselServer,
\'meinheld\': MeinheldServer,
\'gunicorn\': GunicornServer,
\'eventlet\': EventletServer,
\'gevent\': GeventServer,
\'geventSocketIO\':GeventSocketIOServer,
\'rocket\': RocketServer,
\'bjoern\' : BjoernServer,
\'auto\': AutoServer,
}


WSGI的服务

3)框架的基本使用



#!/usr/bin/env python
#
-*- coding:utf-8 -*-
from bottle import template,Bottle
root
= Bottle()
@root.route(
\'/hello\')
def index():
#
return "Hello World"
return template(\'Hello {{ name }}!\',name="user")
root.run(host
=\'localhost\',port=8080)


bottle简单使用

访问:  http://localhost:8080/hello

4)对于form表单提前,python后端取值




"en">

"UTF-8">



Bottle登录系统


"/login/" method="POST">
"text" name="user" placeholder="用户名"/>
"password" name="pwd" placeholder="密码"/>
"submit" value="提交"/>




login.html


@root.route(\'/login/\',method=["POST","GET"])
def login():
if request.method == "GET":
return template(\'login.html\')
else:
u
= request.forms.get(\'user\')
p
= request.forms.get(\'pwd\')
return redirect(\'/index/\')


request.forms.get()取值

二 、路由系统

1)静态路由



@root.route(\'/hello/\')
def index():
return template(\'Hello {{name}}!\', name="User")


静态路由

2)动态路由



@root.route(\'/wiki/\')
def callback(pagename):
...

@root.route(
\'/object/\')
def callback(id):
...

@root.route(
\'/show/\')
def callback(name):
...

@root.route(
\'/static/\')
def callback(path):
return static_file(path, root=\'static\')


动态路由

3)请求方法路由



@root.route(\'/hello/\', method=\'POST\')
def index():
...

@root.
get(\'/hello/\')
def index():
...

@root.post(
\'/hello/\')
def index():
...

@root.put(
\'/hello/\')
def index():
...

@root.delete(
\'/hello/\')
def index():
...

# 第一种,写在一起
@root.route(
\'/login/\',method=["POST","GET"])
def login():
if request.method == "GET":
return template(\'login.html\')
else:
return redirect(\'/index/\')

# 第二种,分开写
@root.route(
\'/login/\',method="POST")
def index():
return template(\'login.html\')
@root.route(
\'/login/\',method="GET")
def index():
return template(\'login.html\')


请求方法路由

4)二级路由,路由分发

主路由编辑



#!/usr/bin/env python
#
-*- coding:utf-8 -*-
from bottle import template, Bottle
from bottle import static_file
root
= Bottle()

@root.route(
\'/hello/\')
def index():
return template(\'Root {{name}}!\', name="Alex")

from framwork_bottle import app01
from framwork_bottle import app02

root.mount(
\'app01\', app01.app01)
root.mount(
\'app02\', app02.app02)

root.run(host
=\'localhost\', port=8080)


总路由编辑

二级路由编辑



#!/usr/bin/env python
#
-*- coding:utf-8 -*-
from bottle import template, Bottle
app01
= Bottle()
@app01.route(
\'/hello/\', method=\'GET\')
def index():
return template(\'App01!\')


二级路由

 三、模板系统

 1)配置模板使用路径


import bottle
bottle.TEMPLATE_PATH.append(
\'./templates/\')

2)模板语言的常用方法

2.1)前后端结合

路由传值给前端模板



@root.route(\'/index/\',method="GET")
def index():
user_list
= [
{
\'id\':1,\'name\':\'root\',\'age\':18},
{
\'id\':1,\'name\':\'root\',\'age\':18},
{
\'id\':1,\'name\':\'root\',\'age\':18},
{
\'id\':1,\'name\':\'root\',\'age\':18},
]
return template(\'index.html\',name=\'superbody\',user_list=user_list)


python后端传值

前端调用值




"en">

"UTF-8">





    {{name}}
    % for item in user_list:
  • {{item[\'id\']}}-{{item[\'name\']}}

  • % end

    % laogao = "guaizi"
    {{laogao}}


{{get(\'age\',\'123\')}}




index.html

2.2)include 引用文件的标签



{{title}}



被引用的文件,tpl.html



"en">

"UTF-8">




% include(\'tpl.html\',title=\'搞事情\')



index.html调用tpl.html

2.3) rebase 引用文件的标签








{{
!base}}



base.html

导入基础模板


% rebase(\'base.tpl\', title=\'Page Title\')

Page Content ...


2.4)常用方法归纳


1、单值
2、单行Python代码
3、Python代码快
4、Python、Html混合

 示例



1、单值


{{name}}

2、单行Python代码


% s1 = "hello"


3、Python代码块


<%
# A block of python code
name
= name.title().strip()
if name == "Alex":
name
="seven"
%>


4、Python、Html混合



% if True:
{{name}}
% end

    % for item in name:
  • {{item}}

  • % end


html模板语音归纳

2.5)如果没有该值的情况下的默认值设置



# 检查当前变量是否已经被定义,已定义True,未定义False
defined(name)
# 获取某个变量的值,不存在时可设置默认值
get(name, default=None)

{{get(\'age\',\'123\')}}

# 如果变量不存在时,为变量设置默认值
setdefault(name,
default)

默认值

2.6){{ wupeiqi() }} 。定义函数,python后端定义函数,html前端调用函数执行



#!/usr/bin/env python
#
-*- coding:utf-8 -*-
from bottle import template, Bottle,SimpleTemplate
root
= Bottle()
def custom():
return \'123123\'
@root.route(
\'/hello/\')
def index():
# 默认情况下去目录:[
\'./\', \'./views/\']中寻找模板文件 hello_template.html
# 配置在 bottle.TEMPLATE_PATH 中
return template(\'hello_template.html\', name=\'alex\', wupeiqi=custom)
root.run(host
=\'localhost\', port=8080)


main.py




"en">
"UTF-8">



自定义函数


{{ wupeiqi() }}



hello_template.html

2.6.1){{ !wupeiqi() }}。渲染引用的html标签

被调用的python函数


def custom():
return \'

hello world

\'

前端使用



自定义函数


{{
!wupeiqi() }}

 2.7)替换模板。



from bottle import jinja2_template
@root.route(
\'/login/\',method=["POST","GET"])
def login():
return jinja2_template(\'login.html\')


替换模板

 jinja2_template模板与django模板使用一样

四、公共组件

1)request:Bottle中的request其实是一个LocalReqeust对象,其中封装了用户请求的相关信息



request.headers
请求头信息

request.query
get请求信息

request.forms
post请求信息

request.files
上传文件信息

request.
params
get和post请求信息

request.GET
get请求信息

request.POST
post和上传信息

request.COOKIEs
COOKIE信息

request.environ
环境相关相关


请求信息

2)response:Bottle中的request其实是一个LocalResponse对象,其中框架即将返回给用户的相关信息



response
response.status_line
状态行

response.status_code
状态码

response.headers
响应头

response.charset
编码

response.set_COOKIE
在浏览器上设置COOKIE

response.delete_COOKIE
在浏览器上删除COOKIE


View Code

五、Bottle支持的WSGI



server_names = {
\'cgi\': CGIServer,
\'flup\': FlupFCGIServer,
\'wsgiref\': WSGIRefServer,
\'waitress\': WaitressServer,
\'cherrypy\': CherryPyServer,
\'paste\': PasteServer,
\'fapws3\': FapwsServer,
\'tornado\': TornadoServer,
\'gae\': AppEngineServer,
\'twisted\': TwistedServer,
\'diesel\': DieselServer,
\'meinheld\': MeinheldServer,
\'gunicorn\': GunicornServer,
\'eventlet\': EventletServer,
\'gevent\': GeventServer,
\'geventSocketIO\':GeventSocketIOServer,
\'rocket\': RocketServer,
\'bjoern\' : BjoernServer,
\'auto\': AutoServer,
}


wsgi服务

使用时,只需在主app执行run方法时指定参数即可:



#!/usr/bin/env python
#
-*- coding:utf-8 -*-
from bottle import Bottle
root
= Bottle()

@root.route(
\'/hello/\')
def index():
return "Hello World"
# 默认server =
\'wsgiref\',性能最差,测试专用
root.run(host
=\'localhost\', port=8080, server=\'wsgiref\')


main.py

使用Python内置模块wsgiref,如果想要使用其他时,则需要首先安装相关类库,然后才能使用

六、数据库操作

可手写orm框架,或者pymysql使用

 

原文出处:https://www.cnblogs.com/wupeiqi/articles/5341480.html



推荐阅读
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 深入体验Python的高级交互式Shell - IPython
    IPython 是一个增强型的 Python 交互式 Shell,提供了比标准 Python 控制台更为强大的功能,适用于开发和调试过程。它不仅支持直接执行 Linux 命令,还提供了丰富的特性来提高编程效率。 ... [详细]
  • 本文介绍如何在阿里云环境中利用 Docker 容器化技术部署一个简单的 Flask Web 应用,并确保其可通过互联网访问。内容涵盖 Python 代码编写、Dockerfile 配置、镜像构建及容器运行等步骤。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文记录了在Windows 8.1系统环境下,使用IIS 8.5和Visual Studio 2013部署Orchard 1.7.2过程中遇到的问题及解决方案,包括503服务不可用错误和web.config配置错误。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
author-avatar
小女人的忧伤--
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有