• tips for Flask


    14.1

    Flask会特殊对待末端带有斜线的路由。如果客户端请求的URL的末端没有斜线,而唯一匹配的路由末端有斜线,Flask会自动响应一个重定向,转向末端带斜线的URL。反之则不会重定向。resource   > resource/

    resource/  > resource

    REST架构不要求必须为一个资源实现所有的请求方法。如果资源不支持客户端使用的请求方法,响应的状态码为405,返回“不允许使用的方法”。Flask会自动处理这种错误。

    版本问题:因为服务器和客户端分离,服务器负责提供资源,所以需要支持不同版本的客户端应用,使用更多的服务器控件,比如同时拥有/api_1_0 和 /api_1_1 的URL。

    内容协商:根据客户端请求的格式改写错误处理程序的响应(json or html)

    14.2.3

    由于REST要求保持的 无状态 特性,所以我们使用REST支持的HTTP认证(基本认证Base authentication, 摘要认证Digest authentication)

    HTTP认证使用模块:from flask_httpauth import HTTPBasicAuth

    这种用户认证方法只在API蓝本中使用,所以Flask-HTTPAuth扩展只在蓝本包中初始化,而不像其他扩展那样要在程序包中初始化(不在__init__.py中初始化)。


    14.2.4基于令牌的认证

    使用from itsdangerous import TimedJSONWebSignatureSerializer as Serializer

    在User实现generate_auth_token(self, expiration)和verify_auth_token(token)完成验证功能。

    实现用于HTTPBasicAuth的回调函数verify_password。

    错误处理:


    14.2.5json序列化

    错误处理:可以自定义ValidationError,然后raise ValidationError()

     


    14.2.6实现资源端点

     实现GET的资源请求最简单,一个返回文章列表,一个返回单篇文章内容。

    POST把一篇新的文章内容插入数据库

    PUT修改一篇文章

    14.2.7分页大型资源集合

    对于大型资源集合而言,一个GET请求可能太大,所以也可以对GET请求的get_posts路由进行分页

    14.2.8 使用HTTPie测试Web服务

    最常使用的两个在命令行中测试Web服务的客户端是curl和HTTPie。后者的命令行更简洁,可读性也更高。

    (遇到了一个bug),安装后可以在命令行中通过http命令使用HTTPie,

    http --json --auth "john@example.com":"cat" GET http://127.0.0.1:5000/api/v1.0/posts/

    注意url使用posts/和posts的区别。

    http --auth <email>:<password> --json GET http://127.0.0.1:5000/api/v1.0/token  可以获得认证令牌

    15.1获取代码覆盖报告

    代码覆盖工具用来统计单元测试检查了多少程序功能,并提供一个详细的报告,说明那些代码没有测试到。

    我们使用coverage完成任务,需要在设置中自己配置环境变量FLASK_COVERAGE

     

    15.2.1FLASK测试客户端

    视图函数因为涉及session和request所以必须在运行时测试,为此可以使用flask内建的测试客户端。

    response.get_data(as_text=True),在响应中使用get_data可以获得响应主体,默认为字节数组,as_text=True将返回一个unicode字符串。

    在测试的时候FLASK-WTF的post请求会有一个隐藏字段包含一个CSRF保护的令牌,在测试用可以配置中通过WTF_CSRF_ENABLED=False禁用这个字段。

     15.2.2测试Web服务

    #注意编码处理

    json.dumps编码为json,json.loads从json解码

    15.3使用Selenium进行端到端的测试

    依赖运行在客户端浏览器中的JavaScript代码,任何程序都无法正常工作,因为响应发给测试的JavaScript代码无法像在真正的Web浏览器客户端中那样运行。如果测试需要完整的环境,除了使用真正的Web浏览器连接Web服务器中运行的程序外,别无他选。幸运的是,大多数浏览器都支持自动化操作。Selenium(http://www.seleniumhq.org/)是一个Web浏览器自动化工具,支持3种主要操作系统中的大多数主流Web浏览器。

    16.性能

    数据库长期使用以后可能变慢,我们使用大部分数据库查询语言都支持的explain语句,通过显示的数据库执行一个查询时采取的操作步骤,我们可以判断出数据库或索引设计的不足之处。

    16.2分析源码

    性能问题的另一个诱因是CPU密集运算,Flask使用的开发Web服务器由Werkzeug提供,可根据需要为每条请求启用Python分析器。

    17部署

    17.1部署流程

    在manage.py中写入一个部署命令deploy

    17.2生产环境中的错误写入日志

    在程序启动过程中,Flask会创建一个Python提供的logging.Logger类实例,并将其附属到程序实例上,得到app.logger。

    17.3云部署


    heroku addons:create heroku-postgresql:hobby-dev -a minicocol (命令和书中有出入,应该是更新了)

    循环尝试git add <file address>

    git commit -m "..."

    git push heroku(remote git server) master(local git branch)

    heroku run python manage.py deploy

    heroku logs(git log)

    ...

    记得requirements里的flask-wtf alemic flask-migrate等等版本和local实际使用的一样。

  • 相关阅读:
    教你用笔记本破解无线路由器password
    Android项目外接高德地图代码混淆注意事项
    notepad++ 配置笔记
    ORACLE11.2.0 SQLPLUS 报 error while loading shared libraries
    【Lucene4.8教程之三】搜索
    《Swift Programming Language 》——Swift中怎样使用继承(Inheritance)
    CreateProcess的使用方法
    ntoskrnl.exe损坏或丢失的解决方式
    POI读入excel文件到Java中
    稀疏表示
  • 原文地址:https://www.cnblogs.com/autoria/p/6091414.html
Copyright © 2020-2023  润新知