Django rest framework даже не показывает возможность загрузки изображения. У меня есть поле imageField в модели
django rest framework даже не показывает возможность загрузки изображения. У меня есть imageField в модели. Я также получаю GET http://127.0.0.1:8000/api/person-create/ 405 (Method Not Allowed)
в консоли, когда перехожу по api url для создания нового элемента.
TLDR Я пытаюсь загрузить изображения с помощью django rest framework, я могу сделать это из админки, но не с помощью DRF или фронтенда Любая помощь будет признательна Спасибо.
view.py
@api_view(['POST'])
def create_person(request):
serializer = PersonSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data)
serializer.py
class PersonSerializer(serializers.ModelSerializer):
image = serializers.ImageField(max_length=None, allow_empty_file=False, allow_null=True, required=True)
class Meta():
model = Person
fields = 'name', 'about', 'created_at', 'email', 'image'
urls.py
urlpatterns = [
path('', views.apiOverview, name='apiOverview'),
path('persons/', views.all_persons, name='all_persons'),
path('person/<str:pk>', views.person, name='person'),
path('person-create/', views.create_person, name='create'),
path('person-update/<str:pk>', views.update_person, name='update_person'),
path('person-delete/<str:pk>', views.delete_person, name='delete_person'),
]
models.py
class Person(models.Model):
name = models.CharField(max_length=50)
about = models.CharField(max_length=10000)
created_at = models.DateTimeField(auto_now_add=True)
email = models.EmailField(unique=True)
image = models.ImageField(blank=True, null=True, upload_to='media/', default='default.png')
Вот часть фронтенда create.js
Вы ограничили разрешенные методы только POST в вашем представлении, тогда ожидается, что вы получите 405 ошибку при выполнении GET. Вы можете добавить метод GET
@api_view(['POST', 'GET'])
Помните, что вам нужно будет обработать случай GET и вернуть что-то. Вы можете посмотреть пример в документации по drf здесь: https://www.django-rest-framework.org/api-guide/views/#api_view
Кроме того, в качестве хорошей практики в REST API следует избегать именования конечных точек с помощью действий типа -create
, -update
, -delete
. Стандартом является наличие одного url для каждого ресурса, например persons/
, а затем указывается, что POST будет использоваться для создания, GET будет использоваться для получения (один человек из списка), PUT/PATCH будет использоваться для обновления.
И все это вы можете легко сделать, используя DRF routers
и viewsets
, или ModelViewSet
, более подходящий для вашего случая. Смотрите больше в документации по drf здесь:
https://www.django-rest-framework.org/api-guide/viewsets/#modelviewset
https://www.django-rest-framework.org/api-guide/routers/#routers