as

Projects / CS2340

GT Movies Store

CS2340 project. Django movie store. I followed the textbook, then spent a while fixing my own typos so the user stories actually ran.

1. Introduction

I’m Aamogh Sawant. CS major at Georgia Tech, graduating 2027. This page is the CS2340 (Objects and Design) write-up for GT Movies Store, the Django app from class. No login to read this. The store is up at aamogh.pythonanywhere.com.

2. GT Movies Store description

It’s a movie store on the web. You can look at movies, make an account, leave a review, report a review that shouldn’t be there, dump stuff in a cart, check out, and see old orders. I used the user stories as the checklist. If a story said a user should be able to do something, there had to be a page and a button for it, not just a model sitting in admin.

Catalog browsing

User story: browse and search the catalog. Movies page is a grid of posters. Search box on that same page. Click a title and you get description, price, add to cart. Home / About are just the intro. I kept adding test movies with garbage names while I was checking search, which did not help.

User authentication

User story: sign up, log in, log out. Signup form, login form, logout in the navbar. After you’re in, the nav switches to Orders / Logout. I kept 404ing because signup is /accounts/signup and login is /accounts/login/ — one has a slash, one doesn’t, and I typed both wrong more than once.

Reviews CRUD

User story: write, edit, delete your own reviews. Logged in, you get a comment box on the movie page. Edit and Delete only show on yours. I misspelled review vs reviews in URLs a lot, and Django would just 404 until I matched the name in urls.py. Also kept submitting empty comments before I put required on the textarea.

Inappropriate review reporting

User story: report a review that shouldn’t stay public. If it’s not yours, you get a report button. That flags it and it drops off the movie page. Admin can still see it. I literally labeled the button “Report Movie” the first time because I copied the wrong word. The story is about the review, not the film.

Cart management

User story: add movies, change quantity, take things out, check out. Cart lives in the session until you purchase. I had a remove button that was just a blank red box because I forgot to put text inside the tag. Also the total was wrong for a bit because I used the movie id as an int in a dict that stores keys as strings. Classic.

Past order history

User story: see what you already bought. Purchase writes an order, then Orders in the nav lists them with the movies and quantities. You have to be logged in. I kept testing this with the same account and wondering why “new” orders looked identical. They were. I was buying the same movie on purpose.

Django admin

User story: staff can manage movies, reviews, and orders without touching the shell. /admin/ for adding movies, filtering reported reviews, opening an order and seeing the line items. I typed movie_name instead of movie__name in review search and then sat there confused why search did nothing. Two underscores. I will remember that now.

3. Process description

Method was not fancy. I had the user stories on one side and Django for the Impatient on the other. One app at a time: home, movies, accounts, cart. After each chapter I went back to the stories and asked if a real person could actually do that thing yet. If not, I was not done, even if the screenshot in the book looked finished.

A stupid amount of time went to spelling. Wrong template name, yellow Django page. review vs reviews in a URL. Extra space in class ="btn". movie_name vs movie__name. Button copy that said the wrong noun. I would change a view, refresh, nothing, and it was because I saved show.html and the URL was still pointing at a file I renamed in my head but not on disk. When I got stuck I printed stuff, read the traceback from the top, and if that was useless I went back to the chapter I had just skimmed too fast.

The actual design question was the cart. I wanted it in the database immediately and that was overkill. Session until checkout, then write the order. Reporting was the other one: I almost .delete() on a reported review, then thought about admin needing to see it, so I just hid it on the public page. Whenever I was unsure I implemented the story the boring way and only got clever after it worked. Most of the “architecture” was me refusing to invent a fifth app.

4. Video demonstration

Screen recording of the deployed store: search, sign up, reviews, report, cart, orders, admin. Same build as the user stories above.