美文网首页
before_request钩子函数

before_request钩子函数

作者: Dozing | 来源:发表于2018-11-07 00:52 被阅读12次

钩子函数

  1. before_request
  • before_request:在请求之前执行的
  • before_request是在视图函数执行之前执行的
  • before_request这个函数只是一个装饰器,它可以把需要设置为钩子函数的代码放到视图函数执行之前来执行
钩子函数的执行顺序

例子代码:

# hook.py
from flask import Flask, render_template,request,session,redirect,url_for
import os
app = Flask(__name__)

app.config['SECRET_KEY'] = os.urandom(24)


@app.route('/')
def hello_world():
    print('Index!')
    return 'Index!'


@app.route('/login/',methods = ['GET','POST'])
def login():
    print('login')
    if request.method == 'GET':
      return render_template('login.html')
    else:
      username = request.form.get('username')
      password = request.form.get('password')
      if username == 'zhiliao' and password == '111111':
        session['username'] = 'zhiliao'
        return '登录成功'
      else:
        return '用户名或者密码错误!'

@app.route('/edit/')
def edit():
  if session.get('username'):
    return '修改成功'
  else:
    return redirect(url_for('login'))

# before_request:在请求之前执行的
# before_request是在视图函数执行之前执行的
# before_request这个函数只是一个装饰器,它可以把需要设置为钩子函数的代码放到视图函数执行之前来执行

@app.before_request
def my_before_request():
    print('hello world!')

if __name__ == '__main__':
  app.run(debug = True)
# templates/login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="" method="POST">
            <table>
                    <tr>
                        <td>用户名:</td>
                        <td><input type="text" name = "username"></td>
                    </tr>
                    <tr>
                        <td>密码:</td>
                        <td><input type="password" name = "password"></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="submit" value = "登录"></td>
                    </tr>
            </table>
    </form>    
</body>
</html>

使用钩子函数后:

# hook.py
from flask import Flask, render_template,request,session,redirect,url_for,g
import os
app = Flask(__name__)

app.config['SECRET_KEY'] = os.urandom(24)


@app.route('/')
def hello_world():
    print('Index!')
    return 'Index!'


@app.route('/login/',methods = ['GET','POST'])
def login():
    print('login')
    if request.method == 'GET':
      return render_template('login.html')
    else:
      username = request.form.get('username')
      password = request.form.get('password')
      if username == 'zhiliao' and password == '111111':
        session['username'] = 'zhiliao'
        return '登录成功'
      else:
        return '用户名或者密码错误!'

@app.route('/edit/')
def edit():
  if hasattr(g,'username'):
    return '修改成功'
  else:
    return redirect(url_for('login'))

# before_request:在请求之前执行的
# before_request是在视图函数执行之前执行的
# before_request这个函数只是一个装饰器,它可以把需要设置为钩子函数的代码放到视图函数执行之前来执行

@app.before_request
def my_before_request():
    if session.get('username'):
      g.username = session.get('username')
    
if __name__ == '__main__':
  app.run(debug = True)
<!--templates/login.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="" method="POST">
            <table>
                    <tr>
                        <td>用户名:</td>
                        <td><input type="text" name = "username"></td>
                    </tr>
                    <tr>
                        <td>密码:</td>
                        <td><input type="password" name = "password"></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="submit" value = "登录"></td>
                    </tr>
            </table>
    </form>    
</body>
</html>

网页开发应该尽量避免查询数据库,这了的钩子函数可以避免过多的查询数据库

相关文章

  • before_request钩子函数

    钩子函数 before_request before_request:在请求之前执行的 before_reques...

  • 源码

    请求钩子before_request after_request errorhandler 装饰器route sl...

  • Vue视频教程系列第三十五节—路由器里的钩子函数

    路由钩子函数介绍: 我之前有介绍过vue里的钩子函数,有四对,也就是八个钩子函数。在路由里呢,其实也有钩子函数,个...

  • vue自定义全局指令

    Vue.directive('指令名',{ 钩子函数1(){}, 钩子函数2(){} }) -----------...

  • vue笔记-12(动画钩子函数)

    动画-钩子函数实现半场动画的介绍 入场函数和出场函数 钩子函数实现小球半场动画 methods: { ...

  • 2021-04-11

    vue-router 路由钩子函数(导航守卫) 路由钩子函数有三种: 全局钩子: beforeEach(全局前置守...

  • Android对so进行简单hook

    1、什么是Hook Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到...

  • Vue.js钩子函数

    钩子函数

  • vue 获取节点 获取事件

    vue 生命周期 什么是钩子函数 一开始就执行的 就是钩子函数 vue 钩子函数 也称作为生命周期 befor...

  • vue中的钩子函数(二)

    Vue钩子函数 在开发Vue组件时,钩子函数我们会经常用到,但是具体在什么时机,使用哪个钩子函数,会产生什么样的结...

网友评论

      本文标题:before_request钩子函数

      本文链接:https://www.haomeiwen.com/subject/zgxmxqtx.html