一、环境搭建、项目搭建
1.创建虚拟环境flaskenv
virtualenv --no-site-packages -p
安装flask
2.项目搭建
创建day01文件夹
建立第一个flask项目hello.py文件
二、使用flask_script修改启动ip和端口
from flask import Flask
from flask_script import Manager
from app.views import blue
app = Flask(__name__)
# 2.绑定蓝图blue和app的关系
app.register_blueprint(blueprint=blue,url_prefix='/app')
# 将flask对象交给Manager管理,并且启动方式修改为manager.run()
manager = Manager(app=app)
# 设置secret_key
app.config['SECRET_KEY'] = '123'
if __name__ == '__main__':
# 修改启动的ip和端口、debug模式
# app.run(host='0.0.0.0',port=8080,debug=True)
# python xxx.py runserver -h 0.0.0.0 -p 8080 -d
manager.run()
三、路由匹配规则
1.<id>:默认接收的类型是str
2.<string:id>:指定id的类型为str
3.<int:id>:指定id的类型为int
4.<float:id>:指定id的类型为float
5.<path:path>:指定接受的path为URL的路径
四、flask_blueprint蓝图的使用
什么是蓝图
在Flask项目中可以用Blueprint(蓝图)实现模块化的应用,使用蓝图可以让应用层次更清晰,开发者更容易去维护和开发项目。蓝图将作用于相同的URL前缀的请求地址,将具有相同前缀的请求都放在一个模块中,这样查找问题,一看路由就很快的可以找到对应的视图,并解决问题了。
安装蓝图
pip install flask-blueprint
导入 blueprint
from flask import Blueprint
在views.py文件中中
# 1.获取蓝图对象,指定蓝图别名为app
blue = Blueprint('app',__name__)
在manager.py文件中
# 2.绑定蓝图blue和app的关系
app.register_blueprint(blueprint=blue,url_prefix='/app')
# 将flask对象交给Manager管理,并且启动方式修改为manager.run()
manager = Manager(app=app)
五、跳转和反向解析
1.硬编码跳转
return redirect('/app/')
2.反向解析redirect(url_for('蓝图别名.跳转的函数名'))
return redirect(url_for('app.hello_world'))
六、请求与响应
url:完整的请求地址
base_url:去掉GET参数的url
host_url:只有主机和端口号的url
path:路由中的路径
method:请求方法
remote_addr:请求的客户端的地址
args:GET请求参数
form:POST请求参数
files:文件上传
headers:请求头
cookies:请求中的cookie
@blue.route('/request/',methods=['GET','POST','PUT'])
def get_request():
# 请求上下文request
# 获取GET请求传递的参数,request.args.get(key)/request.args.getlist(key)
# 获取POST,PUT,PATCH,DELETE请求传递的参数,request.form.get(key)/request.form.getlist(key)
# 判断HTTP请求方式:method.request
pass
@blue.route('/response/',methods=['GET'])
@is_login
def get_response():
# 创建响应
res = make_response('人生苦短,我用Python',200)
# 响应绑定cookies,set_cookie(key,value,max_age,expires)
# 删除cookie delete_cookie(key)
res_index = render_template('index.html')
res = make_response(res_index,200)
return res
七、异常抛出abort和捕获
导入abort
@blue.route('/index/',methods=['GET'])
def index():
a = int(request.args.get('a'))
b = int(request.args.get('b'))
try:
a/b
except Exception as e:
print(e)
# 抛出错误
abort(500)
return render_template('index.html')
自动抛出异常:abort(状态码)
抛出错误
abort(500)
捕获异常处理:errorhandler(状态码),定义的函数中要包含一个参数,用于接收异常信息
@blue.errorhandler(500)
def error500(excption):
return '捕捉异常,错误信息为:%s' % excption
八、使用session实现模拟登陆
登录验证 存入session值
session['login_status'] = 1
在manager.py文件中设置加密
设置secret_key
app.config['SECRET_KEY'] = '123'
登陆验证装饰器
from functools import wraps
from flask import redirect,url_for,request,session
def is_login(func):
@wraps(func)
def check(*args,**kwargs):
id = session.get('login_status')
if id != 1:
return redirect(url_for('app.login'))
else:
return func(*args,**kwargs)
return check