flask状态保持实现

# 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()

 

 

转载于:https://my.oschina.net/u/3753872/blog/1647802

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值