• FlaskWeb开发


    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/
  • 相关阅读:
    synchronized wait notify 生产者消费者
    Thread start0 启动分析 一图看懂
    Mysql 存储过程造测试数据
    Springboot Bean循环依赖问题
    事务分析(二) 事务传播
    事务分析(一) 事务回滚
    Mysql 事务隔离级别分析
    Bug 佛祖镇楼
    Springboot+Swagger
    Springboot跨域 ajax jsonp请求
  • 原文地址:https://www.cnblogs.com/tianboblog/p/9902018.html
Copyright © 2020-2023  润新知