Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/codingforentrepreneurs/ecommerce

We're going to take you step-by-step to build a modern, fully open-source, eCommerce web application using Python, Django, Bootstrap, Javascript, and more.
https://github.com/codingforentrepreneurs/ecommerce

ajax bootstrap bootstrap4 card cart-model custom-queryset django django1-11 ecommerce jquery jquery-ajax lookup mailchimp python python3-6 stripe

Last synced: 3 days ago
JSON representation

We're going to take you step-by-step to build a modern, fully open-source, eCommerce web application using Python, Django, Bootstrap, Javascript, and more.

Awesome Lists containing this project

README

        

# eCommerce

[![eCommerce Logo](https://cfe2-static.s3-us-west-2.amazonaws.com/media/courses/ecommerce/images/ecommerce_coding_for_entrepreneurs.jpg)
](https://www.codingforentrepreneurs.com/courses/ecommerce/)

This course will teach you step-by-step to build a eCommerce site from scratch. We'll be using open-source software to create each aspect of a fully functioning eCommerce business.

Full Course is here: [https://www.joincfe.com/courses/ecommerce/](https://www.joincfe.com/courses/ecommerce/)

Below you'll find the related lecture code to any given section and lesson. Enjoy!

# Code

### Section - Hello World

[Intial Commit](../../tree/0927b316e9cdd8b0db01263b6b429e698d38d57a/)

### Section - Products Component

[1 - Your first app Module](../../tree/ed8ceb52830b762d50bbf44f680255168c6f5530/)

[2 - Understanding CRUD](../../tree/aaa75b9c3ffba674e3661175922b99149fd4bdd9/)

[3 - Product Model](../../tree/a80ded7e6ed9a87da9a8029e4e6fe50c18fd4b79/)

[4 - Django Admin](../../tree/311291431e55a783532ff3cd9319e22d77ff92c0/)

[5 - List View](../../tree/ab27c4cc095ae00d51b71545cf6118813c12828f/)

[6 - Detail View](../../tree/b7343749415fb9a6a6a629859684f13a0afbf787/)

[7 - ImageField & FileField](../../tree/08a2426622b6536de6ae16637cc9489eeda5e484/)

[8 - Understanding Lookups](../../tree/6a1116a90d9c24ca4366a3764b20de61a83f52ac/)

[9 - Custom Model Managers](../../tree/f146e4775cb274176897f8e06d842150599aa3c5/)

[10 - Featured & Custom QuerySets](../../tree/8f7cf0ea87b89672f1ca745a251de32598ff5754/)

[11 - SlugField & Signals](../../tree/dc523d5e9aa18a730edd9819c6202fd3ecc20de7/)

[12 - Products URLs](../../tree/959a578bd51964af2a637e2d75423568a8d7972b/)

### Section: Templates

[1 Base Template](../../tree/b34bc1692301719be722bb691c1d67df4e98b455/)

[2 - Include Tag](../../tree/12fd4dd9fcd8616b7b71d8c93a60013aa01350d9/)

[3 Pass Arguments with Include](../../tree/f68b6c15804033937d823f6a707df363901fd6a1/)

[4 - Reusable List View Snippets](../../tree/e59e0938d032e68431c60718f27bfa2abbbd36b0/)

[5 - Reverse for URLs](../../tree/4add77ea1751952f79aaf358bcfecac366ad6ac2/)

[6 - Navbar](../../tree/fc97ee8fd094a47aeb47ad7b25cf2d5a04c78fe8/)

[7 - Template Filters](../../tree/670ddd0ec4cec879a424fe05ac594e863b7dea53/)

[8 - ForLoop Counter & Cycle](../../tree/e47bec09440f7938246c4b9210bd3f131d290dd0/)

### Section: Bootstrap

1 - Adding Bootstrap (no code)

2 - Container vs Container-Fluid (no code)

[3 - Rows And Columns](../../tree/d0e38edee652c5787dc7bf12e2ec2909fa3121f8/)

[4 - Column Sizing](../../tree/b06f0a6661ac37d71be3fe38580bb561f71d2e42/)

[6 - Desinging for Different Browser Sizes with Breakpoints](../../tree/225b29ccbff4aa3098e58d34a434dda495f7fb53/)

[7 - Spacing with Margin & Padding](../../tree/e2eb9bc70e33b4870e87554a81bdee9179f0136d/)

[8 - Navbar](../../tree/696987b4e9144296f681fb229e3420219f9a1026/)

[10 - Integrate to Django](../../tree/6aa47a5627c5f57b3fca3cb52738c96609cc3746/)

### Section: Search Component

[1 - A Basic Search View](../../tree/28aa4043b5ad94a3095ddf3b77fd81a429803ff4/)

[2 - Display the Query to the User](../../tree/e499a814c144497145c689be5626e175b2cd9a6d/)

[3 - Creating the Search Form](../../tree/147efe3fae7b35702050b3f27907c13379a3f85d/)

[4 - Better Lookups with Q](../../tree/54e65447fd0cd9b269c76ac1c9739af9cb1cd7ce/)

[5 - Tag Component](../../tree/883d856330fe86d0ad697fa9cfebf19454b163be/)

[6 - Shell Commands for a Brief Intro to Foreign Keys](../../tree/a85117d052ceaa054f1b025613bbbc46695ea0c0/)

[7 - Search by Related Model](../../tree/908e3e07bc2e3ec5f157f6a06f59ad01395b4a2d/)

### Section: Cart Component

[1 - Cart App](../../tree/ab6ba98698080e5290f0c72e94edc6ebea229a4e/)

[2 - Django Sessions](../../tree/4b2544743e5b3c650231cf10f8f4ba3f85e10382/)

[3 - Cart Model](../../tree/0441dc0e50937eaec64bafa4f9258de70db7efc9/)

[4 - Create A Cart in the View](../../tree/35e8bf075b51d32a7c0fcc1c191700736d64edfc/)

[5 - Cart Model Manager](../../tree/3f9592bd3209ae09d5aa839c87356d7c1c6bc1bd/)

[5 - Cart Model Manager Part 2](../../tree/20368456287ce253d2b51c7f4d2101f52ceb4d35/)

[7 - M2M Changed Signal to Calculate Cart Total](../../tree/c64ba909c1b6af3b5b0502412eef20857cdaa25a/)

[8 - Cart Update View](../../tree/864ef942a2331669d0a1c2385431688888916b22/)

[9 - Add to Cart Form](../../tree/d5cced3c944f39164a36b4ef122ba2369006fc92/)

[10 - Display Cart](../../tree/248c772322547fc7b331fa042627285f67a233a1/)

[11 - Remove Items from the Cart](../../tree/3d7c0fc7fe264eded57ce3244e3ee86d1550a966/)

[12 - Cart Icon & FontAwesome](../../tree/691d5ae69e2b5a8f569be0ede3efd5c9fc7897d3/)

### Section: Checkout Process

[1 - The Roadmap for the Checkout Process](../../tree/14bb24d788f96cb5e8593084428de5dcc0bc43b7/)

[2 - The Order Component](../../tree/e3edacb39b6b5df4ee0b98297df42909784f86c3/)

[3 - Generate the Order ID](../../tree/cfcc598dd86ce7ba795641f7520b58cf21c2e4de/)

[4 - Calculate the Order Total](../../tree/00a2b87d1bfc671d62514679881cbccd62bc2494/)

[5 - Checkout View](../../tree/40e7c81aa1dc18b1878c6097e486624b5163bc83/)

[6 - Math with Decimals and Floats in Python](../../tree/3baac51bf5bf9fe1d1432d140fbdb5de0e3a6752/)

[7 - Upgrading Auth to Prep for Checkout](../../tree/182d7a5da10a5799ca7c053849f39cba426a84eb/)

[8 - Billing Profile Model"](../../tree/3dd97d4cee6c4540410fda0006768bff523e9970/)

[9 - Billing Profile in the Checkout View](../../tree/c0ff6dfdc8991c9a54889a616c327420f1d12939/)

[10 - Guest Checkout Profile](../../tree/e4114e17297c3c437f1cd7e50d7f01e716d1af09/)

[11 - Associate Billing Profile to Order](../../tree/b920068b6d80245344ab424f1e1b33a4e54888e4/)

[12 - Order Manager](../../tree/a0e30cbe85971622c10e8d1bbf930dbaa78695d9/)

[13 - Billing Profile Manager](../../tree/91bf2029c4da79168513dd12fe8ef2f6ac7e18e6/)

[14 - Addresses App](../../tree/159d284645e99feedf94ce5b3693b4a28994c6d8/)

[16 - Associate Addresses to Order](../../tree/3cee508cfe5228a45a919066bbf3bc14c23e824b/)

[17 - Finalize Checkout](../../tree/f38442a8b770d0cea454280fd997a60b712d57ea/)

[18 - Reuse Addresses for Checkout](../../tree/0ba33ba8e29482ed86ea2fe4a956bf7be01e05dd/)

[19 - Checkout Success](../../tree/648e281ed5a8fff4fdf3d9959e0d32ec232a6624/)

### Section: Fast Track to Jquery
[1 - Getting Started](../../tree/bb9938c039d604ab39696ec166210f72edc2521e/)

[2 - A Basic Selector](../../tree/5640cc849c8db492e1d98cc6070b7efb9c6c201c/)

[3 - Selectors Part 2](../../tree/4cd3edb60b092c996de5a5812e007568ac898979/)

[4 - Content Overflow Part 1](../../tree/bcbfb9973673f2d22e1c1af094d7e722237a2652/)

[5 - Data Types, Iteration and Conditionals](../../tree/ec9b8d3277cea37b225ce81e68d00bd46745f5d7/)

[6 - Content Overflow Part 2](../../tree/d4b8fedec4d61d3d6c1f442505c76b43ee613a70/)

[7 - Click Events](../../tree/13c278c521032f6266e411bef97ad996b501379b/)

[8 - Handling form data in jQuery](../../tree/69201626395880675420d187f55744f6a3c267ca/)

### Section: Products & Async

1 - Sync vs Async (no code)

[2 - Ajax-ify a Form](../../tree/1d4d7ca41f515f4c12fed183023fde22463d8058/)

[3 - Handle Ajax in Django with JsonResponse](../../tree/d6acdc28e52f47257afb4c4b3dc6e5f398f39e43/)

[4 - Cart Item Count](../../tree/9455685b79a7ba829799d6dc700dce71c930c5d3/)

[5 - Refresh Cart Ajax](../../tree/dba7c5401106c658a4a29729a1d5fb5efa596c2f/)

[6 & 7 - Refresh Cart Ajax Part 2 & 3](../../tree/7f38a87f80d0c9a32e7e10149af1b19e8aa3d362/)

[8 - Finalize Cart Updating with Ajax](../../tree/c16e30dbd9af01fddef5614f3857de4a7fcace3b/)

[8 - Finalize Cart Updating with Ajax](../../tree/2072edc9f0451a8d9c88e0c6c9394310234331a8/)

[9 - Auto Search](../../tree/c433c4a06ab3d0d199e4a46b390cc98a0328bad1/)

[10 - Display Errors with jQuery Confirm](../../tree/ab040383aeed92a5ab457d25320fc1dddf72bc5d/)

[11 - Ajaxify the Contact Form Part 1 & 2](../../tree/cc35747ceba808fd57350eaf59e51f95a7b091c4/)

[13 - Custom eCommerce JS](../../tree/3431064fde1394e586076b23ba76827e03d626ce/)

[14 - Ajax CSRF Security for Django](../../tree/82111856925f0d9a83eb08c0e937a95ca788d641/)

## Add Ons

### Custom Django User Model

1 - Before we get started (no code)

[2 - Create the Abstract Base User](../../tree/c698e75c82b6145546c93f8d32fec616dfaf1cac/)

[3 - Create the User Model Manager](../../tree/968ec0525e27c3d95f9fc033833264437f90a47b/)

4 - Change Auth User Model to our Custom Model (no code)

[5 - Reload the Database with Fixtures](../../tree/96261517bc1e4c7b2603232569de479ae4c44a9d/)

[6 - Forms & Admin for our Custom User](../../tree/464ff60dd57e8babf0096670f6bb5c62bdaa2e2c/)

[7 - Add a Required Field to the User Model](../../tree/c12eebf5e8c5961b18f65f8741880f40f6cfc99b/)

[8 - Update Login & Register Forms](../../tree/aefcaac8eb1f4f0d7e6f68dde46eb9f82f7e5ff7/)

[9 - Login & Register Views](../../tree/3cccc2c44b9d81fcc4db4ed9bae77a8e23cf263e/)

### Custom Analytics

1 - Getting Started (No Code)

[2 - Craft the Object Viewed Model](../../tree/dcea55fce60dcb56dc933fc0485a95a5a44b0c9d/)

[3 - Get Client IP Address](../../tree/007dd5190b872ef32ab8164efd7631f7bef3a409/)

[4 - A Custom Signal](../../tree/540a9e1f29e896c3145ead7231d76960031bb2c9/)

[5 - Object Viewed Mixin](../../tree/73bfc3e04beee52b9ad6cd503d3b7c8d8ebeb71e/)

[6 - Handle the Object Viewed Signal](../../tree/73bfc3e04beee52b9ad6cd503d3b7c8d8ebeb71e/)

[7 - Handling and Ending User Sessions](../../tree/4c08919bb151553b150b94ae51825517bc2cd460/)

### Stripe Integration

[1 - Getting Started](../../tree/249af4dcc7cbc5496aa0ebca17c3a501021cb5e2/)

[2 - Create Stripe Customer](../../tree/0a835b238f834758ba54db1c6d4978f517dccdc6/)

[3 - Payment Method View & Stripe JS](../../tree/08aab3440a89cea22be0a1053b106b49d8d52f08/)

[4 - Improving Payment Method Form](../../tree/ca4245aabaacc0f3c0f7e6e77902f0312a30686e/)

[5 - Improving Payment Method Form Part 2](../../tree/0ff716c8a8bda2605cf349b19705d46798bb5d1b/)

[6 - Reusable Stripe Module](../../tree/291073b86363a63cb588305e9c258dddc5cad949/)

[7 - Add Card to Customer with Stripe](../../tree/1193c2a22da5e591aca057a4f153fdc3388c23fd/)

[8 - Save Card in Django](../../tree/606f73653342ce361400a8fdddd8f0d917d6552f/)

[9 - Charge the Customer](../../tree/0d4fba2c11c8bf3d4b116c4e619ffb6c41a161de/)

[10 - Putting it All Together](../../tree/252524c4b46a2bad8da4cc000af0234a0227cf11/)

[11 - Guest Card Checkout](../../tree/78924c3cc4ed3f3ed809a69d40a9320f423e5676/)

[12 - Changing Payment Methods](../../tree/90830de29bd3bfcf948527b2fd456f27be37e14c/)

[13 - Improve Card UI - Part 1](../../tree/c1a67d9c6d1c29065d1b09a771e14a7b5a0e8fc2/)

[14 - Improve Card UI - Part 2](../../tree/c1a67d9c6d1c29065d1b09a771e14a7b5a0e8fc2/)

### Mailchimp Integration

[3 - Setup API Keys](../../tree/f540e03ebff55371f40b971d7fed439d5af886bf/)

[4 - Marketing App](../../tree/4de0f03100f566797a6ac3a2de6b7764169aad24/)

[5 - Mailchimp Class Part 1](../../tree/7ac2eb8e4d747fe7cc4e94c2f01ad87da9b01395/)

[6 - Mailchimp Class Part 2](../../tree/26cd4fe4c3b3b1dff4426aae260578a551c5854a/)

[7 - Mailchimp Class Part 3](../../tree/08dfcb3f273e0993c935372b91b5a47e66ac77c1/)

[8 - Django & Mailchimp](../../tree/128499e857cf64b03a64106eb808b7177d272400/)

[9 - User Email Marketing Preference View](../../tree/73756bab33f261106b9489afe1815f8a6377126e)

[10 - Mailchimp Webhook Handler](../../tree/a6d88a985e21dcd926acf7fb06808459493ff0b9)

### Go Live

1 - Local vs Production Environments (no code)

[2 - New Settings Module](../../tree/f776fc8227c5717b7982274d5de2a12676ab835b/)

[3 - Multiple Settings Modules](../../tree/95542fffb0f225e281557d9616fb8caae85f1a06/)

[4 - Prepare for HTTPs](../../tree/b772608670c45d6654a84b6b0dd014bd6cacc104/)

[5 - The gitignore File](../../tree/0dc38fd34caa8c82850cbab6509b7357b53d904e/)

[6 - Requirements File](../../tree/aaad5cda6f3a3170b6b9430d97db11e84ff191c2/)

[7 - Setup Git Version Control](../../tree/f65d67029ebad9a22f6e63ef66170e533a385f2e/)

[8 - Deploy to Heroku](../../tree/a2041155d977f6d0451aa6220fec0f664bc0cb06/)

[9 - AWS S3 for Static Files](../../tree/90044ca398bbe3b06440d937dc7ea0a645ec593b/)

[10 - Add Custom Domain & HTTPs on Heroku](../../tree/3689bfcd72670fa59ceaa864d58927f2c2fc53d7/)

[11 - Live Environment Variables](../../tree/e3210c4ae568e5e1e48a1d70ad2e9b67cf83aa63/)

[12 - Error Views and Templates](../../tree/764a8acba104c60676d83574baf7c0c0806501ad/)

[13 - Setup Email to Help Solve Server Errors](../../tree/b151d182dc5ae1e380c2959a09a8eb6e2fe2fcc8/)

[14 - Using Heroku Locally](../../tree/6c24c03aaf84a4fb02d9cc855815ab0e581798ff)

### Account & Settings

[1 - User Account Home](../../tree/e56ea8420170c40b420780a48cbf1087a5081525/)

[2 - Naming & Dropdown](../../tree/dc1dd608ef6407d11b4d5b5e2784220fbe8d1ff4/)

[3 - Account Bootstrap Cards](../../tree/c07ba032b597191f043a4ac9cd75d10ee840afcb/)

[4 - Link Account Bootstrap Cards](../../tree/287fbca8d84c1a9112e6cb3adeba1c8a15693fcc/)

[5 - Password Reset and Change](../../tree/55d62beec3b7374e955df8b9b6e6ddbde5997abc/)

[6 - send_email and get_template](../../tree/e3c86dec0b7b985c8b1d403786d0f7a201f2767b/)

[7 - Email Activation](../../tree/30f9aa0d6605014b52f80b85d139597ef6b0fcf6/)

[8 - Custom QuerySet for Confirmable Activations](../../tree/4fe792b8d5e868a813f8b521cda2660fe61048ed/)

[9 - Email Activation View](../../tree/0904726b55184994ac180bc0c0d55edb2a97feaa/)

[10 - Email Reactivation](../../tree/3b9e78cece5c834043bd41b319a78109badf2253/)

[11 - Improved Login Form & View](../../tree/359119ff0efdb482ec1e6133877ef251e3a4ebf5/)

[12 - Login Form for Confirmation Emails](../../tree/a7f53f7598259f711f62957a4588dc187895e07d/)

[13 - Upgrading the Guest Checkout Form](../../tree/58cac4150c5c5b724feb2f92e795ded4c162e7df/)

[14 - Edit Account Details](../../tree/c471c3a04f46e7b851197de6a217fa6a68ec67b7/)

[15 - User Product History View](../../tree/e50e38a7f01c9348866a92e8c7e2e772ba229763/)

[16 - Orders & Order Detail](../../tree/e92f5c4ac8413fc9988510b0889a5a582cbae462/)

[17 - Final Addresses on Order](../../tree/d076db0f36de01abe10e0474ac09606e33800c44/)

[18 - Addresses List View](../../tree/065d6e0fd246aa1510b835d6eb6bf732e104fc8d/)

[19 and 20 - Update & Create Addresses Part 1 & 2](../../tree/a89b4cd06d42648b7920a301d7c70969838b9732/)

### Selling Digital Items

[1 - Digital Products & Cart](../../tree/69f842b8e19470eba122a5566a2da5d23880d388/)

[2 - Shipping-less Checkout](../../tree/14cae3f833034abaf0190259851a09a40efdbc65/)

[3 - Product Purchases](../../tree/49bb74466bd5da3464c2cb608d150336ac2eba48/)

[4 - Handling Products Being Purchased](../../tree/3cfa6c4d7ffbbd83b8246fc7984bb0f8bb448ea9/)

[5 - Display of Refunded Items](../../tree/c2d95bcf338b69eec962cff6aa92a409ad204ec3/)

[6 - Library View](../../tree/4d1f98e4c81c9229945a1a3342297b4f52e680d1/)

[7 - Library View for Products Only](../../tree/f1e3b4618699c73034e1ac85f4bf27ba4025879a/)

[8 - Product File Model](../../tree/1e74caa60b3b6f52ced214a5169e111ac8399e2a/)

[9 - Changing File Field Storage to Protected Location](../../tree/a7cfdd8849d8bc22d78f1ce565b653ba32967262/)

[10 - Download Product File Part 1](../../tree/e3463e00d6257726d77dcf3ad72caa77e89ed1db/)

[11 - Download Product File Part 2](../../tree/91cb57960416e4ab5701f0a2cc4e7b158f47985f/)

[12 - Perform the File Download](../../tree/6d92ca188e18eca8d4d4b7e1b017a010300e8c11/)

[13 - Checking Download Permissions](../../tree/fe631500b7a4f69ab48b513cbf5d5be89d5a5e5c/)

[14 - In Library Display Part 1](../../tree/4f1b64f1df2b67d98bf8a0d81dc57947409ad2ea)

[15 - In Library Display Part 2 with Ajax](../../tree/46be780b0f0dd524d6eb4bbea63c9f0b2c4b9b7c)

[16 - AWS S3 File Upload](../../tree/96d664722a95dab2895313ef3731c84093d3596d/)

[17 - Fixing the Upload Path](../../tree/75c4e175bf0c4516a6ee91e2f1a7280f998ba6bd/)

[18 - Creating the AWS Download Class](../../tree/d1d5cb5820d813a87d184b9eb2c34b0ff54d3c76/)

[19 - Using the AWS Download Client](../../tree/a879fcc03d0225e343212b17d4c6dcb43578fdc7/)

[20 - A Custom Filename](../../tree/ed23c9b95d7b84de9447bcfbeacfd35d4cfdcd08/)

### Graphs and Sales

[1 - Setup the View](../../tree/2b65b93648d4211e64cc02022a0988a96ac53b9f/)

[2 - Add Context for the Order Data](../../tree/f6e5671c5c9170f3e0fdd3427acb0c49b3f60751/)

[3 - Intuitive Recent Order Total](../../tree/50326ef1c082d7bcdbe9351938043b4af28f68b7/)

[4 - Aggregate & Annotate](../../tree/0438bd0af6b4559fd1b80b9456a32e5b2262c6d4/)

[5 - Get Data by Custom QuerySet](../../tree/8bdec3c85ec8b3a842816efbc4d80223a6d862dd/)

[6 - Intro to Datetime Module](../../tree/b9f8bb1775c8037326ba3a095a224a88cf6a0775/)

[7 - Filter by Range of Time](../../tree/0a8a304296f926ad0bba4fa66dff566b7e20ecbb/)

[8 - Chart-js Intro](../../tree/bd9c8861e58feb5dc2ce13103a1aa21c29e7638b/)

[9 - Using Ajax to Render Charts](../../tree/a60c2fb9476111de483a5fcda4c7262a10f66392/)

[10 - Display True Data](../../tree/dd8a626fbb6dc43efc0799f652a808f03b7542f8/)

[11 - Cleanup](../../tree/fe478427f789ff2ed9110e8e3739d6e9975fe714/)

[12 - Inline Js to External](../../tree/f827bac20fc98a85ff84232ed3ea4ec4ea877f56/)