File "app.py", line 13, in
from models.user import User
File "/Users/toby/api/api/models/user.py", line 10, in
class User(current_app.dbuser.Model):
File "/Users/toby/api/venv/lib/python3.4/site-packages/werkzeug/local.py", line 343, in __getattr__
return getattr(self._get_current_object(), name)
File "/Users/toby/api/venv/lib/python3.4/site-packages/werkzeug/local.py", line 302, in _get_current_object
return self.__local()
File "/Users/toby/api/venv/lib/python3.4/site-packages/flask/globals.py", line 34, in _find_app
raise RuntimeError('working outside of application context')
RuntimeError: working outside of application context
Если я перенесу содержимое файла user.py в файл app.py и изменю наследование с current_app.dbuser.Model на app.dbuser.Model, похоже, все будет работать нормально. Кто-нибудь знает, что я делаю не так?
[code]import os from flask import Flask, jsonify, url_for, redirect, request, g, current_app from flask_pymongo import PyMongo from flask_restful import Api, Resource from flask_httpauth import HTTPTokenAuth from flask.ext.sqlalchemy import SQLAlchemy from flask.ext.httpauth import HTTPBasicAuth
from resources.deals import Deals from resources.stores import Stores
#Setup the app api = Api(app) api.add_resource(Deals, '/deals', '/Deals//',endpoint="dealType") api.add_resource(Stores, '/stores', '/Stores//',endpoint="type")
if __name__ == "__main__": if not os.path.exists(USERDBFILE): app.dbuser.create_all() app.run(debug=True) [/code]
Мой файл user.py выглядит следующим образом:
[code]from flask import current_app import os from flask import Flask, abort, request, jsonify, g, url_for from flask.ext.sqlalchemy import SQLAlchemy from flask.ext.httpauth import HTTPBasicAuth from passlib.apps import custom_app_context as pwd_context from itsdangerous import (TimedJSONWebSignatureSerializer as Serializer, BadSignature, SignatureExpired)
class User(current_app.dbuser.Model): __tablename__ = 'user_api' id = current_app.dbuser.Column(current_app.dbuser.Integer,primary_key=True) date_created = current_app.dbuser.Column(current_app.dbuser.DateTime,default=current_app.dbuser.func.current_timestamp()) date_modified = current_app.dbuser.Column(current_app.dbuser.DateTime,default=current_app.dbuser.func.current_timestamp(), onupdate=current_app.dbuser.func.current_timestamp()) # User Name name = current_app.dbuser.Column(current_app.dbuser.String(128),nullable=False) # Identification Data: email & password email = current_app.dbuser.Column(current_app.dbuser.String(128),nullable=False,unique=True) password = current_app.dbuser.Column(current_app.dbuser.String(192),nullable=False) company = current_app.dbuser.Column(current_app.dbuser.String(128),nullable=False,unique=True) # Authorization Data: role & status role = current_app.dbuser.Column(current_app.dbuser.String(32),nullable=False,default='user') status = current_app.dbuser.Column(current_app.dbuser.Boolean,nullable=False,default=True) hourly_limit = current_app.dbuser.Column(current_app.dbuser.Integer,nullable=False,default=100) daily_limit = current_app.dbuser.Column(current_app.dbuser.Integer,nullable=False,default=2400) monthly_limit = current_app.dbuser.Column(current_app.dbuser.Integer,nullable=False,default=2400) admin = current_app.dbuser.Column(current_app.dbuser.Boolean,nullable=False,default=True)
def generate_auth_token(self, expiration=600): s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration) return s.dumps({'id': self.id})
@staticmethod def verify_auth_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except SignatureExpired: return None # valid token, but expired except BadSignature: return None # invalid token user = User.query.get(data['id']) return user [/code]
Я запускаю файл в том же каталоге, что и app.py, используя
[code]python app.py [/code]
Но возвращается следующая ошибка:
[code]File "app.py", line 13, in from models.user import User File "/Users/toby/api/api/models/user.py", line 10, in class User(current_app.dbuser.Model): File "/Users/toby/api/venv/lib/python3.4/site-packages/werkzeug/local.py", line 343, in __getattr__ return getattr(self._get_current_object(), name) File "/Users/toby/api/venv/lib/python3.4/site-packages/werkzeug/local.py", line 302, in _get_current_object return self.__local() File "/Users/toby/api/venv/lib/python3.4/site-packages/flask/globals.py", line 34, in _find_app raise RuntimeError('working outside of application context') RuntimeError: working outside of application context [/code]
Если я перенесу содержимое файла user.py в файл app.py и изменю наследование с current_app.dbuser.Model на app.dbuser.Model, похоже, все будет работать нормально. Кто-нибудь знает, что я делаю не так?