UnboundLocalError:分配前引用了局部变量“pin”

尼古拉斯·安

我一直致力于制作一个像 Pinterest 一样的网站,现在我正在研究使用“login_required”装饰器的搜索功能。视图尚未完成,因为我构建了它,因为我检查请求是否通过 Postman 顺利完成。但是,请求甚至没有到达视图中的第一行代码,因为我不断收到此错误。以下是我使用 python 调试器测试时看到的内容。

-> return func(self, request, *args, **kwargs)
(Pdb) n
UnboundLocalError: local variable 'pin' referenced before assignment
> /Users/woohyunan/projects/Wecode/pinterrorist-backend/pin/views.py(38)wrapper()

下面是整个views.py的SearchView部分:

class SearchView(View):

    @login_required
    def post(self, request, *args, **kwargs):
        body        = json.loads(request.body)
        user        = kwargs['user']
        user_id     = kwargs['user_id']
        search_term = request.POST.get('search', None)

        return JsonResponse({'search_term': search_term})

下面是装饰器:

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

            import pdb; pdb.set_trace()
            header_token            = request.META.get('HTTP_AUTHORIZATION')
            decoded_token           = jwt.decode(header_token, SECRET_KEY, algorithm='HS256')['id']
            user                    = User.objects.get(id=decoded_token)
            user_id                 = user.id
            kwargs['user']          = user
            kwargs['user_id']       = user_id

            try:
                if User.objects.filter(id=decoded_token).exists():
                    return func(self, request, *args, **kwargs)
                else:
                    return JsonResponse({"message": "THE USER DOES NOT EXIST"})
            except jwt.DecodeError:
                return JsonResponse({"message": "WRONG_TOKEN!"}, status=403)
            except KeyError:
                return JsonResponse({"message": "KEY ERROR"}, status=405)
            except User.objects.filter(email=decoded_token).DoesNotExist:
                return JsonResponse({"message": "USER NOT FOUND"}, status=406)
        return wrapper

如果你需要更多关于这个神秘变量“pin”的细节,下面是整个views.py:

import boto3
import json
import jwt

from django.shortcuts       import render
from django.views           import View
from django.http            import JsonResponse, HttpResponse
from django.forms.models    import model_to_dict
from django.core            import serializers
from django.db.models       import Q

from pin.models         import (
    Topic,
    UserTopic,
    Board,
    Pin,
    Topic,
    PinUser,
    PinTopic,
    Comment
)
from account.models         import User, Follow, Social
from pinterrorist.settings  import S3URL, SECRET_KEY

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

            import pdb; pdb.set_trace()
            header_token            = request.META.get('HTTP_AUTHORIZATION')
            decoded_token           = jwt.decode(header_token, SECRET_KEY, algorithm='HS256')['id']
            user                    = User.objects.get(id=decoded_token)
            user_id                 = user.id
            kwargs['user']          = user
            kwargs['user_id']       = user_id

            try:
                if User.objects.filter(id=decoded_token).exists():
                    return func(self, request, *args, **kwargs)
                else:
                    return JsonResponse({"message": "THE USER DOES NOT EXIST"})
            except jwt.DecodeError:
                return JsonResponse({"message": "WRONG_TOKEN!"}, status=403)
            except KeyError:
                return JsonResponse({"message": "KEY ERROR"}, status=405)
            except User.objects.filter(email=decoded_token).DoesNotExist:
                return JsonResponse({"message": "USER NOT FOUND"}, status=406)
        return wrapper

class IntroTopicView(View):
    @login_required
    def get(self, request, *args, **kwargs):
        user        = kwargs['user']
        user_id     = kwargs['user_id']
        topiclst        = list(Topic.objects.values())
        return JsonResponse({"topics": topiclst})

    @login_required
    def post(self, request, *args, **kwargs):
        body            = json.loads(request.body)
        user            = kwargs['user']
        user_id         = kwargs['user_id']
        chosen_topics   = body['chosen_topics']
        for topic in chosen_topics:
            user.topics.add(topic)
        return JsonResponse({'chosen_topics': chosen_topics}, status=200)

class MyPageView(View):
    @login_required
    def get(self, request, **kwargs):
        # receive the user object from the decorator
        user        = kwargs['user']
        user_id     = kwargs['user_id']
        # receive the user's interested topics
        pins = []
        topics      = user.topics.all()
        for topic in topics:
            for pin in Pin.objects.filter(topic=topic):
                pins.append(pin)
        pin_user_data = serializers.serialize('json', pin.user.all())
        pins_detail = [{"image":pin.image_url, "text1":pin.paragraph1, "text2":pin.paragraph2, "users": pin_user_data} for pin in pins]
        return JsonResponse({"pins" : pins_detail})

class CommentView(View):
    @login_required
    def post(self, request, pin, **kwargs):
        user        = kwargs['user']
        user_id     = kwargs['user_id']
        pin_id      = pin
        body        = json.loads(request.body)
        comment     = body['comment']
        pin         = Pin.objects.get(id=pin_id)

        new_comment             = Comment.objects.create(content=comment, pin=pin, user=user)
        pin_comment             = pin.comments.all()
        try:
            pin_comment_info    = [{"user": comment.user.email.split("@")[0], "comment": model_to_dict(comment)} for comment in pin_comment]
        except AttributeError:
            pin_comment_info    = [{"user": comment.user.social_id, "comment": model_to_dict(comment)} for comment in pin_comment]

        comment_len             = len(pin_comment)
        pin_user_data           = serializers.serialize('json', pin.user.all())

        return JsonResponse({"pin": {"id": pin.id, "image_url": pin.image_url, "text1": pin.paragraph1, "text2": pin.paragraph2, "users": pin_user_data}, "comment": pin_comment_info, "comment_total": comment_len})

    @login_required
    def delete(self, request, pin, **kwargs):
        user        = kwargs['user']
        user_id     = kwargs['user_id']
        pin_id      = pin
        body        = json.loads(request.body)
        comment_id  = body['comment_id']
        pin         = Pin.objects.get(id=pin_id)

        Comment.objects.get(id=comment_id).delete()
        pin_comment             = pin.comments.all()
        try:
            pin_comment_info    = [{"user": comment.user.email.split("@")[0], "comment": model_to_dict(comment)} for comment in pin_comment]
        except AttributeError:
            pin_comment_info    = [{"user": comment.user.social_id, "comment": model_to_dict(comment)} for comment in pin_comment]

        comment_len             = len(pin_comment)
        pin_user_data           = serializers.serialize('json', pin.user.all())

        return JsonResponse({"pin": {"id": pin.id, "image_url": pin.image_url, "text1": pin.paragraph1, "text2": pin.paragraph2, "users": pin_user_data}, "comment": pin_comment_info, "comment_total": comment_len})

    @login_required
    def get(self, request, pin, **kwargs):
        user        = kwargs['user']
        user_id     = kwargs['user_id']

        pin_id = pin
        pin = Pin.objects.get(id=pin_id)
        pin_comment             = pin.comments.all()
        try:
            pin_comment_info    = [{"user": comment.user.email.split("@")[0], "comment": model_to_dict(comment)} for comment in pin_comment]
        except AttributeError:
            pin_comment_info    = [{"user": comment.user.social_id, "comment": model_to_dict(comment)} for comment in pin_comment]

        comment_len             = len(pin_comment)
        pin_user_data           = serializers.serialize('json', pin.user.all())

        return JsonResponse({"pin": {"id": pin.id, "image_url": pin.image_url, "text1": pin.paragraph1, "text2": pin.paragraph2, "users": pin_user_data}, "comment": pin_comment_info, "comment_total": comment_len})

class PinView(View):
    @login_required
    def get(self, request, pin, **kwargs):
        user        = kwargs['user']
        user_id     = kwargs['user_id']

        pin_id = pin
        pin = Pin.objects.get(id=pin_id)
        pin_comment             = pin.comments.all()
        try:
            pin_comment_info    = [{"user": comment.user.email.split("@")[0], "comment": model_to_dict(comment)} for comment in pin_comment]
        except AttributeError:
            pin_comment_info    = [{"user": comment.user.social_id, "comment": model_to_dict(comment)} for comment in pin_comment]

        comment_len             = len(pin_comment)
        pin_user_data           = serializers.serialize('json', pin.user.all())

        return JsonResponse({"pin": {"id": pin.id, "image_url": pin.image_url, "text1": pin.paragraph1, "text2": pin.paragraph2, "users": pin_user_data}, "comment": pin_comment_info, "comment_total": comment_len})

class SearchView(View):

    @login_required
    def post(self, request, *args, **kwargs):
        body        = json.loads(request.body)
        user        = kwargs['user']
        user_id     = kwargs['user_id']
        search_term = request.POST.get('search', None)

        return JsonResponse({'search_term': search_term})

我如何摆脱这个错误?我已经尝试了一切,但它不会消失......

非常感谢!

Tartempion34

这里:

pin_user_data = serializers.serialize('json', pin.user.all())

这条线不在循环中。所以你的“pin”可能没有定义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

UnboundLocalError:赋值前引用了局部变量“readlgt”

UnboundLocalError:赋值前引用了局部变量“strdate”

UnboundLocalError:赋值前引用了局部变量“depcoord”

UnboundLocalError:赋值前引用了局部变量“med”

UnboundLocalError:赋值前引用了局部变量“检查”

UnboundLocalError:赋值前引用了局部变量“photoshop”

UnboundLocalError:赋值前引用了局部变量“照片”

Python错误-UnboundLocalError:分配前引用了局部变量

UnboundLocalError:分配前引用了局部变量“用户名”

ipython%timeit“分配前引用了局部变量'a'

Python pygame-弹跳球(UnboundLocalError:分配前引用了局部变量'move_y')

UnboundLocalError:赋值之前引用了局部变量“ cars”

UnboundLocalError:赋值之前引用了局部变量“ e”

UnboundLocalError:在赋值之前引用了局部变量 <function>

麻烦:UnboundLocalError:赋值之前引用了局部变量

'UnboundLocalError:赋值之前引用了局部变量'lower'

UnboundLocalError:在赋值之前引用了局部变量“标签”

UnboundLocalError:在赋值之前引用了局部变量 <var>

UnboundLocalError:在Pandas中分配之前引用了局部变量“ y”

UnboundLocalError:在Discord.py中分配之前引用了局部变量'x'

另一个UnboundLocalError:分配问题之前引用了局部变量

UnboundLocalError:在discord.py中分配之前引用了局部变量“ member_id”

UnboundLocalError:在为Simbols Fixer分配Python之前引用了局部变量'X'

Python3 UnboundLocalError:赋值前引用了局部变量

“UnboundLocalError:赋值前引用了局部变量‘option2’”

如果 g == 0: UnboundLocalError: 赋值前引用了局部变量“g”

问题加载 Django 装置。UnboundLocalError:赋值前引用了局部变量“pk”

Zip() 函数返回 UnboundLocalError:赋值前引用了局部变量“zip”

如何解决:UnboundLocalError:赋值前引用了局部变量“t”?在蟒蛇?