Flask-AttributeError:“模块"对象没有属性"items" [英] Flask - AttributeError: 'module' object has no attribute 'items'

查看:116
本文介绍了Flask-AttributeError:“模块"对象没有属性"items"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用flask-restful,并且具有以下API类:

I am using flask-restful and have the following API class:

views.py

from datetime import date
from flask import jsonify
from flask.ext.restful import Resource, reqparse
from backend import db
from .models import User, Post, Comment, WorkExperience
from flask.ext.restful import fields, marshal
from backend.helpers import AuthRequiredResource, UserMixin

class CommentList(UserMixin, AuthRequiredResource):
    def __init__(self):
        self.fields = {
            'id': fields.Integer,
            'body': fields.String,
            'added_on': fields.DateTime

        }

        self.parser = reqparse.RequestParser()
        self.parser.add_argument('body')
        super(CommentList, self).__init__()

    def get(self, post_id):
        comments = Post.query.get_or_404(post_id).comments.all()
        # APPEARS THAT THE ERROR ARISES HERE
        return marshal(comments, fields)

    def post(self, post_id):
        args = self.parser.parse_args()
        user = self.get_user()
        c = Comment(post_id, args['body'], user.id)
        db.session.add(c)
        db.session.commit()

helper.py

from flask import request
from flask.ext.restful import Resource

from backend.models import User

class UserMixin(object):
    @staticmethod
    def get_user():
        user = User.query.filter_by(
            auth_token=request.headers.environ.get('HTTP_AUTHORIZATION')
        ).first()
        if user is None:
            return {'message': 'Invalid auth token'}, 401
        return user


class AuthRequiredResource(Resource):
    def dispatch_request(self, *args, **kwargs):

        if request.headers.environ.get('HTTP_AUTHORIZATION', None) is not None:
            return super(AuthRequiredResource, self).dispatch_request(*args,
                                                                      **kwargs)
        else:
            return {'message': 'Auth Token missing'}, 401

我正要面对AttributeError: 'module' object has no attribute 'items'.

回溯是:

File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/home/utkbansal/.virtualenvs/cv_backend/lib/python2.7/site-packages/flask_restful/__init__.py", line 271, in error_router
    return original_handler(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/utkbansal/.virtualenvs/cv_backend/lib/python2.7/site-packages/flask_restful/__init__.py", line 268, in error_router
    return self.handle_error(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/utkbansal/.virtualenvs/cv_backend/lib/python2.7/site-packages/flask_restful/__init__.py", line 271, in error_router
    return original_handler(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/utkbansal/.virtualenvs/cv_backend/lib/python2.7/site-packages/flask_restful/__init__.py", line 268, in error_router
    return self.handle_error(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/utkbansal/.virtualenvs/cv_backend/lib/python2.7/site-packages/flask_restful/__init__.py", line 477, in wrapper
    resp = resource(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask/views.py", line 84, in view
    return self.dispatch_request(*args, **kwargs)
  File "/home/utkbansal/PycharmProjects/cv_backend/backend/helpers.py", line 12, in dispatch_request
    **kwargs)
  File "/home/utkbansal/.virtualenvs/cv_backend/lib/python2.7/site-packages/flask_restful/__init__.py", line 587, in dispatch_request
    resp = meth(*args, **kwargs)
  File "/home/utkbansal/PycharmProjects/cv_backend/backend/views.py", line 130, in get
    return marshal(comments, fields)
  File "/home/utkbansal/.virtualenvs/cv_backend/lib/python2.7/site-packages/flask_restful/__init__.py", line 635, in marshal
    if envelope else [marshal(d, fields) for d in data])
  File "/home/utkbansal/.virtualenvs/cv_backend/lib/python2.7/site-packages/flask_restful/__init__.py", line 639, in marshal
    for k, v in fields.items())
AttributeError: 'module' object has no attribute 'items'

看看类似的问题,这可能是循环依赖问题,但我无法弄清楚.因此,我已经包括了以上两个文件的所有导入.

Looking at similar questions, this might be a circular dependency problem, but I'm unable to figure it out. So I have included all the imports of both the files above.

使用marshall函数时,错误可能出在get方法的返回行上.

The error may be on the return line of the get method, in using the marshall function.

推荐答案

fields是一个模块,在此处导入:

fields is a module, imported here:

from flask.ext.restful import fields, marshal

因此,这将marshal交给一个模块:

Therefore, this hands marshal a module:

def get(self, post_id):
    comments = Post.query.get_or_404(post_id).comments.all()
    return marshal(comments, fields)

您可能想使用self.fields:

def get(self, post_id):
    comments = Post.query.get_or_404(post_id).comments.all()
    return marshal(comments, self.fields)

这篇关于Flask-AttributeError:“模块"对象没有属性"items"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆