简体   繁体   English

Django REST 框架 API:如何在 ZEF6784A1DA0D4D7 服务器上使用用户提供的名称(例如 username.jpg)保存/上传图像

[英]Django REST Framework API : How to save/upload images with the name given by user(e.g. username.jpg) at Django server

I want to upload image with the name (which is given by user) at Django server through rest API,but i am not be able to find out the solution for this.Please tell me how to upload image with given name.我想通过 rest API 在 Django 服务器上上传带有名称(由用户提供)的图像,但我无法找到给定的图像上传解决方案。 here is my code(mainly):这是我的代码(主要):

IN API TASK ->URLS:在 API 任务->URLS:

from django.conf.urls import include, url
from django.contrib import admin
from rest_framework import routers
from django.conf import settings
from myapi import views

from django.conf.urls.static import static
#Define API Routes

router = routers.DefaultRouter()
router.register(r'myimage', views.myimageViewSet)  #we have only on viewset


urlpatterns = [
   url(r'^',include(router.urls)),
   url(r'^admin/',admin.site.urls),
]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

IN My API在我的 API

1. MODEL 1. MODEL

from django.db import models

# Create your models here.
class myimage(models.Model):
    my_name=models.CharField(max_length=50)
    my_image=models.ImageField(upload_to='Images/',default='Images/None/No-img.jpg')

    def __str__(self):
        return self.my_name

2.SERIALIZERS 2.序列化器

from rest_framework import serializers
from .models import myimage

class myimageserializer(serializers.ModelSerializer):
    class Meta:
        model =myimage
       fields=('id','my_name','my_image')

3. VIEWS 3. 意见

from django.shortcuts import render
from .models import myimage
from rest_framework import viewsets
from .serializers import myimageserializer
from rest_framework import filters
import django_filters.rest_framework

class myimageViewSet(viewsets.ModelViewSet):
    queryset = myimage.objects.all()  #We use Filters for Ordering so remove order_by part
    serializer_class = myimageserializer
    filter_backends = (django_filters.rest_framework.DjangoFilterBackend,filters.OrderingFilter,)
    ordering  = ('id','my_name',)

4.ADMIN 4.管理员

from django.contrib import admin
from .models import myimage

admin.site.register(myimage)

You need to use FileParser to be able to get your image details in the request data object.您需要使用FileParser才能在请求数据 object 中获取您的图像详细信息。 I recommend you to follow the example in DRF's FileParser Example我建议您遵循 DRF 的FileParser 示例中的示例

I changed my code as mentioned below and now its working for me if you have any better solution please suggest here #happycoding我按如下所述更改了我的代码,如果您有任何更好的解决方案,现在它对我有用,请在此处提出建议#happycoding

1. views.py 1.views.py

from django.shortcuts import render
from .models import myimage
from rest_framework import views
from .serializers import myimageserializer
import django_filters.rest_framework
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

class myimageView(APIView):
   
    def get(self, request):
        myimagelocal= myimage.objects.all()
        serializer = myimageserializer(myimagelocal, many=True)
        return Response(serializer.data)
  
    def post(self, request):
        myname=request.data['my_image'].name
        myformat=""
        for c in reversed(myname):
            myformat+=c
            if c=='.' :
                break
        myformat=myformat[: : -1]
        request.FILES['my_image'].name=request.data['my_name']+myformat
       
        serializer = myimageserializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 

IN API_TASK->URLS:在 API_TASK-> URLS 中:

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls,name='admin'),
    path('',include('myapi.urls'))
]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

IN API_Task->myapi->url在 API_Task->myapi->url

from django.urls import path
from .views import myimagedetailsView, myimageView

urlpatterns = [
    path('myimage/', myimageView.as_view(),name='myimageView'),
]

Rest files unchanged Rest 文件不变

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从django rest框架3 pre_save,pre_delete不可用,而不是如何在任何字段中操作和插入请求的用户名? - From django rest framework 3 pre_save, pre_delete is not available than how to manipulate and insert requested user name in any field? 如何在 django rest 框架中上传文档 - how to upload a document in django rest framework 字段名称“用户名”对模型“用户”无效django rest-auth - Field name `username` is not valid for model `User` django rest-auth 如何使用 django rest 框架对用户进行身份验证 - How to authenticate a user using django rest framework 没有文件上传到Django Rest框架 - no file on upload to django rest framework Django Rest Framework如何禁止用户更改用户名? - Django Rest Framework how to forbid users to change their username? 如何获取 url 用户名作为 slug 参数 django rest 框架 - How to get an url with username as slug parameter django rest framework 如何在 django rest 框架中从两个模型编辑用户配置文件并保存更改 - How to edit user profile in django rest framework from two models and save the change django中给出电子邮件时,如何从数据库中查找用户的用户名 - how to find the username of a user from database when email is given in django 更新用户REST框架Django - Update User REST framework Django
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM