# coding=utf-8
from config import Config
from flask import Flask,jsonify,abort,redirect,url_for
app = Flask(__name__)
app.config.from_object(Config)
# 返回json数据
import json
@app.route('/')
def demo1():
my_dict = {"name":"tiantian","age":"10"}
# return json.dumps(my_dict)
# return jsonify(my_dict)
return 'demo1 run'
# 返回状态码,通过return直接返回,可以返回不符合http协议的状态码,主要为了实现前后端的数据交互
@app.route('/status')
def demo2():
return 'demo2:',405
#以上在浏览器中输入127.0.0.1:5000/status,页面中出现demo2: 在检查源代码中可以看见状态码为405
# 异常处理,abort,类似于python中raise语句,作用是处理异常信息,只能抛出符合http协议的状态码,abort只要捕获异常,后面代码不执行
@app.route('/')
def demo3():
abort(404)
return 'demo2:'403
@自定义错误信息 errorhandler会捕获abort函数抛出的异常状态码
@app.errorhandler(404)
def demo4(e):
return '页面找不到了,请访问某某页面'
# 重定向,当项目目录或者文件发生改变的情况下,需要使用重定向 www.360buy.com
# 当活动页面不存在时,不建议直接使用redirect定向到具体的url,建议使用动态的url
# 反向解析
@app.route('/redirect')
def demo5():
return redirect('http://www.baidu.com')
# 以上当在浏览器中输入127.0.0.1:5000/redirect 页面跳转到百度
"""
或者以上这样写
@app.route('/redirect')
def demo5():
a = 'http://www.baidu.com'
return redirect(a)
"""
#使用url_for,接受的参数是视图函数名
@app.route('/demo6')
def demo6():
return redirect(url_for('demo5'))
# 以上当在浏览器中输入127.0.0.1:5000 ,页面可以跳转到百度,最好用url_for
# 请求钩子 在每次请求后运行
@app.after_request
def demo7(response):
#当把以上两行和下面三行注释掉的时候,在浏览器中输入127.0.0.1:5000时,页面出现 demo1 run 并且检查源代码处为Content-Type为text/html
#修改响应头
if response.headers.get('Content-Type').startswith('text')
response.headers['Content-Type'] = 'application/json'
return response
# 此时在浏览器中输入127.0.0.1:5000时,页面出现 demo1 run 并且检查源代码处为Content-Type为application/json
if __name__=='__main__':
app.run()
同目录下创建同级文件config.py
class Config:
DEBUG = True
SECRET_KEY='b1IHqfGBJbdmANeA3Ch/kEjd1jVw7EWifvdPUC8CXyu1+KsAKXnh8boLtjpwAoIOCLM='