Flask基本使用

上下文

  • 程序上下文

    current_app

    g

  • 请求上下文

    request

    session

https://blog.csdn.net/wsxqaz/article/details/9083093

请求前后处理

before_first_request:注册一个函数,在处理第一个请求之前运行。

before_request:注册一个函数,在每次请求之前运行。

after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。

teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。

在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量 g 。例如,before_request 处理程序可以从数据库中加载已登录用户,并将其保存到 g.user 中。随后调用视图函数时,视图函数再使用 g.user 获取用户。

视图函数响应

视图函数返回的响应还可接受三个参数:
return '<h1>Bad Request</h1>',400,由首部(header)组成的字典

Flask 视图函数还可以返回 Response对象:

@app.route('/')
def index():
user_agent = request.headers.get('User-Agent')
# return '<h1>you brower is %s</h1>' % user_agent,400
response = make_response('<h1>This document carries a cookie!<h1>')
response.set_cookie('answer', '42')
return response

werkzeug

是一个WSGI的Python库:http://werkzeug.pocoo.org/

Flask扩展

命令行解析器,支持使用命令行参数形式对flask进行扩展:flask-script

from flask import Flask
from flask_script import Manager app = Flask(__name__)
manager=Manager(app) if __name__ == '__main__':
# app.run(debug=True)
manager.run()

Flask中Blueprint

http://flask.pocoo.org/docs/0.12/blueprints/

Jinja2

api:http://jinja.pocoo.org/docs/2.10/templates/

  • Jinja2 还支持宏。宏类似于 Python 代码中的函数。

  • 集成Bootstrap,pip install flask-bootstrap

如果要在衍生模板中添加新的 JavaScript 文件,需要这么定义 scripts 块:

{% block scripts %}
{{ super() }}
<script type="text/javascript" src="my-script.js"></script>
{% endblock %}
  • urlfor() 函数最简单的用法是以视图函数名(或app.addurl_route() 定义路由时使用的端点名)作为参数,返回对应的 URL。例如,在当前版本的 hello.py 程序中调用 urlfor('index') 得到的结果是 / 。调用 urlfor('index', _external=True) 返回的则是绝对地 址,在这个示例中是 http://localhost:5000/。

  • Flask-Moment本地化日期和时间

web表单

http://www.pythondoc.com/flask-wtf/

pip install flask-wtf

Flask程序中支持MarkDown

https://pythonhosted.org/Flask-Markdown/

pip install flask-Markdown

Flask程序中发送邮件

https://pythonhosted.org/Flask-Mail/

pip install flask-mail

数据库

http://www.pythondoc.com/flask-sqlalchemy/quickstart.html

  • pip install flask-sqlalchemy

  • sqlalchemy就是一个ORM框架,本身无法操作数据库,其必须以来pymsql等第三方插件。

配置如下(按照教程中配置会报错的,必须配合三方插件):

app.config['SQLALCHEMY_DATABASE_URI'] ='mysql+pymysql://username:password@hostname/database'

仅当数据库表不存在时,Flask-SQLAlchemy 才会根据模型进行创建。因此,更新表的唯一方式就是先删除旧表,不过这样做会丢失数据库中的所有数据。更新表的更好方法是使用数据库迁移框架。源码版本控制工具可以跟踪源码文件的变化,类似地,数据库迁移框架能跟踪数据库模式的变化,然后增量式的把变化应用到数据库中。

# 创建迁移仓库
python hello.py db init # 自动创建迁移脚本(其实就是对比模型和数据表自动生成差异版本)
python manage.py db migrate -m "initial migration" # 执行升级
python manage.py db upgrade

会话管理

为 Flask 提供了用户会话管理。它处理了日常的登入,登出并且长时间记住用户的会话。
http://www.pythondoc.com/flask-login/
  • pip install flask-login

认证

使用 flask_httpauth 扩展实现认证授权。
https://flask-httpauth.readthedocs.io/en/latest/
  • pip install flask-httpauth

生成确认令牌的包

https://itsdangerous.readthedocs.io/en/1.1.x/
  • pip install itsdangerous


单元测试:unittest

https://docs.python.org/3.5/library/unittest.html

Restful Api接口测试:httpie

https://httpie.org/doc

代码覆盖工具

pip install coverage

使用Selenium进行端到端测试

pip install selenium

报告缓慢的数据库查询

from flask.ext.sqlalchemy import getdebugqueries

监视资源消耗

分析器监视运行中的程序,记录调用的函数以及运行各函数 所消耗的时间,然后生成一份详细的报告。

@manager.command
def profile(length=25, profile_dir=None):
"""Start the application under the code profiler."""
from werkzeug.contrib.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[length],
profile_dir=profile_dir)
app.run()

部署

  • uwsgi
  • nginx

  部署过程中的问题:  

=========1==========
错误a duplicate default server for 0.0.0.0:80

删除/etc/nginx/sites-available/default文件,重新启动服务即可

==========2==========

解决“upstream prematurely closed connection”报错

https://www.centos.bz/2018/01/nginxuwsgi%E5%AE%8C%E7%BE%8E%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%EF%BC%8C%E8%A7%A3%E5%86%B3upstream-prematurely-closed-connection%E6%8A%A5%E9%94%99/

==========3(当然使用root不是好的方式,这里只是测试)===========
vim /etc/nginx/nginx.conf

# user www-data;
user root;
https://www.weiweiblog.cn/nginx-13-permission-denied/

nginx 加载各配置conf

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

访问 502 Bad Gateway,后来查看日志发现是

-- unavailable modifier requested: 0 --

参考:

https://blog.flytrap.top/2018/03/09/tech/linux/deploy/unavailablemodifierrequested/

启动mysql:

docker ps -a 找到mysql镜像

docker start 容器id

进入到flasky的发布目录:

启动uwsgi

 uwsgi --plugin python3 config.ini -d ./logs/flask.log

检查是否成功:ps aux | grep uwsgi

servic nginx start

使用Flask-SSLify启用安全HTTP

其它扩展

  • Flask-Babel(https://pythonhosted.org/Flask-Babel/):提供国际化和本地化支持。
  • FLask-RESTful(http://flask-restful.readthedocs.org/en/latest/):开发 REST API 的工具。
  • Celery(http://docs.celeryproject.org/en/latest/):处理后台作业的任务队列。
  • Frozen-Flask(https://pythonhosted.org/Frozen-Flask/):把 Flask 程序转换成静态网站。
  • Flask-DebugToolbar(https://github.com/mgood/flask-debugtoolbar):在浏览器中使用的 调试工具。
  • Flask-Assets(https://github.com/miracle2k/flask-assets):用于合并、压缩、编译 CSS 和 JavaScript 静态资源文件。
  • Flask-OAuth(http://pythonhosted.org/Flask-OAuth/):使用 OAuth 服务进行认证。
  • Flask-OpenID(http://pythonhosted.org/Flask-OpenID/):使用 OpenID 服务进行认证。
  • Flask-WhooshAlchemy(https://pythonhosted.org/Flask-WhooshAlchemy/):使用 Whoosh , (http://pythonhosted.org/Whoosh/)实现 Flask-SQLAlchemy 模型的全文搜索。
  • Flask-KVsession(http://flask-kvsession.readthedocs.org/en/latest/):使用服务器端存储实现的另一种用户会话
代码:https://github.com/tianbogit/flasky 
部署
地址:http://www.51wxzs.cn/

FlaskWeb开发的更多相关文章

  1. FlaskWeb开发:基于Python的Web应用开发实战

    所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/63/ 来源:python黑洞网,专注 ...

  2. 初涉FlaskWeb开发----基础篇

    1.web程序运行的基本流程 {客户端发送请求 <-----> 服务器返回响应} 2.使用框架可以降低开发难度,提高开发效率. 3.Flask框架的基本认识: 特点:用Python语言实现 ...

  3. FlaskWeb开发从入门到放弃(二)

    第5章 章节五 01 内容概要 02 内容回顾 03 面向对象相关补充:metaclass(一) 04 面向对象相关补充:metaclass(二) 05 WTforms实例化流程分析(一) 06 WT ...

  4. Flask-Web开发(第一部分)

    1.Jinja2变量过滤器: safe 渲染值时不转义capitalize 把值的首字母转换成大写,其他字母转换成小写lower 把值转换成小写形式upper 把值转换成大写形式title 把值中每个 ...

  5. Flask-web开发

    使用虚拟环境 虚拟环境使用第三方实用工具virtualenv创建.输入一下命令可以检查系统是否安装了virtualenv virtualenv --version 如果显示错误,你就需要安装这个工具. ...

  6. Taffy Web开发,Python Flask实践详解

    1. 前言 最近为Taffy自动化测试框架写了个页面,主要实现了用例管理.执行,测试报告查看管理.发送邮件及配置等功能. 2. 实现细节 页面使用Python Flask +Bootstrap开发,还 ...

  7. 细数Python Flask微信公众号开发中遇到的那些坑

    最近两三个月的时间,断断续续边学边做完成了一个微信公众号页面的开发工作.这是一个快递系统,主要功能有用户管理.寄收件地址管理.用户下单,订单管理,订单查询及一些宣传页面等.本文主要细数下开发过程中遇到 ...

  8. Taffy自动化测试框架Web开发,Python Flask实践详解

    1. 前言 最近为Taffy自动化测试框架写了个页面,主要实现了用例管理.执行,测试报告查看管理.发送邮件及配置等功能.   本页面适用所有基于taffy/nose框架编写的自动化测试脚本,或基于un ...

  9. [ Python ] Flask 基于 Web开发 大型程序的结构实例解析

    作为一个编程入门新手,Flask是我接触到的第一个Web框架.想要深入学习,就从<FlaskWeb开发:基于Python的Web应用开发实战>这本书入手,本书由于是翻译过来的中文版,理解起 ...

随机推荐

  1. 关于部分Android手机安装apk,无法获取正常的logo

    最近出现过类似的问题,主要出现是在,MediaPad X1 7.0和MediaPad M1 8.0. 发布应用的时候明明配置好了图标的,但是始终找不到原因,郁闷了好几个小时,也浪费了好几个小时. 如果 ...

  2. 对非正确使用浮点型数据而导致项目BUG的问题探讨

    乘法分配律 在上小学的时候就已经学习过乘法分配律,乘法分配律的详细内容是:两个数的和与一个数相乘.能够先把他们分别与这个数相乘,再相加.得数不变.乘法分配律的定义还能够用表达式"(a+b)× ...

  3. Android创建JSON格式数据

    Android创建JSON格式数据 作为上一篇博客的补充,简单那解说了一下Android创建JSON格式数据的小Demo. 1. 创建JSON格式数据 对于Android创建JSON格式数据.因为An ...

  4. 通过内存映射文件来颠倒文本内容(暂没有处理Unicode和换行符)

    // ReverseFileDemo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <windows.h> ...

  5. NodeJS 安装cnpm命令行工具错误问题解决

    考虑问题从两个方面: 1.网速(网络太慢也是安装失败的一个原因) 2.系统用户权限(需要系统最开始使用的用管理员,新增的管理员安装会有问题) 报错问题记录于此: 实际上问题是:Windows_NT 6 ...

  6. 牛散NO.2:MACD西施说风情,柳下惠高位勿迷情

    创业板日线“高位夺命勾魂枪” 话说在创业板的波段调整中,MACD的勾魂枪同样让多头“魂断蓝桥”.圈内图形又好比西施姑娘回眸一笑,吴王夫差便注定命赴黄泉了.范蠡的精心设计让西施 布了一个风情万种的局,被 ...

  7. 【Linux指标】内存篇

    1:内存使用率 指标名称 指标含义 单位 采集方式(Linux) 采集方式(Windows) AGT.可用内存 GB 通过/proc/meminfo得到MemAvailable;若/proc/memi ...

  8. SpringCloud系列十一:自定义Feign

    1. 回顾 上文我们讲解了如何为服务消费者配置Feign. 在Spring Cloud中,Feign的默认配置类是FeignClientsConfiguration,该类定义了Feign默认使用的编码 ...

  9. Ionic学习笔记3_ionic指令简单布局

    1)   添加引用类库(ionic样式和ionic js文件) 2)   标题栏,页脚栏,内容区 3)   Js引入ionic类库,添加页面操作方法和对象 4)   数据初始化 5)   Html页面 ...

  10. nginx服务器部署

    nginx(“engine x”)是一个高性能的HTTP和反向代理服务器.   安装nginx Linux下  sudo apt-get install nginx windows下 下载 nginx ...