数据库相关
db.create_all()无效
变更项目结构后,app.model引入位置错误,导致db.create_all()等指令失效
app.model.py
from flask-sqlalchemy import SQLAlchemy
db = SQLAlchemy()
app.model.py
from . import db
库表不存在
错误信息
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users
[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
FROM users]
(Background on this error at: http://sqlalche.me/e/14/e3q8)
解决方案:再次通过db.create_all()创建生成新的库表
git相关
在A端移除venv版本管理,上传到远程库,B端拉取合并最新分支后,将本地venv文件删除
linux:export FLASK_APP=hello.py
- windows: set FLASK_APP=hello.py
报错信息如下:KeyError:
Traceback (most recent call last):
File "/root/blog/blog/venv/bin/flask", line 11, in <module>
sys.exit(main())
File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 967, in main
cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)
File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 586, in main
return super(FlaskGroup, self).main(*args, **kwargs)
File "/root/blog/blog/venv/lib64/python3.6/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/root/blog/blog/venv/lib64/python3.6/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/root/blog/blog/venv/lib64/python3.6/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/root/blog/blog/venv/lib64/python3.6/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/root/blog/blog/venv/lib64/python3.6/site-packages/click/decorators.py", line 21, in new_func
return f(get_current_context(), *args, **kwargs)
File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 425, in decorator
with __ctx.ensure_object(ScriptInfo).load_app().app_context():
File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 392, in load_app
app = locate_app(self, import_name, None, raise_if_not_found=False)
File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 257, in locate_app
return find_best_app(script_info, module)
File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 83, in find_best_app
app = call_factory(script_info, app_factory)
File "/root/blog/blog/venv/lib64/python3.6/site-packages/flask/cli.py", line 117, in call_factory
return app_factory(script_info)
File "/root/blog/blog/app/__init__.py", line 19, in create_app
app.config.from_object(config[config_name])
KeyError: <flask.cli.ScriptInfo object at 0x7f597eaa8b00>
flask-bootstrap默认资源加载失败
问题原因:bootstrap默认使用外网地址,加载超时,导致页面渲染异常
解决方案
修改配置,使用本地资源
app = Flask(__name__)
app.config['BOOTSTRAP_SERVE_LOCAL'] = True
使用其他CDN
\venv\Lib\site-packages\flaskbootstrap_init.py,在文件末尾,将下面这些文件的地址修改成你想引用的CDN地址即可:
bootstrap = lwrap(
WebCDN('//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/%s/' %
BOOTSTRAP_VERSION), local)
jquery = lwrap(
WebCDN('//cdnjs.cloudflare.com/ajax/libs/jquery/%s/' %
JQUERY_VERSION), local)
html5shiv = lwrap(
WebCDN('//cdnjs.cloudflare.com/ajax/libs/html5shiv/%s/' %
HTML5SHIV_VERSION))
respondjs = lwrap(
WebCDN('//cdnjs.cloudflare.com/ajax/libs/respond.js/%s/' %
RESPONDJS_VERSION))
比如换成http://cdn.bootcss.com提供的资源:
bootstrap = lwrap(
WebCDN('//cdn.bootcss.com/bootstrap/%s/' % BOOTSTRAP_VERSION), local)
jquery = lwrap(
WebCDN('//cdn.bootcss.com/jquery/%s/' % JQUERY_VERSION), local)
html5shiv = lwrap(
WebCDN('//cdn.bootcss.com/html5shiv/%s/' % HTML5SHIV_VERSION))
respondjs = lwrap(
WebCDN('//cdn.bootcss.com/respond.js/%s/' % RESPONDJS_VERSION))