{"id":11652,"date":"2023-11-16T10:56:01","date_gmt":"2023-11-16T10:56:01","guid":{"rendered":"https:\/\/cheesecakelabs.com\/blog\/"},"modified":"2023-11-16T11:19:25","modified_gmt":"2023-11-16T11:19:25","slug":"scalable-systems-django","status":"publish","type":"post","link":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/","title":{"rendered":"How To Build Scalable Systems with Django Framework"},"content":{"rendered":"\n<p>At Cheesecake Labs, we work on a wide range of projects, each with unique demands and complexities. <strong>After 10 years of working with clients to build <a href=\"https:\/\/cheesecakelabs.com\/blog\/scalable-applications\/\" target=\"_blank\" rel=\"noreferrer noopener\">scalable digital products<\/a> that help solve real-world problems, we\u2019ve noticed some recurring themes in our work.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Duplicated work<\/strong>: Despite each project being unique, certain elements of everything we work on are boilerplate, and we repeat similar tasks from one project to the next. We could accelerate our initial deliveries and reduce project timelines with standardized setups.<\/li>\n\n\n\n<li><strong>Architectural variance<\/strong>: Each project had a distinct architecture and development style. Creating a base architecture and a styleguide would make it easier for developers to transition between projects.<\/li>\n<\/ul>\n\n\n\n<p><strong>With these challenges in mind, we decided to put together starter kits on our main stack that we can use from one project to the next.&nbsp;<\/strong><\/p>\n\n\n\n<p>Let\u2019s take a look at the details of our <a href=\"https:\/\/cheesecakelabs.com\/blog\/django-framework-app-development\/\" target=\"_blank\" rel=\"noreferrer noopener\">Django<\/a> Starter Kit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>In this post:&nbsp;<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#What-is-the-Django-Starter-Kit?\">What is the Django Starter Kit?<\/a><\/li>\n\n\n\n<li><a href=\"#The-architecture\">The architecture<\/a>\n<ul class=\"wp-block-list\">\n<li><a href=\"#The-core-app\">The core app<\/a><\/li>\n\n\n\n<li><a href=\"#Other-Apps\">Other Apps<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"#App-independence-and-code-reusability\">App independence and code reusability<\/a><\/li>\n\n\n\n<li><a href=\"#Future-improvements\">Future improvements<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"What-is-the-Django-Starter-Kit?\"><strong>What is the Django Starter Kit?<\/strong><\/h2>\n\n\n\n<p>The Django Starter Kit is a project in constant revision. <strong>It\u2019s designed to contain reusable code for most of our projects in a robust and scalable architecture, ensuring each project starts out with a strong and adaptable foundation.<\/strong><\/p>\n\n\n\n<p>Our starter is more than just boilerplate code. It&#8217;s a dockerized, production-ready project containing:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Modules<\/strong>: Logic required for any project, including authentication, user management, and terms of agreement. Each module is designed to be easy to extract or extend.<\/li>\n\n\n\n<li><strong>Pre-configured packages<\/strong>: The best settings for Django, Django Rest framework, incorporating error monitoring, interactive API documentation, and other valuable components.<\/li>\n\n\n\n<li><strong>Styleguide<\/strong>: Comprehensive documentation offering detailed architectural insights, best practices, and conventions. We developed our own styleguide based on <a href=\"https:\/\/github.com\/HackSoftware\/Django-Styleguide\" target=\"_blank\" rel=\"noreferrer noopener\">an existing styleguide<\/a>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"The-architecture\"><strong>The architecture<\/strong><\/h2>\n\n\n\n<p>Our architecture is composed of two types of modules \u2014 the core app and other apps. The main goal is to ensure that all apps, besides the core app, remain independent and decoupled.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"The-core-app\"><strong>The core app<\/strong><\/h3>\n\n\n\n<p>The core app serves as the backbone of our project, containing essential components that are required across the entire application. It contains various functionalities, including settings, common code, abstractions, and utilities that can be shared and used by other apps within the project.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Other-Apps\"><strong>Other Apps<\/strong><\/h3>\n\n\n\n<p>All other apps are modules that can interact with the core app. They all share a similar structure that looks like this:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\"><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Django\" data-shcb-language-slug=\"django\"><span><code class=\"hljs language-django\"><span class=\"xml\">.\n\u251c\u2500\u2500 models\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 services\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 utils\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 v1\n\u2502 \u251c\u2500\u2500 user\n\u2502 \u2502 \u251c\u2500\u2500 get\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 views.py\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 docs.py\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 serializers.py\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 tests_get_user.py\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 use_case.py\n\u2502 \u2502 \u2502 \u2514\u2500\u2500 ...\n\u2502 \u2502 \u251c\u2500\u2500 ...\n\u2502 \u251c\u2500\u2500 urls.py\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 urls.py\n\u251c\u2500\u2500 conftest.py\n\u2514\u2500\u2500 ...<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Django<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">django<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n<\/div>\n\n\n\n<p>Some files like <em>__init__.py<\/em> and <em>migrations<\/em> were omitted to keep only the most important aspects of the structure.<\/p>\n\n\n\n<p>In our architecture, every endpoint has a folder containing the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>View:<\/strong> Each API should contain one view. The view handles the incoming requests and returns the appropriate responses.<\/li>\n\n\n\n<li><strong>Use cases:<\/strong> Each API should have one use case, which should be called by the view. Use cases represent the business logic of the API.<\/li>\n\n\n\n<li><strong>Docs:<\/strong> Each API should have documentation specifications. The Documentation file contains the API definition and is used to generate the OpenAPI page.<\/li>\n\n\n\n<li><strong>Tests:<\/strong> Comprehensive test suites should be created for each API to cover various scenarios, including edge cases and error conditions.<\/li>\n\n\n\n<li><strong>Request and response serializers:<\/strong> Each API should have request and response serializers. Serializers help with data validation and transformation.<\/li>\n<\/ul>\n\n\n\n<p>In scenarios where multiple use cases share similar business logic, business logic is extracted and consolidated into the services or the utils folder, ensuring a cohesive and organized codebase. Our architectural philosophy emphasizes keeping business logic within specific designated areas: use cases, models, and services\/utils.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"App-independence-and-code-reusability\"><strong>App independence and code reusability<\/strong><\/h2>\n\n\n\n<p>Keeping code readable and maintainable can be a big challenge. That\u2019s why keeping the apps decoupled is so important.&nbsp;<\/p>\n\n\n\n<p>This is how we handle app independence in the starter kit:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To promote code reusability, we extract code snippets that are common across multiple apps to the core app. Of course, some code redundancy is acceptable.<\/li>\n\n\n\n<li>When we need to extend a highly specific property from the core model, we use Django&#8217;s <a href=\"https:\/\/docs.djangoproject.com\/en\/4.2\/topics\/db\/models\/#proxy-models\">Proxy Model<\/a>. This allows us to extend the core model&#8217;s functionality without altering its core behavior. Here&#8217;s an example:<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\"><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Django\" data-shcb-language-slug=\"django\"><span><code class=\"hljs language-django\"><span class=\"xml\">from core.models import User as CoreUser\n\nclass User(CoreUser):\n\u00a0 \u00a0 def my_app_specific_property(self):\n\u00a0 \u00a0 \u00a0 \u00a0 ...\n\n\u00a0 \u00a0 class Meta:\n\u00a0 \u00a0 \u00a0 \u00a0 proxy = True<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Django<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">django<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When creating a relationship with a model that does not belong to its app or the core, we opt for <a href=\"https:\/\/docs.djangoproject.com\/en\/4.2\/ref\/models\/options\/#django.db.models.Options.managed\" target=\"_blank\" rel=\"noreferrer noopener\">unmanaged models<\/a>. This approach lets us use the model without importing the original and avoids unnecessary dependencies.<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\"><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Django\" data-shcb-language-slug=\"django\"><span><code class=\"hljs language-django\"><span class=\"xml\">class ModelName(BaseModel):\n\u00a0 \u00a0 essential_field = models.TextField()\n\n\u00a0 \u00a0 class Meta:\n\u00a0 \u00a0 \u00a0 \u00a0 managed = False\n\u00a0 \u00a0 \u00a0 \u00a0 db_table = 'original_app_model_name'\n\nclass ModelWhichNeedsRelationship(BaseModel):\n\u00a0 \u00a0 relation = models.ForeignKey(ModelName, ...)\n\u00a0 \u00a0 ...<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Django<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">django<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Future-improvements\"><strong>Future improvements<\/strong><\/h2>\n\n\n\n<p>The Django starter kit has been essential in maintaining code quality and consistency across our projects.&nbsp;<\/p>\n\n\n\n<p>But our journey doesn&#8217;t end here. At Cheesecake Labs, we recognize that web and <a href=\"https:\/\/cheesecakelabs.com\/blog\/mobile-application-development\/\">mobile development<\/a> requires ongoing adaptation and innovation.<\/p>\n\n\n\n<p>We firmly believe that while our current approach is a robust foundation, there\u2019s no silver bullet. We remain committed to refining our architecture to meet the unique demands of each project that comes our way.<\/p>\n\n\n\n<p>Some of the exciting features we\u2019re planning for the future:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>More modules<\/strong>: We&#8217;ve mapped more frequently used modules that should be integrated into our starter to improve our delivery time. For example, we plan to add a push notification module.<\/li>\n\n\n\n<li><strong>Framework alternatives<\/strong>: We are considering whether Django Ninja is a better alternative than Django REST Framework for our starter kit. This replacement could significantly reduce boilerplate code because simple typehints would replace the serializers and API specifications.<\/li>\n<\/ul>\n\n\n\n<p>We\u2019re excited to keep innovating and finding new ways to streamline our development and build better products for our clients.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Learn more about how we work&nbsp;<\/strong><\/h2>\n\n\n\n<p>To learn more about how we work at Cheesecake Labs, check out the rest of <a href=\"https:\/\/cheesecakelabs.com\/blog\/category\/engineering\/\" target=\"_blank\" rel=\"noreferrer noopener\">our blog<\/a>, where we cover all things software development and <a href=\"https:\/\/cheesecakelabs.com\/blog\/mobile-app-design-best-practices\/\">design<\/a> and dive deep into our processes and approach.<\/p>\n\n\n\n<p>And if you\u2019d like expert help building delightful digital products, <a href=\"https:\/\/cheesecakelabs.com\/en\/contact\/\">let\u2019s chat<\/a>! We\u2019d love to hear from you.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/cheesecakelabs.com\/en\/contact\/\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1200\" height=\"628\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/07\/scalable-application.png\" alt=\"build scalable applications\" class=\"wp-image-11441\" srcset=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/07\/scalable-application.png 1200w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/07\/scalable-application-600x314.png 600w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/07\/scalable-application-768x402.png 768w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/07\/scalable-application-760x398.png 760w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Explore our blog for more Django Framework content:<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cheesecakelabs.com\/blog\/white-label-django-made-easy\/\">White label with Django made it easy<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cheesecakelabs.com\/blog\/asynchronous-task-queue-django\/\">Asynchronous task queue with Django, Celery and AWS SQS<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>At Cheesecake Labs, we work on a wide range of projects, each with unique demands and complexities. After 10 years of working with clients to build scalable digital products that help solve real-world problems, we\u2019ve noticed some recurring themes in our work. With these challenges in mind, we decided to put together starter kits on [&hellip;]<\/p>\n","protected":false},"author":81,"featured_media":11653,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[432],"tags":[350,54,1259,1199],"class_list":["post-11652","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","tag-tag-django","tag-tag-mobile-app-development","tag-scalable-application","tag-software-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How To Build Scalable Systems with Django Framework<\/title>\n<meta name=\"description\" content=\"Learn how to build scalable systems using Django, based on our 10-year work experience in web and app development.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How To Build Scalable Systems with Django Framework\" \/>\n<meta property=\"og:description\" content=\"Learn how to build scalable systems using Django, based on our 10-year work experience in web and app development.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/\" \/>\n<meta property=\"og:site_name\" content=\"Cheesecake Labs\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cheesecakelabs\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-16T10:56:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-16T11:19:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/11\/scalable-systems-django.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"860\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Cheesecake Labs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:site\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/\"},\"author\":{\"name\":\"Karran Besen\"},\"headline\":\"How To Build Scalable Systems with Django Framework\",\"datePublished\":\"2023-11-16T10:56:01+00:00\",\"dateModified\":\"2023-11-16T11:19:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/\"},\"wordCount\":994,\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/11\/scalable-systems-django.jpg\",\"keywords\":[\"Django\",\"mobile app development\",\"scalable application\",\"software development\"],\"articleSection\":[\"Engineering\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/\",\"name\":\"How To Build Scalable Systems with Django Framework\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/11\/scalable-systems-django.jpg\",\"datePublished\":\"2023-11-16T10:56:01+00:00\",\"dateModified\":\"2023-11-16T11:19:25+00:00\",\"author\":{\"@type\":\"person\",\"name\":\"Karran Besen\"},\"description\":\"Learn how to build scalable systems using Django, based on our 10-year work experience in web and app development.\",\"breadcrumb\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#primaryimage\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/11\/scalable-systems-django.jpg\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/11\/scalable-systems-django.jpg\",\"width\":1920,\"height\":860,\"caption\":\"woman working app development django\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cheesecakelabs.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How To Build Scalable Systems with Django Framework\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#website\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/\",\"name\":\"Cheesecake Labs\",\"description\":\"Nearshore outsourcing company for Web and Mobile design and engineering services, and staff augmentation for startups and enterprises..\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cheesecakelabs.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"name\":\"Karran Besen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2019\/12\/karran-300x300.png\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2019\/12\/karran-300x300.png\",\"caption\":\"Karran Besen\"},\"url\":\"https:\/\/cheesecakelabs.com\/blog\/autor\/karran-besen\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How To Build Scalable Systems with Django Framework","description":"Learn how to build scalable systems using Django, based on our 10-year work experience in web and app development.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/","og_locale":"en_US","og_type":"article","og_title":"How To Build Scalable Systems with Django Framework","og_description":"Learn how to build scalable systems using Django, based on our 10-year work experience in web and app development.","og_url":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/","og_site_name":"Cheesecake Labs","article_publisher":"https:\/\/www.facebook.com\/cheesecakelabs","article_published_time":"2023-11-16T10:56:01+00:00","article_modified_time":"2023-11-16T11:19:25+00:00","og_image":[{"width":1920,"height":860,"url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/11\/scalable-systems-django.jpg","type":"image\/jpeg"}],"author":"Cheesecake Labs","twitter_card":"summary_large_image","twitter_creator":"@cheesecakelabs","twitter_site":"@cheesecakelabs","twitter_misc":{"Written by":null,"Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#article","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/"},"author":{"name":"Karran Besen"},"headline":"How To Build Scalable Systems with Django Framework","datePublished":"2023-11-16T10:56:01+00:00","dateModified":"2023-11-16T11:19:25+00:00","mainEntityOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/"},"wordCount":994,"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/11\/scalable-systems-django.jpg","keywords":["Django","mobile app development","scalable application","software development"],"articleSection":["Engineering"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/","url":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/","name":"How To Build Scalable Systems with Django Framework","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#primaryimage"},"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/11\/scalable-systems-django.jpg","datePublished":"2023-11-16T10:56:01+00:00","dateModified":"2023-11-16T11:19:25+00:00","author":{"@type":"person","name":"Karran Besen"},"description":"Learn how to build scalable systems using Django, based on our 10-year work experience in web and app development.","breadcrumb":{"@id":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#primaryimage","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/11\/scalable-systems-django.jpg","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2023\/11\/scalable-systems-django.jpg","width":1920,"height":860,"caption":"woman working app development django"},{"@type":"BreadcrumbList","@id":"https:\/\/cheesecakelabs.com\/blog\/scalable-systems-django\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cheesecakelabs.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How To Build Scalable Systems with Django Framework"}]},{"@type":"WebSite","@id":"https:\/\/cheesecakelabs.com\/blog\/#website","url":"https:\/\/cheesecakelabs.com\/blog\/","name":"Cheesecake Labs","description":"Nearshore outsourcing company for Web and Mobile design and engineering services, and staff augmentation for startups and enterprises..","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cheesecakelabs.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","name":"Karran Besen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cheesecakelabs.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2019\/12\/karran-300x300.png","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2019\/12\/karran-300x300.png","caption":"Karran Besen"},"url":"https:\/\/cheesecakelabs.com\/blog\/autor\/karran-besen\/"}]}},"_links":{"self":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/11652","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/users\/81"}],"replies":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/comments?post=11652"}],"version-history":[{"count":2,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/11652\/revisions"}],"predecessor-version":[{"id":11656,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/11652\/revisions\/11656"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/media\/11653"}],"wp:attachment":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/media?parent=11652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/categories?post=11652"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/tags?post=11652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}