Flask入门flask-script 蓝本 钩子函数(三)

1 flask-script扩展库

概念: 是一个flask终端运行的解析器 ,因为项目完成以后,代码改动会有风险,所以借助终端完成不同启动项的配置

安装

pip3 install flask-script

使用

from flask_script import Manager   #导入
manager = Manager(app)  #初始化flask运行的解析器
manager.run()   #运行

执行程序需要在启动项输入命令

python3 当前启动文件名.py runserver  可选参数
可选参数如下:
-h  主机名
-p  端口号
--threaded 开启多线程
-d 开启调试模式
-r 代码修改后重新加载

例如:
python3 manage.py runserver -d -r -h127.0.0.1 -p5001 --threaded   参数全部加上

2 Blueprint蓝图

概念 : Blueprint通过把实现不同功能的module分开,实现分类功能,从而把一个大的application分割成各自实现不同功能的module。在一个Blueprint中可以调用另一个blueprint的view function, 但要加相应的blueprint名。本质上来说就是让程序更加松耦合,更加灵活,增加复用性,提高查错效率.

导入

from flask import Blueprint,session

使用 : 创建蓝图路由文件userinfo.py文件

from flask import Blueprint

user = Blueprint(‘user‘,__name__)
@user.route(‘/login‘)
def login():
    return ‘login‘

注意 : 1 Blueprint接受两个参数实例化,分别文蓝本名与蓝本所在的包与模块
       2  蓝本实质上也是一个命名空间

在启动文件中注册蓝本: app/__init__.py,一般在初始化时候注册蓝图

from mysession import user
app.register_blueprint(user)   #app注册蓝本user

app.register_blueprint(user,url_prefix=‘/user‘)  #在app中注册蓝本user,并添上前缀/user

下面我们以一个具体例子说明: 假定一个文件系统

--app
    --main
        __init__.py
        errors.py
        forms.py
        views.py
     __init__.py
 其中mian就是蓝本模块,错误信息保存在errors.py,视图函数保存在views.py文件中

(1) 创建蓝本:

在文件app/main/__init__.py添加定义:

from flask import Blueprint
main = Blueprint(‘admin‘,__name__)
from . import views,errors

注:1 通过实例化Blueprint类的对象创建一个蓝本
   2 视图与errors的导入应放在蓝本创建之后,防止循环导入问题

在文件app/main/views.py中添加视图函数:

from . import main #当前目录下导入蓝本
from flask import render_template

@main.route(‘/test/‘)
def test():
    return render_template(‘main/test.html‘),200
注: 1 跳转到模板页面test.html

在文件app/main/errors.py中添加错误视图函数:

from flask import render_template
from app.main import main  #导入蓝本
#捕捉404状态码
@main.app_errorhander(404)
def page_not_found(e):
    return render_tamplate(‘main/404.html‘),404
#捕捉500状态码
@main.app_errorhander(500)
def internal_server_error(e):
    return render_template(‘main/500.html‘),500

(2) 注册蓝本

app/__init__.py中添加注册蓝本代码

from app.main import main   #导入蓝本
app.register_blueprint(main,url_prefix=‘/admin‘)

(3) 构造url路由

在view视图中有函数test
url_for(‘main.test‘)   url_for(‘蓝本名.视图函数名‘)

3 钩子函数

类似于django中间件 在使用的时候需要使用装饰器,使得 程序变成 A函数--->钩子函数---->B函数,

flask项目中有个是应用上下文(app),一个是请求上下文(request),请求上下文request和应用上下文current_app都是一个全局变量。所有请求都共享的。Flask有特殊的机制可以保证每次请求的数据都是隔离的,即A请求所产生的数据不会影响到B请求。所以可以直接导入request对象,不会受到外界影响

两个上下文一般包含4个属性:

  1. request : 请求上下文的对象,一般用来保存一些请求的变量。比如method、args、form等。
  2. session: 请求上下文的对象,一般用来保存一些会话信息.
  3. current_app: 返回当前App
  4. g: 全局变量,应用上下文的对象,处理请求时作为临时存储的对象 : g.message存储信息
钩子函数 功能描述
before_first_request 第一次请求之前
before_request 每次请求之前
after_request 每次请求之后
teardown_request 不管是否异常都会在请求之后执行
context_processor 上下文处理器,返回字典的健
errorhandler errorhandler接收状态码,可以自定义返回状态码的响应页面

注 : 在蓝本中使用钩子函数需要进行转化: @mysession.teardown_app_request 蓝本名.teardown_app_request

4 g对象

g : 全局变量,需要导入使用 from flask import g

  1. g对象专门用来保存用户数据的
  2. g对象在一次请求中所有代码都是公用的

例如: 在提交表单中测试下 action=‘{{ url_for(‘login‘) }}‘ method=‘post‘

login_user.html

<form action="{{ url_for(‘login‘) }}" method="post">
       <table>
                    <tr>
                       <td>用户名:</td>
                       <td><input type="text" placeholder="请输入用户名" name="username"></td>
                    </tr>
                    <tr>
                        <td>密码:</td>
                        <td><input type="text" placeholder="请输入密码" name="password"></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="submit" value="登录"></td>
                    </tr>
       </table>
</form>

视图函数utils.py中

from flask import g
def login_username():
    return u‘当前登录用户:{}‘.format(g.username)

def login_password():
    return u‘当前密码:{}‘.format(g.password)

在主文件视图函数中views.py

from flask import Flask,g,request,render_template
from utils import login_username

app = Flask(__name__)

@app.route(‘/login/‘,methods=[‘GET‘, ‘POST‘])
def login():
    if request.method == ‘GET‘:
        return render_template(‘login.html‘)
    else:
        username = request.form.get(‘username‘)
        password = request.form.get(‘password‘)
        g.username = username   #将username变成全局g对象信息存储
        g.password = password   #将password变成全局g对象信息存储
        login_username()
        login_password()
        return u‘登录成功!‘

if __name__ == ‘__main__‘:
    app.run()

原文地址:https://www.cnblogs.com/why957/p/9114088.html

时间: 2024-11-01 16:53:14

Flask入门flask-script 蓝本 钩子函数(三)的相关文章

flask 钩子函数

说明: before_request函数,就是一个装饰器,他可以把需要设置为钩子函数的代码放到视图函数执行之前执行 示例: from flask import Flask,url_for,redirect,render_template,request app = Flask(__name__) @app.route('/') def index(): print ('index') return 'index' @app.before_request def mybefore_request(

11.Flask钩子函数

在Flask中钩子函数是使用特定的装饰器的函数.为什么叫做钩子函数呢,是因为钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码,那么这种函数就叫做钩子函数. before_first_request:Flask项目第一次部署后会执行的钩子函数. before_request:请求已经到达了Flask,但是还没有进入到具体的视图函数之前调用.一般这个就是在函数之前,我们可以把一些后面需要用到的数据先处理好,方便视图函数使用. before_request @app.before_first

flask 钩子函数errorhandler

一.errorhandler  接收状态吗,可以自定义返回这种状态码的响应的处理办法,如果发生一些异常的时候,比如404.500那么如果想要优雅的处理这些错误,就可以使用errorhandler 注意点: *在errorhandler装饰钩子函数下,要返回响应的状态码 *在errorhandler装饰的钩子函数中,必须要写一个参数,来接收错误的信息,如果没有参数,就会直接报错 *使用flask,abort 可以手动的抛出响应的错误,比如开发者在发现参数不正确的时候可以自己手动抛出一个404错误

flask学习(三):flask入门(URL)

一. flask简介 flask是一款非常流行的python web框架,出生于2010年,作者是Armin Ronacher,本来这个项目只是作者在愚人节的一个玩笑,后来由于非常受欢迎,进而成为一个正式的项目.目前为止最新的版本是1.0.2 flask自2010年发布第一个版本以来,大受欢迎,深得开发者的喜爱,并且在多个公司已经得到了应用,flask能如此流行的原因,可以分为以下几点: 微框架.简洁.只做他需要做的,给开发提供了很大的扩展性 flask和相关的依赖(Jinja2.Werkzeu

Web开发框架之Flask入门(6)

Flask 是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器,本文将收集一些常用的开发小例子方便开发速查. Web 框架的本质 实现简单HTTP: 众所周知

网站后端_Python+Flask.0003.FLASK快速入门之Hello Word?

框架特点: 1. 非常小, 小到可称为微型框架 2. 可扩展, 设计初衷就是不会替开发者做太多决策,支持随时更换或动手实现扩展模块 3. 三依赖, 路由/调试/WSGI(由WERKZEUG提供的WEB服务器网关接口实现),模版系统(由JINJA2实现),签名(由ITSDANGEROUS实现) 快速安装: pip install flask 快速入门: #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: 

flask——简单博客示例教程(三)

原文:https://blog.csdn.net/u014793102/article/category/9285123 Flask从入门到做出一个博客的大型教程(三) 在开始之前,先来看下项目的整体结构. 1 flask 2 ├── app 3 │ ├── forms.py 4 │ ├── __init__.py 5 │ ├── routes.py 6 │ └── templates 7 │ ├── base.html 8 │ ├── index.html 9 │ └── login.html

消息钩子函数入门

Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它 可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能.钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处 理.这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘.鼠标的输入,屏幕取词,日志监视等等.可见, 利用钩子可以实现许多特殊而有用的功能.因此,对于高级编程人员来说

Flask入门(一)

Flask入门(一) 1 安装虚拟环境Mac,linux sudo pip install virtualenv ? ubuntu系统 sudo apt-get install python-virtualenv 2 安装flask 1 python3 环境下全局安装 pip3 install flask 2 虚拟环境下virtualenv下安装 首先先创建env虚拟环境 mkdir myproject #新建项目目录 cd myproject virtualenv venv #安装虚拟文件目录