{"id":4557,"date":"2021-11-24T07:09:46","date_gmt":"2021-11-24T07:09:46","guid":{"rendered":"https:\/\/techpearl.io\/?p=4557"},"modified":"2024-02-14T13:13:37","modified_gmt":"2024-02-14T13:13:37","slug":"building-a-multi-tenant-system-using-postgresql-and-django","status":"publish","type":"post","link":"https:\/\/techpearl.com\/1719395789229\/building-a-multi-tenant-system-using-postgresql-and-django\/","title":{"rendered":"Building A Multi Tenant System Using PostgreSQL And Django"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"4557\" class=\"elementor elementor-4557\" data-elementor-settings=\"[]\">\n\t\t\t\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-cc9da89 elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"cc9da89\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9ebd7da jltma-glass-effect-no\" data-id=\"9ebd7da\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8194ebe jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"8194ebe\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Efficient Multi-Tenant System Development with PostgreSQL and Django<\/h1>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-255dfd7 elementor-align-left jltma-glass-effect-no elementor-widget elementor-widget-post-info\" data-id=\"255dfd7\" data-element_type=\"widget\" data-widget_type=\"post-info.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<ul class=\"elementor-inline-items elementor-icon-list-items elementor-post-info\">\n\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-32351d2 elementor-inline-item\" itemprop=\"author\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-author\">\n\t\t\t\t\t\t\t\t\t\tTrupti Panchal\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43ce84f bdt-ss-btns-view-icon bdt-ss-btns-shape-rounded bdt-ss-btns-align-left bdt-ep-grid-0 bdt-ss-btns-style-flat bdt-ss-btns-color-original jltma-glass-effect-no elementor-widget elementor-widget-bdt-social-share\" data-id=\"43ce84f\" data-element_type=\"widget\" data-widget_type=\"bdt-social-share.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"bdt-social-share bdt-ep-grid\">\n\t\t\t\t\t\t\t<div class=\"bdt-social-share-item bdt-ep-grid-item\">\n\t\t\t\t\t<div class=\"bdt-ss-btn bdt-ss-linkedin\" data-social=\"linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-ss-icon\">\n\t\t\t\t\t\t\t\t<i class=\"ep-linkedin\"><\/i>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"bdt-social-share-item bdt-ep-grid-item\">\n\t\t\t\t\t<div class=\"bdt-ss-btn bdt-ss-twitter\" data-social=\"twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-ss-icon\">\n\t\t\t\t\t\t\t\t<i class=\"ep-twitter\"><\/i>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"bdt-social-share-item bdt-ep-grid-item\">\n\t\t\t\t\t<div class=\"bdt-ss-btn bdt-ss-facebook\" data-social=\"facebook\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-ss-icon\">\n\t\t\t\t\t\t\t\t<i class=\"ep-facebook\"><\/i>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-450dcef elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"450dcef\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-db0f853 jltma-glass-effect-no\" data-id=\"db0f853\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-818f723 jltma-glass-effect-no elementor-widget elementor-widget-theme-post-featured-image elementor-widget-image\" data-id=\"818f723\" data-element_type=\"widget\" data-widget_type=\"theme-post-featured-image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"2240\" height=\"1260\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/Building-A-Multi-Tenant-System-Using-PostgreSQL-And-Django-2.jpg\" class=\"attachment-full size-full\" alt=\"Building A Multi Tenant System Using PostgreSQL And Django 2\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/Building-A-Multi-Tenant-System-Using-PostgreSQL-And-Django-2.jpg 2240w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/Building-A-Multi-Tenant-System-Using-PostgreSQL-And-Django-2-300x169.jpg 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/Building-A-Multi-Tenant-System-Using-PostgreSQL-And-Django-2-1024x576.jpg 1024w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/Building-A-Multi-Tenant-System-Using-PostgreSQL-And-Django-2-768x432.jpg 768w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/Building-A-Multi-Tenant-System-Using-PostgreSQL-And-Django-2-1536x864.jpg 1536w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/Building-A-Multi-Tenant-System-Using-PostgreSQL-And-Django-2-2048x1152.jpg 2048w\" sizes=\"auto, (max-width: 2240px) 100vw, 2240px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-cc4c504 elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"cc4c504\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-859da8d jltma-glass-effect-no\" data-id=\"859da8d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3b2a96e jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"3b2a96e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Multitenancy<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-39f0570 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"39f0570\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Multitenancy refers to a software application that serves multiple distinct groups of users sharing a single instance of running software. From a database perspective, this means that a single instance of a database is utilized by multiple applications.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0db59d1 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"0db59d1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>We need to achieve the following for successfully building a multitenant system.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c56c998 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"c56c998\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul><li>Multiple customers running on the same instance<\/li><li>Shared and Tenant-Specific data<\/li><li>Tenant View-Routing<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e13ddde jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"e13ddde\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>I will walk you through an implementation where we have used Postgres for the database and Django framework for the front end. We have used nginx\/uwsgi for deployment of the system.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-537a54a jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"537a54a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Prerequisites to understand this article<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f805612 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"f805612\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ol type=\"a\"><li class=\"blog-li\">Postgres<\/li><li class=\"blog-li\">Django<\/li><li class=\"blog-li\">Nginx (good to know)<\/li><li class=\"blog-li\">Uwsgi (good to know)<\/li><li class=\"blog-li\">Systemd service (good to know)<\/li><\/ol>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f4e1f91 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"f4e1f91\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/3-6.png\" class=\"attachment-large size-large\" alt=\"Prerequisite to understand how to Building A Multi Tenant System Using PostgreSQL And Django\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/3-6.png 1024w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/3-6-300x225.png 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/3-6-768x576.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bfc9eff jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"bfc9eff\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Brief introduction about the prerequisites<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a2818ae jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"a2818ae\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h5><strong>Postgres Database<\/strong><\/h5><p>One of the multitenancy options available in Postgres is to create separate schemas for each application within a single database in a cluster. By using schema-level privileges to restrict the access of a tenant application to only the application\u2019s specific schema, we enable some level of data isolation between each application. We took advantage of this feature and implemented our system based on this.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e2f285 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"7e2f285\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h5><strong>Django<\/strong><\/h5><p>Django is a high-level Python web framework that is used for expedient web application development. Native Django does not provide a simple way to support multiple tenants using the same project instance, even when only the data is different.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-69e6127 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"69e6127\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h5><strong>Nginx\/Uwsgi<\/strong><\/h5><ul><li>Nginx is open source software for web serving, reverse proxying, caching, load balancing, media streaming, and more. It started out as a web server designed for maximum performance and stability.<\/li><li>The uWSGI project aims at developing a full stack for building hosting services.<\/li><li>uWSGI operates on a client-server model. Your web server (e.g., nginx) communicates with a django-uwsgi \u201cworker\u201d process to serve dynamic content.<\/li><li>Nginx and uWSGI are good choices for Django deployment, but they are not the only ones, or the \u2018official\u2019 ones. There are excellent alternatives to both, and\u00a0 we encourage you to\u00a0 investigate them.<\/li><li>A web server faces the outside world. It can serve files (HTML, images, CSS, etc) directly from the file system. However, it can\u2019t talk directly to Django applications; it needs something that will run the application, feed it requests from web clients (such as browsers) and return responses.<\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35cc509 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"35cc509\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>A Web Server Gateway Interface \u2013 WSGI \u2013 does this job. <a href=\"http:\/\/wsgi.org\/\" target=\"_blank\" rel=\"noopener\">WSGI<\/a> is a Python standard.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5af5e6d jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"5af5e6d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>uWSGI is a WSGI implementation. In this Blog we will set up uWSGI so that it creates a Unix socket, and serves responses to the web server via the uwsgi protocol.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0484029 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"0484029\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h5><strong>Systemd<\/strong><\/h5><p>Systemd is a Linux initialization system and service manager that includes features like on-demand starting of daemons, mount and automount point maintenance, snapshot support, and processes tracking using Linux control groups.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8001ed2 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"8001ed2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Systemd is the new system and service manager in RHEL 7.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-729f7c8 elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"729f7c8\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ac70849 jltma-glass-effect-no\" data-id=\"ac70849\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3187b1d jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"3187b1d\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/techpearl.com\/1719395789229\/contact-us\/\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"220\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/mobile.jpg\" class=\"attachment-full size-full\" alt=\"mobile\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/mobile.jpg 1024w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/mobile-300x64.jpg 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/mobile-768x165.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-370a611 elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"370a611\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-88d1820 jltma-glass-effect-no\" data-id=\"88d1820\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f5b95e9 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"f5b95e9\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Low level details of implementation<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c794297 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"c794297\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h5><strong>Postgres Database and Django &#8211; tenant schemas<\/strong><\/h5><p><strong><span style=\"text-decoration: underline;\">Django<\/span> \u2013<\/strong> tenant schemas<br \/>We have used <a href=\"https:\/\/www.djangoproject.com\/\" target=\"_blank\" rel=\"noopener\">django<\/a>-tenant-schemas that enables Django powered apps to have multiple tenants via <a href=\"http:\/\/www.postgresql.org\/docs\/9.2\/static\/ddl-schemas.html\" target=\"_blank\" rel=\"noopener\">PostgreSQL schemas.<\/a><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ddfec1c jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"ddfec1c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Postgres has a schema called public schema. This is the schema that is used by default, if no schema names are mentioned when doing the database operations. Django-tenant-schemas makes use of this to store the information about the different tenants. Each tenant has its own schema and generic information about the tenants is stored in the public schema. Each tenant is identified via its host name (i.e tenant.domain.com). This information is stored on a table on the public schema. Whenever a request is made, the host name is used to match a tenant in the database. If there\u2019s a match, the search path is updated to use this tenant\u2019s schema. So from now on all queries will take place at the tenant\u2019s schema.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-262d6e2 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"262d6e2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h5><strong>Our Implementation:<\/strong><\/h5><p>For example, suppose you have a tenant customer1 at <a href=\"http:\/\/customer1.example.com\/\" target=\"_blank\" rel=\"noopener\">http:\/\/customer1.example.com.<\/a> Any request incoming at customer1.example.com will automatically use the customer1\u2019s schema and make the tenant available at the request.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-efc6528 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"efc6528\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Now let us see the configuration, so that when any request incoming at customer1.example.com will automatically use the customer1\u2019s schema.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db9bd45 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"db9bd45\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><strong>Postgres Database<\/strong><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7febe87 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"7febe87\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The default schema of Postgres is public schema. Public schema is used as a route, as to which schema to pick up for a given tenant.<br \/>We will create a new schema for every tenant. In this example I have created two schemas<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dbbc7eb jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"dbbc7eb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ol><li>customer1<\/li><li>customer2<\/li><\/ol>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-578516a jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"578516a\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"664\" height=\"300\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img1-10.png\" class=\"attachment-full size-full\" alt=\"img1 10\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img1-10.png 664w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img1-10-300x136.png 300w\" sizes=\"auto, (max-width: 664px) 100vw, 664px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e66da17 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"e66da17\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><strong>Basic \u2013 Django Settings<\/strong><\/span><br \/>You\u2019ll have to make the following modifications to your settings.py file.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5320bac jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"5320bac\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Your DATABASE_ENGINE setting needs to be changed to<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-00dfdda jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"00dfdda\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"714\" height=\"127\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img2-9.png\" class=\"attachment-full size-full\" alt=\"img2 9\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img2-9.png 714w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img2-9-300x53.png 300w\" sizes=\"auto, (max-width: 714px) 100vw, 714px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d4dc412 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"d4dc412\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Add tenant_schemas.routers.TenantSyncRouter to your DATABASE_ROUTERS setting, so that the correct apps can be synced, depending on what\u2019s being synced (shared or tenant).<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-459e835 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"459e835\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"706\" height=\"82\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img3-1-1.png\" class=\"attachment-full size-full\" alt=\"img3 1 1\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img3-1-1.png 706w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img3-1-1-300x35.png 300w\" sizes=\"auto, (max-width: 706px) 100vw, 706px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-33a52bf jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"33a52bf\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Add the middleware tenant_schemas.middleware.TenantMiddleware to the top of MIDDLEWARE_CLASSES, so that each request can be set to use the correct schema.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-913718a jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"913718a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>If the hostname in the request does not match a valid tenant domain_url, a HTTP 404 Not Found will be returned.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-debe745 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"debe745\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"713\" height=\"79\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img4-6.png\" class=\"attachment-full size-full\" alt=\"img4 6\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img4-6.png 713w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img4-6-300x33.png 300w\" sizes=\"auto, (max-width: 713px) 100vw, 713px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-74d9cbc jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"74d9cbc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><strong>The Tenant Model<\/strong><\/span><br \/>Now we have to create your tenant model. Your tenant model can contain whichever fields you want, however, you must inherit from TenantMixin. This Mixin only has two fields (domain_url and schema_name), and both are required. Here\u2019s an example, suppose we have an app named customers and we want to create a model called Client.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e94cbd1 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"e94cbd1\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"335\" height=\"182\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img5-4.png\" class=\"attachment-full size-full\" alt=\"img5 4\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img5-4.png 335w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img5-4-300x163.png 300w\" sizes=\"auto, (max-width: 335px) 100vw, 335px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af972c7 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"af972c7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"707\" height=\"194\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img6-3.png\" class=\"attachment-full size-full\" alt=\"img6 3\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img6-3.png 707w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img6-3-300x82.png 300w\" sizes=\"auto, (max-width: 707px) 100vw, 707px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-22ae5b1 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"22ae5b1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><strong>Configure Tenant and Shared Applications \u2013 Django settings<\/strong><\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e8b3697 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"e8b3697\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"711\" height=\"523\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img7-4.png\" class=\"attachment-full size-full\" alt=\"img7 4\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img7-4.png 711w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img7-4-300x221.png 300w\" sizes=\"auto, (max-width: 711px) 100vw, 711px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3ceb449 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"3ceb449\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"53\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img8-4.png\" class=\"attachment-full size-full\" alt=\"img8 4\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img8-4.png 720w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img8-4-300x22.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce98b64 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"ce98b64\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Create\u00a0<strong>customer1setting.py<\/strong>\u00a0file<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f350d7 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"6f350d7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"383\" height=\"67\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-1-1.png\" class=\"attachment-full size-full\" alt=\"code 1 1\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-1-1.png 383w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-1-1-300x52.png 300w\" sizes=\"auto, (max-width: 383px) 100vw, 383px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e86428a jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"e86428a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><strong>Create Tenant<\/strong><\/span><br \/>Now we can create our first real tenant.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-539df85 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"539df85\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"656\" height=\"180\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img9-3.png\" class=\"attachment-full size-full\" alt=\"img9 3\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img9-3.png 656w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img9-3-300x82.png 300w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-df1d593 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"df1d593\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"910\" height=\"162\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img10.png\" class=\"attachment-full size-full\" alt=\"img10\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img10.png 910w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img10-300x53.png 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/img10-768x137.png 768w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bb81e45 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"bb81e45\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h4><strong>Nginx\/uwsgi<\/strong><\/h4><p class=\"blog-p\">Create a python virtual environment with the project_name. You can install all your project dependencies in this environment.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6791304 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"6791304\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p class=\"blog-p\">Every tenant will have tenant specific<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a12ae8b jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"a12ae8b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ol><li>Uwsgi file<\/li><li class=\"blog-li\">Ini file<\/li><li class=\"blog-li\">Nginx file<\/li><li class=\"blog-li\">Systemd service file<\/li><\/ol>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cf41abb jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"cf41abb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h4><strong>Uwsgi file<\/strong><\/h4><p class=\"blog-p\">Create a file with name \u201c<strong>customer1-uwsgi.py<\/strong>\u201d under \/var\/www\/html\/PROJECT_PATH\/.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0549db1 jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"0549db1\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"848\" height=\"380\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-2-1.png\" class=\"attachment-full size-full\" alt=\"code 2 1\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-2-1.png 848w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-2-1-300x134.png 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-2-1-768x344.png 768w\" sizes=\"auto, (max-width: 848px) 100vw, 848px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e0ff36 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"9e0ff36\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h4><strong>Ini file<\/strong><\/h4><p class=\"blog-p\">Key points:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96deef9 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"96deef9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ol><li>Here\u00a0<strong>8001<\/strong>\u00a0is the port number \u2013 which will be used in nginx configuration<\/li><li class=\"blog-li\"><strong>Customer1-uwsgi.py<\/strong>\u00a0\u2013 name of the uwsgi file<\/li><\/ol>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-11d8c3b jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"11d8c3b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p class=\"blog-p\">Create a file with name \u201c<strong>customer1.ini<\/strong>\u201d under \/var\/www\/html\/PROJECT_PATH\/.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a299bdf jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"a299bdf\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"425\" height=\"506\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-3-1.png\" class=\"attachment-full size-full\" alt=\"code 3 1\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-3-1.png 425w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-3-1-252x300.png 252w\" sizes=\"auto, (max-width: 425px) 100vw, 425px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-380d359 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"380d359\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h4><strong>Nginx configuration<\/strong><\/h4><p class=\"blog-p\">Create a file with name \u201ccustomer1.conf\u201d under \/etc\/nginx\/conf.d\/<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f4675b7 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"f4675b7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Key points:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c3d5f63 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"c3d5f63\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ol><li>Here\u00a0<strong>8001<\/strong>\u00a0is the port number mention\u00a0<strong>customer1.ini<\/strong>\u00a0file<\/li><\/ol>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f1cd6aa jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"f1cd6aa\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"1374\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-4-1.png\" class=\"attachment-full size-full\" alt=\"code 4 1\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-4-1.png 1000w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-4-1-218x300.png 218w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-4-1-745x1024.png 745w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-4-1-768x1055.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f56b0a0 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"f56b0a0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p class=\"blog-p\">You can reload the nginx with following command<br \/><strong>sudo systemctl reload nginx<\/strong><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1695bce jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"1695bce\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h4><strong>Systemd service<\/strong><\/h4><p class=\"blog-p\">Create a file with name \u201c<strong>uwsgi-customer1.service<\/strong>\u201d under \/etc\/systemd\/system\/<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a3cc50b jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"a3cc50b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Key point:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a4b3376 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"a4b3376\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ol><li>Here\u00a0<strong>\/var\/www\/html\/PROJECT_PATH\/customer1.ini<\/strong>\u00a0is the path to the ini file<\/li><\/ol>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5a7d2e jltma-glass-effect-no elementor-widget elementor-widget-image\" data-id=\"d5a7d2e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1103\" height=\"474\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-5-1.png\" class=\"attachment-full size-full\" alt=\"code 5 1\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-5-1.png 1103w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-5-1-300x129.png 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-5-1-1024x440.png 1024w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2021\/11\/code-5-1-768x330.png 768w\" sizes=\"auto, (max-width: 1103px) 100vw, 1103px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f302b2a jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"f302b2a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>You can start the service by running the following command<br \/><strong>sudo systemctl start uwsgi-customer1 service<\/strong><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3cbfcb7 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"3cbfcb7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Command to restart<br \/><strong>sudo systemctl restart uwsgi-customer1 service<\/strong><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e86694e jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"e86694e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Command to stop<br \/><strong>sudo systemctl stop uwsgi-customer1 service<\/strong><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5ad19a1 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"5ad19a1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><strong>Reference Article<\/strong><br \/><a href=\"https:\/\/django-tenant-schemas.readthedocs.io\/en\/latest\/\" target=\"_blank\" rel=\"noopener\">https:\/\/django-tenant-schemas.readthedocs.io\/en\/latest\/<\/a><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a11f28e jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"a11f28e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Techpearl engineers are well versed in the latest technologies. <a href=\"https:\/\/techpearl.com\/1719395789229\/contact-us\/\">Contact us<\/a> to implement SAAS products.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2066c2b bdt-ss-btns-view-icon bdt-ss-btns-shape-rounded bdt-ss-btns-align-left bdt-ep-grid-0 bdt-ss-btns-style-flat bdt-ss-btns-color-original jltma-glass-effect-no elementor-widget elementor-widget-bdt-social-share\" data-id=\"2066c2b\" data-element_type=\"widget\" data-widget_type=\"bdt-social-share.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"bdt-social-share bdt-ep-grid\">\n\t\t\t\t\t\t\t<div class=\"bdt-social-share-item bdt-ep-grid-item\">\n\t\t\t\t\t<div class=\"bdt-ss-btn bdt-ss-linkedin\" data-social=\"linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-ss-icon\">\n\t\t\t\t\t\t\t\t<i class=\"ep-linkedin\"><\/i>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"bdt-social-share-item bdt-ep-grid-item\">\n\t\t\t\t\t<div class=\"bdt-ss-btn bdt-ss-twitter\" data-social=\"twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-ss-icon\">\n\t\t\t\t\t\t\t\t<i class=\"ep-twitter\"><\/i>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"bdt-social-share-item bdt-ep-grid-item\">\n\t\t\t\t\t<div class=\"bdt-ss-btn bdt-ss-facebook\" data-social=\"facebook\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"bdt-ss-icon\">\n\t\t\t\t\t\t\t\t<i class=\"ep-facebook\"><\/i>\n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\n\t\t\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-0314ec7 elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"0314ec7\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ad974ae jltma-glass-effect-no\" data-id=\"ad974ae\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b03a943 jltma-glass-effect-no elementor-widget elementor-widget-heading\" data-id=\"b03a943\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Read More Articles<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-040d33d elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"040d33d\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-832f07b jltma-glass-effect-no\" data-id=\"832f07b\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-282aab5 elementor-grid-3 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-card-shadow-yes elementor-posts__hover-gradient jltma-glass-effect-no elementor-widget elementor-widget-posts\" data-id=\"282aab5\" data-element_type=\"widget\" data-settings=\"{&quot;cards_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:46,&quot;sizes&quot;:[]},&quot;cards_columns&quot;:&quot;3&quot;,&quot;cards_columns_tablet&quot;:&quot;2&quot;,&quot;cards_columns_mobile&quot;:&quot;1&quot;}\" data-widget_type=\"posts.cards\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-cards elementor-grid\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-20585 post type-post status-publish format-standard has-post-thumbnail hentry category-blog\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/techpearl.com\/1719395789229\/breaking-the-api-mold\/\">\n\t\t\t<div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/09\/14-768x432.jpg\" class=\"attachment-medium_large size-medium_large\" alt=\"\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/09\/14-768x432.jpg 768w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/09\/14-300x169.jpg 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/09\/14.jpg 1024w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">blog<\/div>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/techpearl.com\/1719395789229\/breaking-the-api-mold\/\">\n\t\t\t\tBreaking the API Mold: A new era of AI-Driven Customer Journeys\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>React vs. Angular: Choosing the Right Framework for Your Project In the fast- paced world of financial services, speed, accuracy and scalability are critical. Yet,<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-author\">\n\t\t\tSiddharth Singh\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-20556 post type-post status-publish format-standard has-post-thumbnail hentry category-blog\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/techpearl.com\/1719395789229\/react-vs-angular\/\">\n\t\t\t<div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/07\/6-1-768x432.jpg\" class=\"attachment-medium_large size-medium_large\" alt=\"6 1\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/07\/6-1-768x432.jpg 768w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/07\/6-1-300x169.jpg 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/07\/6-1.jpg 1024w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">blog<\/div>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/techpearl.com\/1719395789229\/react-vs-angular\/\">\n\t\t\t\tReact vs. Angular: Choosing the Right Framework for Your Project\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>React vs. Angular: Choosing the Right Framework for Your Project In the world of frontend development, React and Angular are two of the most popular<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-author\">\n\t\t\tTrupti Panchal\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-20547 post type-post status-publish format-standard has-post-thumbnail hentry category-blog\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/techpearl.com\/1719395789229\/amazon-q-for-developers\/\">\n\t\t\t<div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/07\/6-768x432.jpg\" class=\"attachment-medium_large size-medium_large\" alt=\"6\" srcset=\"https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/07\/6-768x432.jpg 768w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/07\/6-300x169.jpg 300w, https:\/\/techpearl.com\/1719395789229\/wp-content\/uploads\/2025\/07\/6.jpg 1024w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">blog<\/div>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/techpearl.com\/1719395789229\/amazon-q-for-developers\/\">\n\t\t\t\tAmazon Q for Developers: Level Up Your Productivity with AI\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Amazon Q Developer is AWS&#8217;s new generative AI assistant purpose-built to transform the workflow of software developers and IT professionals. Unlike generic AI chatbots, Amazon<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-author\">\n\t\t\tVinod Charan Kumar\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<\/div>\n\n\n\t\t\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_ma_el_bg_slider elementor-section elementor-top-section elementor-element elementor-element-7c21a3b elementor-section-boxed elementor-section-height-default elementor-section-height-default jltma-glass-effect-no\" data-id=\"7c21a3b\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_ma_el_bg_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-19a373d jltma-glass-effect-no\" data-id=\"19a373d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d2e0d76 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"d2e0d76\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>\u00a0Contact Us <span style=\"color: #f26a22;\">Now<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cec9a40 jltma-glass-effect-no elementor-widget elementor-widget-text-editor\" data-id=\"cec9a40\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Talk to us to find out about our flexible engagement models.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d186499 elementor-align-center elementor-tablet-align-center elementor-mobile-align-center jltma-glass-effect-no elementor-widget elementor-widget-button\" data-id=\"d186499\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a href=\"#\" class=\"elementor-button-link elementor-button elementor-size-md\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-text\">Get Started<\/span>\n\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Efficient Multi-Tenant System Development with PostgreSQL and Django Multitenancy Multitenancy refers to a software application that serves multiple distinct groups of users sharing a single instance of running software. From a database perspective, this means that a single instance of a database is utilized by multiple applications. We need to achieve the following for successfully &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/techpearl.com\/1719395789229\/amazon-q-for-developers\/\"> <span class=\"screen-reader-text\">Amazon Q for Developers: Level Up Your Productivity with AI<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":4,"featured_media":10873,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"footnotes":""},"categories":[63,16,19,21,23],"tags":[54,53,52],"class_list":["post-4557","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-django","category-mobile-development","category-software-development","category-web-development","tag-django","tag-postgresql","tag-software-development"],"_links":{"self":[{"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/posts\/4557","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/comments?post=4557"}],"version-history":[{"count":96,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/posts\/4557\/revisions"}],"predecessor-version":[{"id":17107,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/posts\/4557\/revisions\/17107"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/media\/10873"}],"wp:attachment":[{"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/media?parent=4557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/categories?post=4557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techpearl.com\/1719395789229\/wp-json\/wp\/v2\/tags?post=4557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}