<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marvin Ochieng</title>
    <description>The latest articles on DEV Community by Marvin Ochieng (@mavoochie).</description>
    <link>https://dev.to/mavoochie</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3291277%2F9b4f41a7-7893-4395-990a-a9850b1dbc86.png</url>
      <title>DEV Community: Marvin Ochieng</title>
      <link>https://dev.to/mavoochie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mavoochie"/>
    <language>en</language>
    <item>
      <title>Machine Learning</title>
      <dc:creator>Marvin Ochieng</dc:creator>
      <pubDate>Wed, 01 Apr 2026 05:32:38 +0000</pubDate>
      <link>https://dev.to/mavoochie/machine-learning-2g9</link>
      <guid>https://dev.to/mavoochie/machine-learning-2g9</guid>
      <description>&lt;p&gt;Many suggest learning linear algebra, calculus and statistics for ML, but what is the flow guide towards starting &lt;br&gt;
and progressing in ML?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MVT vs MVC Architecture</title>
      <dc:creator>Marvin Ochieng</dc:creator>
      <pubDate>Tue, 01 Jul 2025 14:48:16 +0000</pubDate>
      <link>https://dev.to/mavoochie/mvt-vs-mvc-architecture-25ma</link>
      <guid>https://dev.to/mavoochie/mvt-vs-mvc-architecture-25ma</guid>
      <description>&lt;h2&gt;
  
  
  Understanding Web Development Patterns
&lt;/h2&gt;

&lt;p&gt;Web application development relies heavily on architectural patterns. Two prominent patterns are MVC (Model-View-Controller) and MVT (Model-View-Template). While MVC is the traditional and widely adopted pattern, MVT is Django's interpretation that offers unique advantages for Python web development. Let's explore both patterns, their core functions and strength&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding MVC Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is MVC?
&lt;/h3&gt;

&lt;p&gt;MVC (Model-View-Controller) is a software architectural pattern that separates an application into three interconnected components. It was originally developed for desktop applications but has been widely adapted for web development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Components of MVC
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Model&lt;/strong&gt;: The data layer that manages the application's data, business logic, and rules. It directly manages data, logic, and rules of the application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View&lt;/strong&gt;: The presentation layer that displays data to the user. It represents the user interface and handles how information is presented.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Controller&lt;/strong&gt;: The intermediary that handles user input, processes requests, and coordinates between Model and View. It acts as the brain of the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  How MVC Works
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Input → Controller → Model (data processing) → Controller → View (presentation)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Controller receives user requests, interacts with the Model to fetch or manipulate data, and then updates the View to display the results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strengths of MVC
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Clear Separation of Concerns&lt;/strong&gt;: Each component has a distinct responsibility, making code more organized and maintainable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reusability&lt;/strong&gt;: Models can be reused across different controllers and views, promoting code reuse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testability&lt;/strong&gt;: Each component can be tested independently, improving overall code quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parallel Development&lt;/strong&gt;: Different team members can work on different components simultaneously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;: Changes to one component don't necessarily affect others, allowing for easier modifications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Industry Standard&lt;/strong&gt;: Widely understood and implemented across many frameworks and languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding MVT Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is MVT?
&lt;/h3&gt;

&lt;p&gt;MVT (Model-View-Template) is Django's interpretation of the MVC pattern. It reorganizes the traditional MVC structure to better suit web development needs and Python.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Components of MVT
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Model&lt;/strong&gt;: Similar to MVC, it handles data structure, database operations, and business logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View&lt;/strong&gt;: Unlike MVC, the View in MVT contains the business logic and acts as the controller. It processes requests and coordinates between Model and Template.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Template&lt;/strong&gt;: The presentation layer that defines how data is displayed. It's Django's equivalent of the View in MVC.&lt;/p&gt;

&lt;h3&gt;
  
  
  How MVT Works
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Request → URL Dispatcher → View → Model (if needed) → Template → Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Django's URL dispatcher routes requests to appropriate views, which then process the request, interact with models, and render templates.&lt;/p&gt;

&lt;h3&gt;
  
  
  MVT Example Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Django MVT Example
&lt;/span&gt;
&lt;span class="c1"&gt;# Model (models.py)
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.db&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;EmailField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DateTimeField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auto_now_add&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__str__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_absolute_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/users/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# View (views.py)
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.shortcuts&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;get_object_or_404&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.http&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HttpResponseRedirect&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.forms&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;UserForm&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;user_detail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_object_or_404&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;users/detail.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;user_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UserForm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_valid&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;HttpResponseRedirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_absolute_url&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UserForm&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;users/create.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;form&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# Template (users/detail.html)
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;{{ user.name }} - User Profile&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;{{ user.name }}&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;Email: {{ user.email }}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;Member since: {{ user.created_at|date:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;F j, Y&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; }}&amp;lt;/p&amp;gt;
    &amp;lt;a href=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{% url &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;user_list&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; %}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;Back to Users&amp;lt;/a&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="c1"&gt;# URLs (urls.py)
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.urls&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;

&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;users/&amp;lt;int:user_id&amp;gt;/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_detail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;user_detail&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;users/create/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user_create&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;user_create&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Strengths of MVT
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Framework Integration&lt;/strong&gt;: Designed specifically for Django, providing seamless integration with Django's features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Template Power&lt;/strong&gt;: Django's template system is more powerful than traditional view systems, with inheritance, filters, and tags.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;URL-Centric&lt;/strong&gt;: The URL dispatcher provides clean URL routing that's easy to understand and maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python-Friendly&lt;/strong&gt;: Aligns well with Python's philosophy of simplicity and readability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built-in Features&lt;/strong&gt;: Leverages Django's built-in features like ORM, admin interface, and middleware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rapid Development&lt;/strong&gt;: Optimized for quick development cycles with convention over configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Differences Between MVC and MVT
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Structural Differences
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;MVC&lt;/th&gt;
&lt;th&gt;MVT&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Controller&lt;/td&gt;
&lt;td&gt;Separate Controller component&lt;/td&gt;
&lt;td&gt;Logic handled by Django framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View Role&lt;/td&gt;
&lt;td&gt;Presentation layer&lt;/td&gt;
&lt;td&gt;Business logic layer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Template/View&lt;/td&gt;
&lt;td&gt;View handles presentation&lt;/td&gt;
&lt;td&gt;Template handles presentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Request Handling&lt;/td&gt;
&lt;td&gt;Controller processes requests&lt;/td&gt;
&lt;td&gt;View functions process requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;URL Routing&lt;/td&gt;
&lt;td&gt;Controller-based routing&lt;/td&gt;
&lt;td&gt;URL dispatcher with direct view mapping&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Conceptual Differences
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Control Flow&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MVC&lt;/strong&gt;: User → Controller → Model → Controller → View&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MVT&lt;/strong&gt;: User → URL → View → Model → Template&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Responsibility Distribution&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MVC&lt;/strong&gt;: Controller handles business logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MVT&lt;/strong&gt;: View handles business logic, Django handles control flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Difference btw MVC and MVT&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MVC&lt;/strong&gt;: Views are often programmatic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MVT&lt;/strong&gt;: Templates are declarative with limited logic&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Django Uses MVT
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Framework-Controlled Architecture
&lt;/h3&gt;

&lt;p&gt;Django takes control of the "Controller" aspect, handling request routing, middleware processing, and response generation automatically. This reduces boilerplate code and allows developers to focus on business logic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Django handles the controller logic automatically
# No need to explicitly define controllers
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;my_view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Business logic here
&lt;/span&gt;    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;process_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;template.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Template-Centric Design
&lt;/h3&gt;

&lt;p&gt;Django's template system is designed to be accessible to front-end developers and designers who may not be familiar with programming logic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Django templates are designer-friendly --&amp;gt;&lt;/span&gt;
{% extends 'base.html' %}
{% block content %}
    {% for item in items %}
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;{{ item.title }}&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{ item.description|truncatewords:20 }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    {% endfor %}
{% endblock %}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. URL-First Approach
&lt;/h3&gt;

&lt;p&gt;Django's URL dispatcher promotes clean, SEO-friendly URLs and makes routing explicit and maintainable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Clean, explicit URL routing
&lt;/span&gt;&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;blog/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;blog_list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;blog_list&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;blog/&amp;lt;int:pk&amp;gt;/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;blog_detail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;blog_detail&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;blog/&amp;lt;slug:slug&amp;gt;/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;blog_by_slug&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;blog_by_slug&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Python Alignment
&lt;/h3&gt;

&lt;p&gt;MVT aligns with Python's "batteries included" philosophy by providing more functionality out of the box while maintaining simplicity.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Rapid Prototyping
&lt;/h3&gt;

&lt;p&gt;MVT enables faster development cycles by reducing the number of files and concepts developers need to manage.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Choose MVC vs MVT
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choose Traditional MVC When:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Working with non-Django frameworks (Rails, Spring, ASP.NET MVC)&lt;/li&gt;
&lt;li&gt;Building complex applications where fine-grained control over request handling is needed&lt;/li&gt;
&lt;li&gt;Team is already familiar with MVC patterns&lt;/li&gt;
&lt;li&gt;Building APIs where presentation layer is minimal&lt;/li&gt;
&lt;li&gt;Working in environments where separation of controller logic is crucial&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose MVT When:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Using Django for web development&lt;/li&gt;
&lt;li&gt;Building content-heavy websites with complex templates&lt;/li&gt;
&lt;li&gt;Rapid prototyping is a priority&lt;/li&gt;
&lt;li&gt;Team includes front-end developers who need to work with templates&lt;/li&gt;
&lt;li&gt;Leveraging Django's built-in features like admin interface, ORM, and middleware&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best Practices for Both Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For MVC Applications:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Keep controllers thin
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserController&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Delegate business logic to models or services
&lt;/span&gt;        &lt;span class="n"&gt;user_service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UserService&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render_response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Fat models, thin controllers
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserModel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_with_validation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Business logic here
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;validate_email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValidationError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Invalid email&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  For MVT Applications:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Keep views focused
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;user_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UserForm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_valid&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="c1"&gt;# Delegate complex logic to model methods
&lt;/span&gt;            &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_with_profile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cleaned_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;user_detail&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pk&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UserForm&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;users/create.html&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;form&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# Use model methods for business logic
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="nd"&gt;@classmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_with_profile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Complex business logic here
&lt;/span&gt;        &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;Profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Both MVC and MVT are powerful architectural patterns with their own strengths. MVC provides a traditional, widely-understood approach that offers maximum flexibility and control. MVT, on the other hand, is optimized for rapid web development with Django, providing a more streamlined approach that reduces complexity.&lt;/p&gt;

&lt;p&gt;Django's choice of MVT reflects its principle of "batteries included" and rapid development. By handling the controller logic internally, Django allows developers to focus on what matters most: building features quickly and efficiently. The MVT pattern works exceptionally well for content-heavy websites, rapid prototyping, and teams that value convention over configuration.&lt;/p&gt;

&lt;p&gt;For Django developers, embracing the MVT pattern means using the framework's full power. For developers working with other frameworks or requiring more control, traditional MVC remains an excellent choice. Understanding both patterns helps you choose the right tool for the right job and appreciate the design decisions behind different web frameworks.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Day4 of how I created two applications with a page in a Django project</title>
      <dc:creator>Marvin Ochieng</dc:creator>
      <pubDate>Mon, 30 Jun 2025 14:35:06 +0000</pubDate>
      <link>https://dev.to/mavoochie/day4-of-how-i-created-2-applications-with-a-page-in-a-django-project-ccn</link>
      <guid>https://dev.to/mavoochie/day4-of-how-i-created-2-applications-with-a-page-in-a-django-project-ccn</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;u&gt;Creating a programming environment&lt;/u&gt;&lt;/strong&gt; &lt;br&gt;
After selecting a folder in my text editor (VS Code), I opened the terminal to run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -m venv env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to create an environment called &lt;code&gt;env&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.env/Scripts/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source env/Scripts/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;are commands used to activate the programming environment&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Installing Django&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;
I used&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install django
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;in the newly created environment to install Django&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Project Directory&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;
To start my project directory, I run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;django-admin startproject myproject
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;in the vs code terminal to generate root directory with project name, which in this case is called &lt;code&gt;myproject&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdbzkkvzryy0rra3t6gz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdbzkkvzryy0rra3t6gz.png" alt="Image description" width="480" height="195"&gt;&lt;/a&gt;&lt;br&gt;
this project is blue in color as shown in the figure above&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Project Setting Directory&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;
Inside the root directory, there is another directory called &lt;code&gt;myproject&lt;/code&gt;, just as the project name.&lt;br&gt;
This other directory contains the project-wide settings and configurations as shown in the figure below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnjq42p9pwp7niq3xpsv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnjq42p9pwp7niq3xpsv.png" alt="Image description" width="491" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;init.py&lt;/code&gt;: A file that tells Python that all files in the directory should be considered a Python package. Without this file, we cannot import files from another directory which we will be doing a lot of in Django!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;settings.py&lt;/code&gt;: Contains all the project’s settings and configurations.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;urls.py&lt;/code&gt;: The URL declarations for the project are a “table of contents” of your Django-powered site.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;asgi.py&lt;/code&gt;: allows for an optional Asynchronous Server Gateway Interface(ASGI) to be run&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wsgi.py&lt;/code&gt;: An entry point for Web Server Gateway Interface(WSGI) compatible web servers to serve your project. It helps Django serve our eventual web pages&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Applications&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;
Django projects are composed of one or more apps. Each app is a Python package that follows a certain convention. In this case I created two apps called &lt;strong&gt;app1&lt;/strong&gt; and &lt;strong&gt;app2&lt;/strong&gt; respectively&lt;br&gt;
This is how I created the applications inside an already initiated Django project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;manage.py startapp app1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for app1 and the picture bellow shows how it looks a text editor, which in this case is VS Code&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foq8p8y2jsb7wyfp3qa1z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foq8p8y2jsb7wyfp3qa1z.png" alt="Image description" width="486" height="353"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;manage.py startapp app2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for app2 and the picture below shows how it looks like in VS Code&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8fm04yp2zsivttv11ih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb8fm04yp2zsivttv11ih.png" alt="Image description" width="513" height="356"&gt;&lt;/a&gt;&lt;br&gt;
&lt;code&gt;admin.py&lt;/code&gt;: Configuration for the Django admin interface.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;apps.py&lt;/code&gt;: Configuration for the app itself.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;models.py&lt;/code&gt;: Contains the database models for the app.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tests.py&lt;/code&gt;: Contains tests for the app.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;views.py&lt;/code&gt;: Contains the request/response logic for the app.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;migrations/&lt;/code&gt;: Contains database migrations for the app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Templates&lt;/u&gt;&lt;/strong&gt;&lt;br&gt;
Templates(what users see, HTML and CSS) are typically stored in a &lt;code&gt;templates&lt;/code&gt; directory within each app or in a project-wide templates directory.&lt;br&gt;
The selected file that is blue in color is the template for the first app&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Facwzm6bnb5aeckp0b94m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Facwzm6bnb5aeckp0b94m.png" alt="Image description" width="452" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The selected file that is blue in color is the template for the second app&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9lx96szlffzgep1q5l4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9lx96szlffzgep1q5l4.png" alt="Image description" width="503" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This stracture helps organize Django Project making it easier to maintain, especially for begginers. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Day 2. Learning about Git and Git and Github</title>
      <dc:creator>Marvin Ochieng</dc:creator>
      <pubDate>Mon, 30 Jun 2025 06:39:44 +0000</pubDate>
      <link>https://dev.to/mavoochie/day-2-learning-about-git-and-git-and-github-26oo</link>
      <guid>https://dev.to/mavoochie/day-2-learning-about-git-and-git-and-github-26oo</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F286uvjwwjbjfeufwwg2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F286uvjwwjbjfeufwwg2k.png" alt="Image description" width="800" height="244"&gt;&lt;/a&gt; 1. Forking a Repository&lt;br&gt;
Go to the repo on GitHub.&lt;/p&gt;

&lt;p&gt;Click Fork (top right).&lt;/p&gt;

&lt;p&gt;Clone your fork:&lt;br&gt;
&lt;code&gt;git clone &amp;lt;your-forked-url&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Work on your computer, then push changes to your fork.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Collaborating on GitHub&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy77uarzjbv6zrs340xzu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy77uarzjbv6zrs340xzu.png" alt="Image description" width="800" height="369"&gt;&lt;/a&gt;&lt;br&gt;
Use issues to report problems or suggest ideas.&lt;/p&gt;

&lt;p&gt;Assign tasks to people.&lt;/p&gt;

&lt;p&gt;Push your code and open a pull request.&lt;/p&gt;

&lt;p&gt;Review and discuss changes with teammates.&lt;/p&gt;

&lt;p&gt;Communicate clearly in comments.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating a Pull Request&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0gxfcob798qn69mncka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0gxfcob798qn69mncka.png" alt="Image description" width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Make a new branch:&lt;br&gt;
&lt;code&gt;git checkout -b my-feature&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Make and commit your changes:&lt;br&gt;
git add .&lt;br&gt;
&lt;code&gt;git commit -m "what you changed"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Push your branch:&lt;br&gt;
&lt;code&gt;git push origin my-feature&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;On GitHub, click Compare &amp;amp; pull request.&lt;/p&gt;

&lt;p&gt;Write a title and description, then submit.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Resolving Merge Conflicts
Pull latest code:
git pull origin main&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If there are conflicts, fix them in the files.&lt;/p&gt;

&lt;p&gt;Add and commit the fixed files.&lt;/p&gt;

&lt;p&gt;Push again:&lt;br&gt;
&lt;code&gt;git push&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Code Review
Check the pull request.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Review code for quality and clarity.&lt;/p&gt;

&lt;p&gt;Leave helpful comments.&lt;/p&gt;

&lt;p&gt;Approve or request changes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Managing Issues
Open an issue with a title and details.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Label and assign it.&lt;/p&gt;

&lt;p&gt;Comment updates.&lt;/p&gt;

&lt;p&gt;Close it when done.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Basic Git Commands
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init # Start git in a folder

git clone &amp;lt;url&amp;gt; # Copy a repo

git status # Check changes

git add . # Stage changes

git commit -m "message" # Save changes

git pull # Update from remote

git push # Upload your changes

git checkout # b branch – New branch

git merge branch # Combine branches
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Pushing Changes
Update your branch:
git pull origin main&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Commit your changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "message"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Push:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push origin your-branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open or update a pull request.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to set up resources for my Django journey</title>
      <dc:creator>Marvin Ochieng</dc:creator>
      <pubDate>Mon, 30 Jun 2025 05:55:53 +0000</pubDate>
      <link>https://dev.to/mavoochie/how-to-set-up-resources-for-my-django-journey-50lk</link>
      <guid>https://dev.to/mavoochie/how-to-set-up-resources-for-my-django-journey-50lk</guid>
      <description>&lt;p&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;br&gt;
Hi developers, here are the software tools I installed to start my journey in Django.&lt;br&gt;
Below is breakdown of how I got everything working, from VS code to python and Git.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Installing Visual Studio Code&lt;/strong&gt;&lt;br&gt;
I used this link,&lt;br&gt;
&lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;https://code.visualstudio.com/&lt;/a&gt;&lt;br&gt;
to download my vs code and installed &lt;code&gt;version 3.13.3&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farrf8p4guc2pp7g3oiva.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farrf8p4guc2pp7g3oiva.png" alt="Image description" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. How to install python&lt;/strong&gt;&lt;br&gt;
I used this link,&lt;br&gt;
&lt;a href="https://www.anaconda.com/products/distribution" rel="noopener noreferrer"&gt;https://www.anaconda.com/products/distribution&lt;/a&gt;&lt;br&gt;
to download anaconda and also did the necessary procedures to &lt;code&gt;install conda 24.11.3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faby64oo1tyzz25cwitt2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faby64oo1tyzz25cwitt2.png" alt="Image description" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. How to install git&lt;/strong&gt;&lt;br&gt;
I used this link&lt;br&gt;
 &lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;https://git-scm.com/&lt;/a&gt;&lt;br&gt;
to download git and installed&lt;br&gt;
&lt;code&gt;git version 2.49.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mx4d29sv0u1h1ozjpdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mx4d29sv0u1h1ozjpdk.png" alt="Image description" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generate a new SSH key&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;ssh-keygen -t ed25519 -C "your_email@example.com"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Make Sure the Key Is Private&lt;/strong&gt;&lt;br&gt;
Run &lt;code&gt;ls -l ~/.ssh/id_ed25519&lt;/code&gt; in the command Prompt&lt;/p&gt;

&lt;p&gt;Success !&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
