0

Django REST API の使い方を教えていますが、JSONDecodeError が発生します。セッションに保存されているユーザーに応じて投稿を表示しようとしています。後で使用するために、ユーザーのユーザー名、パスワード、および ID をセッションに保存しています。JSONDecodeError は、HTML エラー ページを見ると、命令 posts = posts_response.json() の行をターゲットにしています。

これが私のviews.pyです:

posts_path = "http://127.0.0.1:8000/posts/"

def index(request):
   if request.method=='GET':
       post_form = PostForm()
       posts_response = requests.get(posts_path)
       posts = posts_response.json()
       context = {
            'post_form': post_form,
            'post_list': posts,
       }
       return render(request, 'UserLanding/index.html', context)
    else:
        return render(request, "UserLanding/index.html")

これは私のビューセットです:

class PostView(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

    def get_queryset(self):
        query_set = self.queryset.filter(user=self.request.session['id'])
        return query_set

class SubscriberView(viewsets.ModelViewSet):
    queryset = Subscriber.objects.all()
    serializer_class = SubscriberSerializer

登録した URL:

router = routers.DefaultRouter()
router.register('posts', viewsets.PostView)
router.register('users', viewsets.SubscriberView)

そしてシリアライザ:

class SubscriberSerializer(serializers.ModelSerializer):
class Meta:
    model = Subscriber
    fields = ('id', 'username', 'password')


class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ('id', 'post_text', 'pub_date', 'user')

問題を見つけるのを手伝ってください。前もって感謝します

編集:次のように PostView コードに関数を追加することで、問題を解決できました。

@action(detail=False, methods=['GET'], url_path=r'(?P<user_id>[0-9]+)')
def find_by_user_id(self, request, user_id):
    user = Subscriber.objects.get(id=user_id)
    posts = Post.objects.filter(user=user)
    serializer = self.serializer_class(posts, many=True)
    return Response(serializer.data)

そして私の request.get() は今これを指しています:

posts_response = requests.get(posts_path + str(request.session['id']))
4

0 に答える 0