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']))