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 Blueprintuser = 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注册蓝本userapp.register_blueprint(user,url_prefix='/user')  #在app中注册蓝本user,并添上前缀/user

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

--app--main__init__.pyerrors.pyforms.pyviews.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_usernameapp = 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

Flask入门flask-script 蓝本 钩子函数(三)相关推荐

  1. 【flask入门系列】请求钩子与上下文

  2. Vue进阶(三十七):created、mounted等钩子函数整理

    文章目录 一.钩子函数 二.Vue 中的钩子函数 三.拓展阅读 一.钩子函数 钩子函数是Windows消息处理机制的一部分,通过设置"钩子",应用程序可以在系统级对所有消息.事件进 ...

  3. 【Python】Flask框架系列(三):session和cookie操作、get/post请求、钩子函数

    在Flask中操作session 示例:设置session的过期时间 完整版 旧版 设置session的过期时间 示例 # encoding: utf-8from flask import Flask ...

  4. Flask之钩子函数

    Flask之钩子函数 类似django的中间件,作用就是在进入框架的之后 http方法之前或返回response之前进行一些操作 Flask的钩子函数可在注册时根据注册的app或者蓝图从而确定钩子函数 ...

  5. Flask框架学习整理——从零开始入门Flask

    文章目录 Flask框架 一. 简介 二. 概要 三. 知识点(附代码) 1. Flask基础入门 1)路由route的创建: 2)endpoint的作用 3)request对象的使用 4)请求钩子b ...

  6. Flask入门系列(转载)

    一.入门系列: Flask入门系列(一)–Hello World 项目开发中,经常要写一些小系统来辅助,比如监控系统,配置系统等等.用传统的Java写,太笨重了,连PHP都嫌麻烦.一直在寻找一个轻量级 ...

  7. flask入门2-模板引擎

    day2模板 模板引擎 说明:模板文件就是按照一定的规则书写的展示效果的HTML文件 模板引擎就是负责按照指定规则进行替换的工具 模板引擎选择jinja2 一.渲染模板的方法 将渲染的模板进行返回 r ...

  8. 一篇文章入门Flask

    Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现. Flask对WSGI (路由)的实现,是采用 ...

  9. Flask入门到实战

    文章目录 1. Flask初识 1. Flask概述 2. wsgi 3. 安装Flask 4. werkzurg 5. 第一个Flask应用 2. 配置文件的使用 1. 配置文件导入原理 2. 配置 ...

最新文章

  1. mysql grant show_mysql之基础操作grant、show、repair、log_error等
  2. Sketch小技巧—画出各种星型和多边形的简单方法
  3. 一文看懂卷积神经网络CNN的核心
  4. [导入]SQL Injection cheat sheet
  5. 高级排序求逆序数之分治法
  6. python基本词汇的特点_开课吧老师为你讲解 Python都有什么优点?
  7. oracle一个表拆成多个表,oracle拆分函数,将字符串拆分成多行多字段表数据
  8. 执行sql报错:Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in
  9. 电精2(电神魔傀2) android版本下载
  10. 双12使用腾讯云WAF反羊毛党、黄牛党战纪全记录
  11. gradle教程_Gradle教程
  12. MongoDBCompass使用教程
  13. Keil MDK5 STM32F401CCU6开发环境配置
  14. 国内 Top2 高校研一在读,为什么感觉深度学习越学越懵?
  15. 抖音二面:计算机网络-应用层
  16. WPF触控程序开发(三)——类似IPhone相册的反弹效果
  17. 小胖机器人宣传语_智能机器人推广宣传语
  18. EEPROM存储芯片24C02
  19. seo从入门到精通_SEO可以干什么,一定要看(SEO职业攻略)
  20. 量化交易准备资料-短线策略

热门文章

  1. 字符串处理分割字符串
  2. jsp设置背景图片并使得图片扩大到整个屏幕
  3. 如何用Linux写c程序并编译运行
  4. 程序设计竞赛(数组+多组测试)
  5. ShellExecuteA function
  6. JUC重要辅助类(同步组件及锁)
  7. 再谈 Application ProvidedAar
  8. EOS从入门到精通(四)
  9. 移动端C#病毒“东山再起”,利用知名应用通信实现远控隐私窃取
  10. mysql hadoop架构,Debezium实现Mysql到Elasticsearch高效实时同步