Anvil Advent Calendar
Build a web app every day until Christmas, with nothing but Python!
There are only a few shopping days left until Christmas!
If your friends and family haven’t already bought you everything you’ve always wanted, they might need some digital assistance.
Enter Christmalist! The sofware-as-a-service solution for your yuletide purchasing needs.
https://christmalist.anvil.app
It’s a wishlist, stored online, that you can share with your friends. Your friends can check off what they’ve bought to avoid double-buying.
Building a list
Here’s my wishlist:
This is a simple CRUD app - the “wish” button adds my items to a Data Table, with the ‘Owner’ column set to the Users row for whoever is logged in.
You’ve got to be logged in to make a list, so the first time the “wish” button is pressed, I display a login form using:
anvil.users.login_with_form()
Sharing with friends
To share your list with a friend, you simply enter their email address:
The email is sent using anvil.email.send
:
anvil.email.send(
to=email,
subject=f"{user['email']} wants to share their wishlist with you on Christmalist!",
text=f"""
{user['email']} wants to share their wishlist with you on Christmalist!
Follow this link to see it: https://christmalist.anvil.app/#?u={user['email']&k={key}}
""",
html=f"""
<h1 style="color: #D32F2F">View your friend's wish list!</h1>
{user['email']} wants to share their wishlist with you on Christmalist!<br><br>
<a href="https://christmalist.anvil.app/#?u={user['email']}&k={key}">Click here</a> to see it!
""",
)
This email contains a link to Christmalist, with some query parameters that dictate whose list is being shared, and a random key to make sure people don’t randomly invent these links for themselves. Here’s an example:
https://christmalist.anvil.app/#?u=shaun@anvil.works&k=9de2e62f-ba19-4d21-8041-956cbf1da61f
The ‘Users’ table stores a list of valid keys. I check the k
query param against the sharing_keys
column to check that the link is valid.
Viewing your friends’ lists
Finally, you can view your friends’ lists by selecting them from a dropdown. If you’ve purchased that item for them, you can check the box so nobody else buys the same thing!
Go ahead and use it
The app is published at christmalist.anvil.app - go ahead and use it to streamline your present-receiving this year!
You can get the source code for yourself – you could even make a business out of it, using Anvil’s Stripe integration to take payments!
To get started, get your own copy of the source code, and tweak it however you like:
Give the Gift of Python
Share this post: