1.基于Flask的session的认证校验简单实例
1.秘钥
2.登录写进session
3.装饰器&视图校验
4.路由中定义 endpoint 参数
from flask import Flask, render_template, redirect, request, session
app = Flask(__name__)
# step1:给一个秘钥
app.secret_key = 'Leon ' s secret_key'
@app.route('/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# step2 登录的时候将秘钥写进来
session['user'] = request.form.get('username', '')
return redirect('/detail')
return render_template('login.html')
# step3:定义一个视图检验的装饰器
def is_login(func):
def inner(*args, **kwargs):
if not session.get('user'):
return redirect('/')
res = func(*args, **kwargs)
return res
return inner
# step4:必须声明 endpoint 参数,一般就是被装饰的函数名
@app.route('/detail', endpoint='detail')
@is_login
def detail():
return 'This is detail page'
if __name__ == '__main__':
app.run()
2.Flask的路由参数
代码语言:javascript复制@app.route(
'/router',
endpoint='router_test', # 默认是视图函数名
methods=['GET', 'POST'], # 视图函数的请求方式
defaults={'key': 'value'}, # 指定键值对,必须在视图函数中接收
# redirect_to='/', # 直接强制重定向,不再走视图函数
)
def router_test(key):
print(key)
return 'ok'
代码语言:javascript复制# http://127.0.0.1:5000/params/123/xxx
@app.route('/params/<int:nid>/<string:str_code>') # 指定格式传入 int 、 str,视图函数中必须接收
def params(nid, str_code):
print(nid)
print(str_code)
return render_template('index.html')
3.Flask的实例化配置
代码语言:javascript复制# 主要就是前三条
app = Flask(
__name__,
template_folder='templates', # 指定存放 HTML文件的文件夹名字
static_folder='static', # 存放静态资源的文件夹名字
static_url_path='/static', # 存放静态资源的路径
# host_matching=False, # 如果不是特别需要的话,慎用,否则所有的route 都需要host=""的参数
# subdomain_matching=False, # 理论上来说是用来限制SERVER_NAME子域名的,但是目前还没有感觉出来区别在哪里
# instance_path=None, # 指向另一个Flask实例的路径
# instance_relative_config=False, # 是否加载另一个实例的配置
# root_path = None # 主模块所在的目录的绝对路径,默认项目目录
)
4.app的config配置
4.1新建一个 appconfig.py的配置文件
代码语言:javascript复制class Debug(object):
DEBUG = True
SECRET_KEY = "12345678"
class Testing(object):
TESTING = True
SECRET_KEY = "87654321"
class Develop(object):
SECRET_KEY = "hello world"
4.2在主app中config.from_object配置即可
代码语言:javascript复制from flask import Flask, render_template, redirect, request,
session, send_file
from config import appconfig
from flask import blueprints
import biueapp
app = Flask(__name__)
# step1:给一个秘钥
# app.secret_key = 'Leon ' s secret_key'
#
app.config.from_object(appconfig.Debug)
5.Flask的蓝图
5.1 新建一个 py 文件
代码语言:javascript复制from flask import Blueprint
user_blue = Blueprint(
'user_app',
__name__,
url_prefix='/blue' # 定义一个前缀
)
@user_blue.route('/hello') # http://127.0.0.1:5000/blue/hello
def func():
return 'hello!'
5.2在主app中注册
代码语言:javascript复制from flask import Flask, render_template, redirect, request,
session, send_file
from flask import blueprints
import biueapp
app = Flask(__name__)
# 注册
app.register_blueprint(biueapp.user_blue)
6.flask中的特殊装饰器
6.1before_request & after_request
before_request 在请求到来之前执行
after_request 在请求返回时执行
@app.before_request
def before_1():
print('before_1')
@app.before_request
def before_2():
print('before_2')
@app.before_request
def before_3():
print('before_3')
@app.after_request
def after_1(response):
print('after_1')
return response
@app.after_request
def after_2(response):
print('after_2')
return response
@app.after_request
def after_3(response):
print('after_3')
return response
6.1.1执行顺序
6.1.2任何一个 before_request 的终止都不会影响 after_request 的执行进程
6.2errorhandler接受 404 报错信息返回
代码语言:javascript复制@app.errorhandler(404)
def error_handler(args):
print(args)
return 'This is a 404 error page'