前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day115-Flask的session&路由参数&实例化配置&对象配置&蓝图&特殊装饰器(中间件)

day115-Flask的session&路由参数&实例化配置&对象配置&蓝图&特殊装饰器(中间件)

原创
作者头像
少年包青菜
修改2020-04-21 10:01:57
5540
修改2020-04-21 10:01:57
举报
文章被收录于专栏:Python 学习Python 学习

1.基于Flask的session的认证校验简单实例

1.秘钥

2.登录写进session

3.装饰器&视图校验

4.路由中定义 endpoint 参数

代码语言:javascript
复制
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 在请求返回时执行

代码语言:javascript
复制
@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'

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.基于Flask的session的认证校验简单实例
  • 2.Flask的路由参数
  • 3.Flask的实例化配置
  • 4.app的config配置
    • 4.1新建一个 appconfig.py的配置文件
      • 4.2在主app中config.from_object配置即可
      • 5.Flask的蓝图
        • 5.1 新建一个 py 文件
          • 5.2在主app中注册
          • 6.flask中的特殊装饰器
            • 6.1before_request & after_request
              • 6.1.1执行顺序
              • 6.1.2任何一个 before_request 的终止都不会影响 after_request 的执行进程
            • 6.2errorhandler接受 404 报错信息返回
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档