赞
踩
在了解的bottle的时候,我有一个疑问:web框架是什么? 为了解决什么问题使这种框架产生?
我首先整体了解了一下bottle的功能,再去网上查找了一些web框架的信息(web框架理解参考文章)。下边是我的理解:
- web框架启动后提供一个web服务
- web框架对web的各个过程进行了封装。我们知道http协议是一种请求-响应模型。在整个完成过程中,我们需要确定 methods,url(http://ip:port:/uri),header,body,response,response code等信息。这些都由web框架完成
bottle 是一个快速而简单的、由 Python 包装为一个单一文件的Web 框架.主要功能有:
from bottle import route,run,post,get,request,static_file,error @route('/he/:name') def index(name = "world"): # return '<a href="/login">Go to Hello World Page</a>' return '<strong>hello {}!'.format(name) # id是路径中的一个变量,这里表示其值可以是纯数字,一种正则形式 @route('/china/:id#[0-9]+#') def hh(id): return 'object id {}'.format(id) @route("/file/:filename") def server_file(filename): return static_file(filename=filename,root='C:\Users\zhangaj\Desktop') @route('/post_test', method='POST') def post_test(): data = request.body.read() logging.info(str(data,encoding='utf8')) return '接收成功,数据为:'+ str(data,encoding='utf8')
route()
以括号里的内容作为路径,将下边的函数和其绑定起来,即通过修饰器实现。路径可以有参数,正则表达式:name
,新版格式<name>
:name#regexp#
,新版本格式<name:re:regexp>
static_file
method
是get
,可指定。见例子4context= confluence_data.send_content() @get("/") def send(): if context == 2: return "没有获取到页面内容,可能是月份页面不存在" elif context == 1: return "没有获取到页面内容,可能是标签不存在" else: return '''<form method = "POST"> <input type="submit" value="发送" /> </form>''' + context @post("/") def send_post(): return Email.send_mail(context=context) @get('/login') def login_form(): return '''<form method = "POST"> <input name="name" type="text" /> <input name="password" type="password" /> <input type="submit" value="Login" /> <input type="submit" value="Logout" /> </form>''' #@route('/login', method = 'POST') @post('/login') def login(): name = request.forms.get('name') password = request.forms.get('password') if check_login(name, password): return '<p>Your login was correct</p>' else: return '<p>Login failed</p>' @error(404) def error404(error): return "nothing in there" # if __name__ =="__main__": run(host="localhost",port=1234,reloader=True)
@get(),@post()
这样的方式,和使用route()
指定method
作用相同error()
解析错误,可修改错误返回值。即修改状态码run()
运行,启动一个web服务。输入ip和端口就可以在生成页面访问啦,参数reloader=True
表示重载工具from bottle import route,run,template
@route('/dps/slave/:entid#[0-9]+#')
def DpsPushConfigInfo(entid=None):
keys = "getDpsPushConfigInfo:hset:getConfigHash:" + entid
content = list()
for field in cli.hkeys(keys):
content.append([keys.split(':')[-1], field, cli.hget(name=keys, key=field)])
data = {"data": content}
return template('dps', data)
template
或view
,这里使用的是前者;<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>dps</title> </head> <body> <table border="1"> <thead><th>节点</th><th>企业</th></thead> %for slave,entid in data: <tr><td>{{slave}}</td><td> %for list_id in entid: <p><a href="/dps/slave/{{list_id}}">{{list_id}}</a></p> %end </td></tr> %end </table> </body> </html>
{{}}
表示起来,大括号内允许使用任何python表达式,只要它的计算结果为字符串或具有字符串表示形式的内容即可;%
表示<% %>
表示参考链接:
官网地址:https://bottlepy.org/docs/dev/
buttle文章: https://blog.csdn.net/huithe/article/details/8087645
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。