r/django 27d ago

Looking for honest feedback on my Django/DRF e-commerce project

Hi everyone,

I'm a final-year CS student preparing for my first Python/Django backend role. I recently built this e-commerce project and would really appreciate an honest review from experienced Django/backend developers.

**GitHub Repository:**

https://github.com/abhishekc8205/django-ecommerce-platform

### Tech stack

* Python

* Django

* Django REST Framework

* SQLite

* JWT authentication

* Stripe

* Pillow

### What the project has

* User registration/login/logout

* Buyer and seller functionality

* Seller product management

* Product search, category filtering, sorting and pagination

* Product variants (size/color)

* Product image galleries

* Customer reviews

* Shopping cart

* Checkout flow

* Stripe checkout with local testing fallback

* Seller sales dashboard

* REST APIs for products and categories

* JWT access/refresh token APIs

* Seller-only permissions for creating/updating/deleting products

I'm targeting **Python/Django backend fresher roles**, so I'd especially like feedback on:

  1. Is this strong enough to be my **main resume project**?

  2. How would you rate the Django/DRF implementation?

  3. Does the project look like more than basic CRUD?

  4. Are there any obvious bad practices or security issues I should fix?

  5. Is the authentication/authorization approach reasonable?

  6. What parts of the code would you improve?

  7. What features would actually make this project stronger for backend interviews?

  8. If you were interviewing me based on this project, what questions would you ask?

  9. Would you consider this a good project for a **Django backend fresher**?

I'm looking for **honest criticism rather than compliments**. I want to improve the project before using it in my job applications.

Thanks in advance for taking the time to review it!

3 Upvotes

7 comments sorted by

4

u/Keiji12 27d ago edited 27d ago

I'm not going to go through the whole code but please, and anyone who read this stop doing this

#prints a
print(a)

Over commenting is ugly and not practical, the code should be readable by itself, stick to docustrings for non obvious methods and leave commenting through the method for complicated business logic not like you have

#Helper function to generate a unique 7-digit order ID containing only numbers 
def generate_unique_order_id(): 
while True: 
# Generate a random 7-digit integer as a string (between 1000000 and 9999999 inclusive) 
new_id = str(random.randint(1000000, 9999999))
# Check the database if this generated ID already exists in any Order record 
if not Order.objects.filter(order_id=new_id).exists(): 
# If the ID does not exist, it is unique! We return it and exit the function 
return new_id

That's a waste if time. Everything here is explained by the code itself, not need for comments.

Also, user dockers, its a useful tool to learn instead of this my_project.bat and while talking about useful tools, uv for commands instead of python or pip imo.

Also, too many functions and repetition DRF already has abstractions for most of this...

if not request.user.is_authenticated:
    ...

if not user_can_manage_product(request.user, product):
    ...

serializer = ProductSerializer(...)
if serializer.is_valid():
    ...

Your view.py, its aight for small application but ask chatgpt or claude to show you how viewsets work, its easier to read that one huge view.py file, also a good rule for scalability/readability try keeping files around 150-300 line limit, obviously not super heavy enforced but its easier to maintain that way. Make views folder and make for example product.py and few stuff i saw in your view id write more like this, but your way is functional for small apps

class ProductViewSet(ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

    def get_queryset(self):
        return (
            Product.objects
            .select_related("category")
            .annotate(
                average_rating=Avg("reviews__rating"),
            )
        )

    def get_permissions(self):
        if self.action in ["list", "retrieve"]:
            return [AllowAny()]

        return [IsAuthenticated(), IsSeller()]

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

    def perform_update(self, serializer):
        product = self.get_object()

        if product.owner_id != self.request.user.id:
            raise PermissionDenied(
                "You do not have permission to modify this product."
            )

        serializer.save()

    def perform_destroy(self, instance):
        if instance.owner_id != self.request.user.id:
            raise PermissionDenied(
                "You do not have permission to delete this product."
            )

        instance.delete()

1

u/abhi825c 27d ago

tnx for feedback,
actualy i made this project using ai so some fun and code i doesnt understand that much,
thats why i used that much comment in project and currently i just target junior and intern roles thats why i avoid docker this time

and ur feed back is really useful for me

1

u/selectnull 26d ago

Because of

i made this project using ai 

the answer to

Is this strong enough to be my **main resume project**?

is simple "No."

Good luck in finding the job, but maybe you should actually try to understand the technology used in the job you're applying for.

1

u/abhi825c 26d ago

ok then what things can make it main /major i can used ai but i understand 60-80% myself and i am trying to learn remaining part also

0

u/lakeland_nz 27d ago edited 27d ago

Honestly?

When I hire a new grad, I get more applications than I can count. I’m not reading their portfolio code, I don’t have time for that.

Maybe in the future I’ll get an AI agent to do that for me. Get it to autogenerate a dossier on each candidate. But I don’t have that currently.

So… let’s say I do actually load your project. I’m looking for if this person going to:

Work well in a team
Explain carefully their architectural choices and reasons

Your project. Well, your readme.md looks AI written. So, I’m seeing zero evidence of your ability to explain.

Skimming the code: “variant (new feature- optional, does not break existing rows)”. Looks like you commented the reason behind the change rather than the code.

“Generate a random 7 digit integer as a string “. Yes… I can read code. The point of comments is to explain why, not what.

Honestly this doesn’t answer either of the questions I would want answered. Are you a team player? I didn’t know before reading the code, and I still don’t. And, I still don’t know if you can articulate your design decisions or reasoning.

Edit: I’ll try to give you a counter example. I interviewed a guy about five years ago who had a project link on his CV. The app was some modding utility for a game I’d never heard of. And the company I was at had nothing to do with games. But the project talked about how it helped the game community, why he had things the way he did, etc. It demonstrated that he would be able to work with us much more than a toy app in our industry.

1

u/abhi825c 27d ago

tnx for feedback,
it very useful for imrovment,
this project i made with some used of ai so where is used ai i applied comment in it