# coding=utf-8
# 第一步导入Flask类
from flask import Flask,make_response,current_app
# 导入配置文件
from settings import Config
#导入转换器
from werkzeug.routing import BaseConverter
# 动态路由参数,语法格式<>,默认的数据类型为str,兼容数值(eg:abcd,1234,1234.12)
# 第二步创建程序实例
# 传入__name__参数的作用是确定程序所在的位置
app = Flask(__name__)
"""配置对象(如果不开启debug=True,则通过配置对象开启调试模式,config为封装好的对象)"""
app.config.from_object(Config)
# 自定义转换器,既可以限制参数的类型,也可以限制参数的长度
class Regex(BaseConverter)
#regex = '[0-9]{5}'
def __init__(self,map,*args):
#调用父类的方法
super(Regex,self).__init__(map)
# args就是正则表达式
self.regex = args[0]
#看map和args[0]是什么
print '----map:',map #路由映射
print '----args',args[0] #rgs[0]就是下面的[a-z]{3}
#添加转换器到程序实例上
app.url_map.converters['re'] = Regex
#限制访问,优化访问路径
@app.route('/<re("[a-z]{3}"):num>')
def demo4(num):
return 'demo4:%s' % num
#原始的静态文件访问路径
#http://127.0.0.1:5000/static/html/detail.html
#优化后的访问路径
#http://127.0.0.1:5000/detail.html
@app.route('/<re(".*"):filename>')
def demo5(filename):
if not filename:
filename = 'index.html'
else:
filename = 'html/'+filename
#把具体的文件返回给浏览器,make_response(响应对象),current_app(代表程序实例,保存了很多app没有的东西)
resp = make_response(current_app.send_static_file(filename))
return resp
# 状态保持,http协议是无状态的,Tcp/IP协议,三次握手四次握手
# cookie和session的区别:
# 在浏览器中输入127.0.0.1:5000/setcookie ,页面出现set cookie'success,同时浏览器cookie中出现'user','python24'
@app.route('/setcookie')
def demo6():
resp = make_response('set cookie success')
#max_age为状态保持时间,过了时间就过期
resp.set_cookie('user','python24',max_age=300)
return resp
# 获取cookie,使用请求对象request 在页面输入127.0.0.1:5000/getcookie,页面出现 python24
@app.route('/getcookie')
def demo7():
resp = request.cookie.get('user')
return resp
# 限制参数的格式,如下,只能是浮点数
# 数值之间不兼容,只能限制数据类型,不能限制数据长度
@app.route('/demo3/<float:num>')
def demo3(num):
return 'demo3:%s' % num
# 第三步定义视图
@app.route('/',methods=['POST'])
def demo1():
return 'hello world2017'
@app.route('/')
def demo2():
return 'hello world2018'
# 第四步启动服务器
#__name__在被导入的情况下等于demo(文件名。txt前面的内容)
if __name__=='__main__'
# 查看所有的路由映射
print app.url_map
app.run()