篇首语:本文由编程笔记#小编为大家整理,主要介绍了python之Bottle框架相关的知识,希望对你有一定的参考价值。
一、简单的Bottle框架
1)bottle框架简介
安装 pip install bottle
Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架。
此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块。
2)bottle框架的组成部分
1、路由系统,将不同请求交由指定函数处理
2、模板系统,将模板中的特殊语法渲染成字符串,值得一说的是Bottle的模板引擎可以任意指定:Bottle内置模板、mako、jinja2、cheetah
3、公共组件,用于提供处理请求相关的信息,如:表单数据、COOKIEs、请求头等
4、服务,Bottle默认支持多种基于WSGI的服务
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,
}
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)
访问: http://localhost:8080/hello
4)对于form表单提前,python后端取值
"en">
"UTF-8">
@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/\')
二 、路由系统
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)
前端调用值
"en">
"UTF-8">
2.2)include 引用文件的标签
"en">
"UTF-8">
% include(\'tpl.html\',title=\'搞事情\')
2.3) rebase 引用文件的标签
{{!base}}
导入基础模板
% rebase(\'base.tpl\', title=\'Page Title\')
Page Content ...
2.4)常用方法归纳
1、单值
2、单行Python代码
3、Python代码快
4、Python、Html混合
示例
2.5)如果没有该值的情况下的默认值设置
# 检查当前变量是否已经被定义,已定义True,未定义False
defined(name)
# 获取某个变量的值,不存在时可设置默认值
get(name, default=None)
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)
"en">
"UTF-8">
2.6.1){{ !wupeiqi() }}。渲染引用的html标签
被调用的python函数
def custom():
return \'hello world
\'
前端使用
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
五、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,
}
使用时,只需在主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\')
使用Python内置模块wsgiref,如果想要使用其他时,则需要首先安装相关类库,然后才能使用
六、数据库操作
可手写orm框架,或者pymysql使用
原文出处:https://www.cnblogs.com/wupeiqi/articles/5341480.html