数据库相关

db.create_all()无效

变更项目结构后,app.model引入位置错误,导致db.create_all()等指令失效
app.model.py

  1. from flask-sqlalchemy import SQLAlchemy
  2. db = SQLAlchemy()

app.model.py

  1. from . import db

库表不存在

错误信息

  1. sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users
  2. [SQL: SELECT users.id AS users_id, users.email AS users_email, users.username AS users_username, users.role_id AS users_role_id, users.password_hash AS users_password_hash
  3. FROM users]
  4. (Background on this error at: http://sqlalche.me/e/14/e3q8)

解决方案:再次通过db.create_all()创建生成新的库表

git相关

  • 在A端移除venv版本管理,上传到远程库,B端拉取合并最新分支后,将本地venv文件删除

    • 在B端也移除venv版本控制git remove —cache venv; git commit -m “xxx”
    • 从远程库拉取合并最新数据 git fetch origin ; git merge origin/master

      主应用配置错误

      linux 与 windows 配置命令不一致,导致linux下设置主应用错误
  • linux:export FLASK_APP=hello.py

  • windows: set FLASK_APP=hello.py

报错信息如下:KeyError:

  1. Traceback (most recent call last):
  2. File "/root/blog/blog/venv/bin/flask", line 11, in <module>
  3. sys.exit(main())
  4. File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 967, in main
  5. cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)
  6. File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 586, in main
  7. return super(FlaskGroup, self).main(*args, **kwargs)
  8. File "/root/blog/blog/venv/lib64/python3.6/site-packages/click/core.py", line 782, in main
  9. rv = self.invoke(ctx)
  10. File "/root/blog/blog/venv/lib64/python3.6/site-packages/click/core.py", line 1259, in invoke
  11. return _process_result(sub_ctx.command.invoke(sub_ctx))
  12. File "/root/blog/blog/venv/lib64/python3.6/site-packages/click/core.py", line 1066, in invoke
  13. return ctx.invoke(self.callback, **ctx.params)
  14. File "/root/blog/blog/venv/lib64/python3.6/site-packages/click/core.py", line 610, in invoke
  15. return callback(*args, **kwargs)
  16. File "/root/blog/blog/venv/lib64/python3.6/site-packages/click/decorators.py", line 21, in new_func
  17. return f(get_current_context(), *args, **kwargs)
  18. File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 425, in decorator
  19. with __ctx.ensure_object(ScriptInfo).load_app().app_context():
  20. File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 392, in load_app
  21. app = locate_app(self, import_name, None, raise_if_not_found=False)
  22. File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 257, in locate_app
  23. return find_best_app(script_info, module)
  24. File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 83, in find_best_app
  25. app = call_factory(script_info, app_factory)
  26. File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 117, in call_factory
  27. return app_factory(script_info)
  28. File "/root/blog/blog/app/__init__.py", line 19, in create_app
  29. app.config.from_object(config[config_name])
  30. KeyError: <flask.cli.ScriptInfo object at 0x7f597eaa8b00>

flask-bootstrap默认资源加载失败

问题原因:bootstrap默认使用外网地址,加载超时,导致页面渲染异常
image.png
解决方案

  • 修改配置,使用本地资源

    1. app = Flask(__name__)
    2. app.config['BOOTSTRAP_SERVE_LOCAL'] = True
  • 使用其他CDN

\venv\Lib\site-packages\flaskbootstrap_init.py,在文件末尾,将下面这些文件的地址修改成你想引用的CDN地址即可:

  1. bootstrap = lwrap(
  2. WebCDN('//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/%s/' %
  3. BOOTSTRAP_VERSION), local)
  4. jquery = lwrap(
  5. WebCDN('//cdnjs.cloudflare.com/ajax/libs/jquery/%s/' %
  6. JQUERY_VERSION), local)
  7. html5shiv = lwrap(
  8. WebCDN('//cdnjs.cloudflare.com/ajax/libs/html5shiv/%s/' %
  9. HTML5SHIV_VERSION))
  10. respondjs = lwrap(
  11. WebCDN('//cdnjs.cloudflare.com/ajax/libs/respond.js/%s/' %
  12. RESPONDJS_VERSION))
  13. 比如换成http://cdn.bootcss.com提供的资源:
  14. bootstrap = lwrap(
  15. WebCDN('//cdn.bootcss.com/bootstrap/%s/' % BOOTSTRAP_VERSION), local)
  16. jquery = lwrap(
  17. WebCDN('//cdn.bootcss.com/jquery/%s/' % JQUERY_VERSION), local)
  18. html5shiv = lwrap(
  19. WebCDN('//cdn.bootcss.com/html5shiv/%s/' % HTML5SHIV_VERSION))
  20. respondjs = lwrap(
  21. WebCDN('//cdn.bootcss.com/respond.js/%s/' % RESPONDJS_VERSION))