gpt4 book ai didi

django - HTTP/1.0 301永久移动-Django

转载 作者:行者123 更新时间:2023-12-01 08:51:21 24 4
gpt4 key购买 nike

我已经使用djangorestframework创建了一个API,但是当我使用 python manage.py runserver 命令在终端中运行它时,它显示“HTTP/1.0 301永久移动”错误。 This the Message which it shows

但是很酷的事情是,当我在浏览器中运行它时,它会显示数据。
This the result in Chrome

我想知道它发生了什么。

在这种情况下,POST调用也不起作用。

下面是代码:

serializers.py

from rest_framework import serializers
from snippets.models import Snippet

class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ('title','code',)

def create(self, validated_data):
return Snippet.objects.create(**validated_data)


def update(self, instance, validated_data):
instance.title = validated_data.get('title', instance.title)
instance.code = validated_data.get('code', instance.code)
instance.save()
return instance

Views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer


# Create your views here.


class JSONResponse(HttpResponse):
def __init__(self,data,**kwargs):
content = JSONRenderer().render(data)
kwargs['content_type']='application/json'
super(JSONResponse, self).__init__(content, **kwargs)

@csrf_exempt
def snippet_list(request):
"""
List all code snippets, or create a new snippet.
"""
if request.method == 'GET':
snippets = Snippet.objects.all()
serializer = SnippetSerializer(snippets, many=True)
return JSONResponse(serializer.data)

elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = SnippetSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JSONResponse(serializer.data, status=201)
return JSONResponse(serializer.errors, status=400)

@csrf_exempt
def snippet_detail(request, pk):
"""
Retrieve, update or delete a code snippet.
"""
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return HttpResponse(status=404)

if request.method == 'GET':
serializer = SnippetSerializer(snippet)
return JSONResponse(serializer.data)

elif request.method == 'PUT':
data = JSONParser().parse(request)
serializer = SnippetSerializer(snippet, data=data)
if serializer.is_valid():
serializer.save()
return JSONResponse(serializer.data)
return JSONResponse(serializer.errors, status=400)

elif request.method == 'DELETE':
snippet.delete()
return HttpResponse(status=204)

型号
from __future__ import unicode_literals

from django.db import models

# Create your models here.


class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
code = models.TextField()


class Meta:
ordering = ('created',)

最佳答案

301不是错误,而是重定向。在命令行中,您请求的URL不带斜杠,但您的URL模式希望该斜杠在那里。在这种情况下,Django有一个不错的convenience feature返回重定向。

与您的命令行HTTP客户端不同,您的浏览器会识别重定向,然后跟进对新URL的第二个请求,包括尾部斜杠。

关于django - HTTP/1.0 301永久移动-Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41118819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com