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.