热门标签 | 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



推荐阅读
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
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社区 版权所有