(Django) 'CommentView'オブジェクトには属性 'body'がありません

ニコラス・アン

私はデコレータでコメント機能をエミュレートしようとしています。

import json
import jwt

from django.views           import View
from django.http            import JsonResponse
from functools              import wraps
from django.db.models       import Q

from .models                    import Comment
from account.models   import Account

class CommentView(View):


    def login_required(func):
        @wraps(func)
        def wrapper(request, *args, **kwargs):
            # import pdb; pdb.set_trace()
            given_token     = json.loads(request.body)['access_token']
            decoded_token   = jwt.decode(given_token,None,None)
            try:
                if Account.objects.filter(username=decoded_token).exists():
                    return func(request, *args, **kwargs)
                return JsonResponse({"message": "username does not exist"})
            except KeyError:
                return JsonResponse({"message": "INVALID_KEYS"}, status=403)
        return wrapper



    @login_required
    def post(self, request):
        print("request ", json.loads(request.body))
        data = json.loads(request.body)
        Comment.objects.create(
                username    = jwt.decode(json.loads(request.body)['access_token']),
                content     = data['content'],
        )
        return JsonResponse({"message":"Comment Created!"}, status=200)

    def get(self, request):
        return JsonResponse({'comment':list(Comment.objects.values())}, status=200)

そして、Httpieというプログラムを使用して、次のようにJSONPOSTリクエストを送信しました。

http -v http://127.0.0.1:8000/comment access_token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImJlY2sifQ.2unop67pLHOshcGs385GwOvaZZW_J--TRNXyHI3gKNU" content="hello"

これはSignInView(別のアプリにあります)中に提供されるトークンの正確なコピーであるため、トークンに問題はありません。

以下は、「コメント」アプリのmodels.pyファイルです。

from django.db                  import models
from account.models   import Account

class Comment(models.Model):
    username    = models.ForeignKey(Account, on_delete=models.CASCADE)
    content     = models.TextField()
    created_time= models.DateTimeField(auto_now_add = True)
    updated_time= models.DateTimeField(auto_now = True)

    class Meta:
        db_table = 'comments'

    def __str__(self):
        return self.username + ": " + self.content

ただし、上記のようにHttpieを使用してPOSTリクエストを送信すると、次のエラーが発生します。

Internal Server Error: /comment
Traceback (most recent call last):
  File "/Users/woohyunan/miniconda3/auth/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/Users/woohyunan/miniconda3/auth/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/woohyunan/miniconda3/auth/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/woohyunan/miniconda3/auth/lib/python3.8/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/woohyunan/miniconda3/auth/lib/python3.8/site-packages/django/views/generic/base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "/Users/woohyunan/projects/Wecode/westagram/KillaGramz-backend/comment/views.py", line 19, in wrapper
    given_token     = json.loads(request.body)['access_token']
AttributeError: 'CommentView' object has no attribute 'body'
[20/May/2020 17:35:40] "POST /comment HTTP/1.1" 500 73224

何が原因でエラーが発生するのか疑問に思っていました。データベース内のユーザー名と一致するかどうかを確認できるように、トークンをデコードできるようにするjsonリクエスト本文をデコレータに入れる方法はないのでしょうか(デコードされたバージョンはユーザー名になります)。

どうもありがとうございます!!

ニコラス・アン

私は問題を解決しました!

def wrapper(request, *args, **kwargs):

する必要があります

def wrapper(self, request, *args, **kwargs):

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Django:オブジェクトに属性 'id'がありません

分類Dev

Django:オブジェクトに属性がありません 'update'

分類Dev

Django:AttributeError: "オブジェクトに属性がありません"

分類Dev

Django 'AnonymousUser'オブジェクトには属性 '_meta'がありません

分類Dev

Django'dict 'オブジェクトには属性' user_id 'がありません

分類Dev

Django'dict 'オブジェクトには属性' getlist 'がありません

分類Dev

Django'function 'オブジェクトには属性' get 'がありません

分類Dev

'list'オブジェクトには属性がありません 'startswith' Django

分類Dev

Django / python: 'function'オブジェクトには属性がありません 'as_view'

分類Dev

Django RestFrameworkの「RelatedManager」オブジェクトには属性がありません

分類Dev

Django-ReverseManyToOneDescriptor 'オブジェクトには属性' all 'がありません

分類Dev

Django admin: 'bool'オブジェクトには属性がありません 'startswith'

分類Dev

Django'WSGIRequest 'オブジェクトには属性' data 'がありません

分類Dev

Django'TestForm 'オブジェクトには属性' fields 'がありません

分類Dev

'User'オブジェクトには属性がありません 'is_valid' Django

分類Dev

Djangoの「WSGIRequest」オブジェクトには属性「Post」がありません

分類Dev

'super'オブジェクトには属性がありません 'save' Django

分類Dev

Django'str 'オブジェクトには属性' get 'がありません

分類Dev

'NoneType'オブジェクトには属性がありません 'user' Django

分類Dev

Django:「設定」オブジェクトには属性がありません

分類Dev

Django:「SessionStore」オブジェクトには属性「session」がありません

分類Dev

'WSGIRequest'オブジェクトには属性 'sessions'がありません(Django 2.1.2)

分類Dev

Djangoの「dict」オブジェクトには属性がありません

分類Dev

オブジェクトには、djangoの属性 'is_hidden'がありません

分類Dev

Django'User 'オブジェクトには属性' phone 'がありません

分類Dev

Django-LoginView: 'AnonymousUser'オブジェクトには属性 '_meta'がありません

分類Dev

Django:オブジェクトには属性がありません 'annotate'

分類Dev

Django'NoneType 'オブジェクトには属性' amount 'がありません

分類Dev

djangoオブジェクトには属性status_codeがありません

Related 関連記事

  1. 1

    Django:オブジェクトに属性 'id'がありません

  2. 2

    Django:オブジェクトに属性がありません 'update'

  3. 3

    Django:AttributeError: "オブジェクトに属性がありません"

  4. 4

    Django 'AnonymousUser'オブジェクトには属性 '_meta'がありません

  5. 5

    Django'dict 'オブジェクトには属性' user_id 'がありません

  6. 6

    Django'dict 'オブジェクトには属性' getlist 'がありません

  7. 7

    Django'function 'オブジェクトには属性' get 'がありません

  8. 8

    'list'オブジェクトには属性がありません 'startswith' Django

  9. 9

    Django / python: 'function'オブジェクトには属性がありません 'as_view'

  10. 10

    Django RestFrameworkの「RelatedManager」オブジェクトには属性がありません

  11. 11

    Django-ReverseManyToOneDescriptor 'オブジェクトには属性' all 'がありません

  12. 12

    Django admin: 'bool'オブジェクトには属性がありません 'startswith'

  13. 13

    Django'WSGIRequest 'オブジェクトには属性' data 'がありません

  14. 14

    Django'TestForm 'オブジェクトには属性' fields 'がありません

  15. 15

    'User'オブジェクトには属性がありません 'is_valid' Django

  16. 16

    Djangoの「WSGIRequest」オブジェクトには属性「Post」がありません

  17. 17

    'super'オブジェクトには属性がありません 'save' Django

  18. 18

    Django'str 'オブジェクトには属性' get 'がありません

  19. 19

    'NoneType'オブジェクトには属性がありません 'user' Django

  20. 20

    Django:「設定」オブジェクトには属性がありません

  21. 21

    Django:「SessionStore」オブジェクトには属性「session」がありません

  22. 22

    'WSGIRequest'オブジェクトには属性 'sessions'がありません(Django 2.1.2)

  23. 23

    Djangoの「dict」オブジェクトには属性がありません

  24. 24

    オブジェクトには、djangoの属性 'is_hidden'がありません

  25. 25

    Django'User 'オブジェクトには属性' phone 'がありません

  26. 26

    Django-LoginView: 'AnonymousUser'オブジェクトには属性 '_meta'がありません

  27. 27

    Django:オブジェクトには属性がありません 'annotate'

  28. 28

    Django'NoneType 'オブジェクトには属性' amount 'がありません

  29. 29

    djangoオブジェクトには属性status_codeがありません

ホットタグ

アーカイブ