首页 > 解决方案 > 向服务器发送数据时如何正确上传图像

问题描述

我已经实现了一个用于注册组织的视图。给定以下有效负载,如何成功上传文件:

{
"admin":{
        "username":"kapyjovu@abyssmail.com",
        "first_name":"Cindy",
        "last_name":"Georgia",
        "password":"password",
        "email":"kapyjovu@abyssmail.com"
    },
"org":{
        "name":"ARIZONA LAW SOCIETY",
        "short_name":"ALS",
        "tag_line":"ALS",
        "email":"kapyjovu@abyssmail.com",
        "company_phone": "+2540000000",
        "po_box": "200",
        "location":"NAKURU",
        "first_logo": "https://www.mintformations.co.uk/blog/wp-content/uploads/2020/05/shutterstock_583717939.jpg",
        "second_logo": "https://www.mintformations.co.uk/blog/wp-content/uploads/2020/05/shutterstock_583717939.jpg",
        "third_logo": "https://www.mintformations.co.uk/blog/wp-content/uploads/2020/05/shutterstock_583717939.jpg"
    }
}
class OrganizationRegistration(generics.CreateAPIView):
    queryset = Organization.objects.all()
    permission_classes = (permissions.AllowAny,)
    serializer_class = OrgRegistrationSerializer

    """End point to register organization"""

    def post(self, request, format=None, *args, **kwargs):
        try:
            admins = Group.objects.get(name__iexact='admin')
            admin_role = Role.objects.get(name__iexact="admin")
            
        except:
            # the admin group is
            admins = Group.objects.create(name="admin")

            admin_role = Role.objects.create(name="admin")

           
        # finally:
        try:
            admin = User.objects.create(
                username=request.data['admin']['username'],
                email=request.data['admin']['email'],
                first_name=request.data['admin']['first_name'],
                last_name=request.data['admin']['last_name'],
            )


            
            location_name = request.data['org']['location'].upper()
        
            location_obj, _  = Location.objects.get_or_create(name=location_name)
            area_name = location_obj.name
        except Exception as e:
            # print(e)
            return Response(data={"msg":str(e),"success":False, "data": None},status=status.HTTP_400_BAD_REQUEST)
        # admin.set_password(request.data['admin']['password'])


        try: 

            
            # Create Random Password   
            password = User.objects.make_random_password(length=10)
            admin.set_password(password)
            admin.save()
            # add the user creating the Organization to the admin group
            # admins.user_set.add(admin)
            admin.groups.add(admins)
            admin.roles.add(admin_role)


            first_file_logo = request.data['org']['first_logo']
            second_file_logo = request.data['org']['second_logo']
            third_file_logo = request.data['org']['third_logo']

            org = Organization.objects.create(
                name=request.data['org']['name'],
                email=request.data['org']['email'],
                location=request.data['org']['location'],
                short_name = request.data['org']['short_name'],
                tag_line = request.data['org']['tag_line'],
                company_phone =  request.data['org']['company_phone'],
                po_box = request.data['org']['po_box'],
                first_logo = first_file_logo,
                second_logo =second_file_logo ,
                third_logo =  third_file_logo
            )

            
            admin.org_id = org.id
            admin.save()
            # add the user creating the Organization to admins by DEFAULT
            # NOTE:
            # all the other normaall users will be added normally i.e
            admins.save()
            org.admin.add(admin)
            org.user_set.add(admin)
            admin.is_active = False
            admin.save()
            payload = jwt_payload_handler(admin, org)
            jwt_token = jwt_encode_handler(payload)
            support_email = settings.SUPPORT_EMAIL
            # # FIXME:
            # refactor this code inorder to have its own function
            path = get_full_path(request)

            path = settings.BASE_URL
            subject = 'Welcome onboard E-vote'
            # if the org is regestering themselves the org id will alway be zero
            message = 'Follow\n {}sso/registration/confirmation/{}/ \nto complete \
                the sign-up process. \nAfter Confirmation your Login Password is: {}'.format(
                path, jwt_token.decode("utf-8"),password)

            # print(path+'/api/sso/registration/confirmation/{}'.format(jwt_token.decode("utf-8") ))
            # invitation sent to organization
            mail_sent_to_org = send_mail(
                subject,
                message,
                support_email,
                [org.email]
            )

            message = 'Follow\n{}sso/registration/confirmation/{}/ \nto complete \
                the sign-up process. \nAfter Confirmation your Login Password use this Password: {}'.format(
                path, jwt_token.decode("utf-8") ,password)
            # invitation sent to admin
            mail_sent_to_admin = send_mail(
                subject,
                message,
                support_email,
                [admin.email]
            )
            serializer = OrgRegSerializer(org)
            res = {"msg": "Check personal and organization emails, NOTE: finish org registration first!!!", "success": True, "data": serializer.data}
            return Response(
                data=res,
                status=status.HTTP_201_CREATED
            )
        except Exception as e:
            return Response(data={"msg":str(e),"success":False, "data": None},status=status.HTTP_400_BAD_REQUEST)

楷模

class Organization(Group):
    email = models.EmailField(max_length=60, blank=False, null=False)
    admin = models.ManyToManyField(settings.AUTH_USER_MODEL)
    users = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='org_users')
    is_active = models.BooleanField(default=False)
    short_name = models.CharField(max_length=200,blank=True)
    location = models.CharField(max_length=200,blank=True, null=True)
    tag_line = models.TextField(null=True,blank=True)
    company_phone =  models.CharField(max_length=15, blank=True, null=True)
    po_box = models.CharField(max_length=15, blank=True, null=True)
    first_logo = models.ImageField(null=True,blank=True)
    second_logo = models.ImageField(null=True,blank=True)
    third_logo = models.ImageField(null=True,blank=True)
    history = HistoricalRecords()

标签: python-3.xdjangodjango-rest-framework

解决方案


推荐阅读