<?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: Sarah Nyambura Kiiru</title>
    <description>The latest articles on DEV Community by Sarah Nyambura Kiiru (@nyambura20).</description>
    <link>https://dev.to/nyambura20</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%2F3288249%2F27f5d5a3-1449-4482-a71a-0c7dfcdfb877.png</url>
      <title>DEV Community: Sarah Nyambura Kiiru</title>
      <link>https://dev.to/nyambura20</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nyambura20"/>
    <language>en</language>
    <item>
      <title>Understanding REST APIs: A Beginner-Friendly Guide</title>
      <dc:creator>Sarah Nyambura Kiiru</dc:creator>
      <pubDate>Fri, 22 Aug 2025 03:56:58 +0000</pubDate>
      <link>https://dev.to/nyambura20/understanding-rest-apis-a-beginner-friendly-guide-5e5d</link>
      <guid>https://dev.to/nyambura20/understanding-rest-apis-a-beginner-friendly-guide-5e5d</guid>
      <description>&lt;p&gt;When building modern web applications, the &lt;strong&gt;Frontend&lt;/strong&gt; (like React) and the &lt;strong&gt;Backend&lt;/strong&gt; (like Django) need a way to talk to each other. This is where &lt;strong&gt;APIs (Application Programming Interfaces)&lt;/strong&gt; come in.  &lt;/p&gt;

&lt;p&gt;One of the most common types is the &lt;strong&gt;REST API&lt;/strong&gt; (Representational State Transfer). Let’s dive in &lt;/p&gt;




&lt;h2&gt;
  
  
  What is a REST API?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;REST API&lt;/strong&gt; is an architectural style for designing APIs that allows communication between client and server using standard HTTP methods.&lt;br&gt;&lt;br&gt;
It works on resources (like &lt;code&gt;users&lt;/code&gt;, &lt;code&gt;jobs&lt;/code&gt;, or &lt;code&gt;posts&lt;/code&gt;) and represents them using &lt;strong&gt;URLs (endpoints)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /api/users/      → fetch all users
GET /api/users/1/    → fetch a specific user with ID=1
POST /api/users/     → create a new user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  HTTP Methods vs REST API Actions
&lt;/h2&gt;

&lt;p&gt;REST APIs rely on &lt;strong&gt;HTTP methods&lt;/strong&gt; to define what action should be performed.  &lt;/p&gt;

&lt;p&gt;Here’s the mapping between &lt;strong&gt;HTTP methods&lt;/strong&gt; and their &lt;strong&gt;REST meanings&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;HTTP Method&lt;/th&gt;
&lt;th&gt;REST API Action&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GET&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Read&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /api/jobs/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Retrieve data (read-only).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;POST&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Create&lt;/td&gt;
&lt;td&gt;&lt;code&gt;POST /api/jobs/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Add new data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PUT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Update (replace)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PUT /api/jobs/1/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Update all fields of a resource.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PATCH&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Update (partial)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PATCH /api/jobs/1/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Update specific fields.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DELETE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Delete&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DELETE /api/jobs/1/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Remove a resource.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Key Difference:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTP method&lt;/strong&gt; = the protocol action (GET, POST, etc).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REST API action&lt;/strong&gt; = how that HTTP method is applied to resources in your system.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Commonly Used HTTP Status Codes
&lt;/h2&gt;

&lt;p&gt;When your client (React frontend) talks to your server (Django backend), the server responds with a &lt;strong&gt;status code&lt;/strong&gt; that tells you what happened.&lt;/p&gt;

&lt;p&gt;Here are some of the most common ones:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Status Code&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;When it’s used&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;200 OK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Success&lt;/td&gt;
&lt;td&gt;Request was successful.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;201 Created&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Success&lt;/td&gt;
&lt;td&gt;Resource was created (e.g., after POST).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;204 No Content&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Success&lt;/td&gt;
&lt;td&gt;Resource deleted successfully.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;400 Bad Request&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Client Error&lt;/td&gt;
&lt;td&gt;Request was malformed (wrong data).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;401 Unauthorized&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Client Error&lt;/td&gt;
&lt;td&gt;Authentication required or failed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;403 Forbidden&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Client Error&lt;/td&gt;
&lt;td&gt;You don’t have permission to access this resource.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;404 Not Found&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Client Error&lt;/td&gt;
&lt;td&gt;Resource doesn’t exist.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;500 Internal Server Error&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Server Error&lt;/td&gt;
&lt;td&gt;Something went wrong on the server.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  A Quick Example with Django REST Framework (DRF)
&lt;/h2&gt;

&lt;p&gt;In Django, creating a REST API often involves:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Models&lt;/strong&gt; – define your data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serializers&lt;/strong&gt; – convert models to JSON.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Views&lt;/strong&gt; – handle requests (GET, POST, etc).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URLs&lt;/strong&gt; – map endpoints.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&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;# 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;Interview&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;candidate_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;date&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;DateField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;score&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;IntegerField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# serializers.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;serializers&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;Interview&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InterviewSerializer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;serializers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelSerializer&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Meta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Interview&lt;/span&gt;
        &lt;span class="n"&gt;fields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__all__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# views.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;viewsets&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;Interview&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.serializers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;InterviewSerializer&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InterviewViewSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;viewsets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelViewSet&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;queryset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Interview&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;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;serializer_class&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;InterviewSerializer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# 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="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;rest_framework.routers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DefaultRouter&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.views&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;InterviewViewSet&lt;/span&gt;

&lt;span class="n"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DefaultRouter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;interviews&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;InterviewViewSet&lt;/span&gt;&lt;span class="p"&gt;)&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;api/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urls&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;p&gt;Now your API endpoints look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /api/interviews/     → list all interviews
POST /api/interviews/    → create an interview
GET /api/interviews/1/   → fetch specific interview
PUT /api/interviews/1/   → update interview
DELETE /api/interviews/1/ → delete interview
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;ul&gt;
&lt;li&gt;REST APIs allow &lt;strong&gt;frontend and backend to communicate&lt;/strong&gt; using HTTP.
&lt;/li&gt;
&lt;li&gt;Each &lt;strong&gt;HTTP method&lt;/strong&gt; maps to a &lt;strong&gt;REST action&lt;/strong&gt; (CRUD: Create, Read, Update, Delete).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status codes&lt;/strong&gt; help understand what happened with the request.
&lt;/li&gt;
&lt;li&gt;Django REST Framework makes building REST APIs simpler by providing &lt;strong&gt;serializers, viewsets, and routers&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this foundation, you can confidently connect your &lt;strong&gt;React frontend&lt;/strong&gt; with your &lt;strong&gt;Django backend&lt;/strong&gt; using REST APIs. 🎉&lt;/p&gt;




&lt;p&gt;💡 Pro tip: Keep this as a reference whenever you feel stuck in API development!  &lt;/p&gt;

</description>
      <category>api</category>
      <category>rest</category>
      <category>django</category>
      <category>http</category>
    </item>
    <item>
      <title>Day 3: Diving deeply into Models in Django.</title>
      <dc:creator>Sarah Nyambura Kiiru</dc:creator>
      <pubDate>Thu, 03 Jul 2025 11:20:19 +0000</pubDate>
      <link>https://dev.to/nyambura20/day-3-diving-deeply-into-models-in-django-1pc2</link>
      <guid>https://dev.to/nyambura20/day-3-diving-deeply-into-models-in-django-1pc2</guid>
      <description>&lt;h2&gt;
  
  
  Understanding Django Models in Depth with AboutMe and Skill
&lt;/h2&gt;

&lt;p&gt;If you're new to Django, models are one of the core pillars you'll work with. They allow you to &lt;strong&gt;define your database structure&lt;/strong&gt; using Python code, without writing raw SQL.&lt;/p&gt;

&lt;p&gt;In this article, we’ll break down two real-world Django models: &lt;code&gt;AboutMe&lt;/code&gt; and &lt;code&gt;Skill&lt;/code&gt;, used in a personal portfolio-style app.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a Model?
&lt;/h2&gt;

&lt;p&gt;In Django, a model is a &lt;strong&gt;Python class&lt;/strong&gt; that maps to a &lt;strong&gt;database table&lt;/strong&gt;. Each model class represents a table, and each attribute represents a column in that table.&lt;/p&gt;

&lt;h2&gt;
  
  
  about/models.py
&lt;/h2&gt;

&lt;p&gt;Let’s look at two models:&lt;/p&gt;

&lt;h3&gt;
  
  
  AboutMe Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AboutMe&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;blank&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sarah Nyambura&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;bio&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;TextField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blank&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A passionate Django learner exploring web development.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;updated_on&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&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Breakdown of what the code is about:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CharField&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stores the user's name. Max length of 100. Cannot be blank or null.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TextField&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stores a longer description (bio).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;updated_on&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DateTimeField&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Automatically updates the timestamp whenever this record is saved.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Skill Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Skill&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;title&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;blank&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Django Web Development&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;about&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;ForeignKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AboutMe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;on_delete&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="n"&gt;CASCADE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;related_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;skills&lt;/span&gt;&lt;span class="sh"&gt;"&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;title&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fxk0lx1rdndbhq7mwwkbp.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%2Fxk0lx1rdndbhq7mwwkbp.png" alt="Immm" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  what the code is about:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CharField&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Name of the skill (e.g., Python, HTML).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;about&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ForeignKey&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A &lt;strong&gt;many-to-one&lt;/strong&gt; link to the &lt;code&gt;AboutMe&lt;/code&gt; model. One person (AboutMe) can have many skills.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;on_delete=models.CASCADE&lt;/code&gt;: If the &lt;code&gt;AboutMe&lt;/code&gt; profile is deleted, all related skills will be deleted.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;related_name="skills"&lt;/code&gt;: Allows you to access skills from an &lt;code&gt;AboutMe&lt;/code&gt; instance using &lt;code&gt;.skills.all()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-World Usage in my app
&lt;/h2&gt;

&lt;p&gt;The profile says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: Sarah Nyambura&lt;/li&gt;
&lt;li&gt;Bio: A passionate Django learner&lt;/li&gt;
&lt;li&gt;Skills: Django Web Development, Python, HTML/CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is exactly how your models represent one in code and store it in the database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Models Matter
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;They are the foundation of your data structure.&lt;/li&gt;
&lt;li&gt;Django handles the database for you.&lt;/li&gt;
&lt;li&gt;You can use Python to create, update, delete, and query data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  After Creating Models
&lt;/h2&gt;

&lt;p&gt;Don't forget to make and apply migrations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py makemigrations
python manage.py migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Connecting Models with Views, Templates, and URLs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  View: Fetch Data from the Model
&lt;/h3&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%2Ffdtqmdfx1x8kw5jxv7qb.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%2Ffdtqmdfx1x8kw5jxv7qb.png" alt="desc" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  To display this data in your browser, connect the view to a URL.
&lt;/h3&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%2Fax790tibzhkay561kg3a.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%2Fax790tibzhkay561kg3a.png" alt="descrn" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;still route the main url of the project &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%2Ftqlrotb7rccn92nrxml6.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%2Ftqlrotb7rccn92nrxml6.png" alt="Immmmg" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Template: Display It with HTML
&lt;/h3&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%2Fnkd7c486nga5ffbf2x55.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%2Fnkd7c486nga5ffbf2x55.png" alt="Ion" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;this how the output is after starting the developer server&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%2Fzvos6gcmiy7i79bw1519.jpeg" 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%2Fzvos6gcmiy7i79bw1519.jpeg" alt="Imaon" width="694" height="768"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As someone who’s just getting started with Django, working with models felt intimidating at first. &lt;br&gt;
But after building these two &lt;code&gt;AboutMe&lt;/code&gt; and &lt;code&gt;Skill&lt;/code&gt; I now realize how powerful and structured Django can be. Models allow me to describe the kind of data I want to store without touching SQL at all.&lt;br&gt;
 It feels like I’m shaping my website with simple Python classes, and that’s pretty awesome.&lt;/p&gt;

</description>
      <category>django</category>
      <category>models</category>
      <category>python</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My First Hands-On with Django’s MVT (Model, View, Templates) and URLs</title>
      <dc:creator>Sarah Nyambura Kiiru</dc:creator>
      <pubDate>Tue, 01 Jul 2025 14:41:33 +0000</pubDate>
      <link>https://dev.to/nyambura20/my-first-hands-on-with-djangos-mvt-model-view-templates-and-urls-38go</link>
      <guid>https://dev.to/nyambura20/my-first-hands-on-with-djangos-mvt-model-view-templates-and-urls-38go</guid>
      <description>&lt;h2&gt;
  
  
  &lt;u&gt;&lt;strong&gt;Day 2&lt;/strong&gt;&lt;/u&gt;: Here's how I learned about Models, Views, Templates, and URLs and made them work together
&lt;/h2&gt;




&lt;h3&gt;
  
  
  To better understand about MVT I used a hotel experience example
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. The Hotel Storage Room&lt;/strong&gt; (Where All the Info Is Kept)&lt;br&gt;
When one walks in a hotel behind the scenes, there’s a storage room (like a database) where all guest details, room numbers, prices, and bookings are stored.&lt;/p&gt;

&lt;p&gt;In Django, this storage space is called the &lt;strong&gt;MODEL&lt;/strong&gt; which holds the data and knows how everything is organized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The Hotel Staff&lt;/strong&gt; (Who Prepares the Experience)&lt;br&gt;
The hotel staff are responsible for receiving a request one made like when one asks for a room they need to go to the storage room (model) , checks one's reservation, prepare the keys, maybe even add a welcome drink and then give out everything one needs.&lt;/p&gt;

&lt;p&gt;In Django, the &lt;strong&gt;VIEW&lt;/strong&gt; does this job. It takes the data from the storage (Model), organizes it, and prepares it for presentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The Hotel Room&lt;/strong&gt; (What the Guest Sees)&lt;br&gt;
Now one finally walk into their hotel room.They don’t see the booking files or internal records they just see the beautiful bed, fresh towels, and a welcome note on the table.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;TEMPLATE&lt;/strong&gt;  which is the final presentation that the guest (or website visitor) sees. It’s clean, styled, and shows exactly what’s needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The Hotel Reception Desk&lt;/strong&gt; (Directing one Where to Go)&lt;br&gt;
When one enters the hotel, they don’t go straight to their room.&lt;br&gt;
They go to the reception desk, tell them what they need, and the staff direct you to the right place.&lt;/p&gt;

&lt;p&gt;In Django, this role is played by &lt;strong&gt;URLs&lt;/strong&gt; they guide the request to the correct View, just like reception sends one to the correct floor or room. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;In simple terms&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
A guest makes a request at the reception (URL). The hotel staff (View) checks the storage (Model) for the guest’s booking.The staff prepares the room info and keys.The guest enters the room (Template) and enjoys the experience.&lt;/p&gt;

&lt;p&gt;I create a journal app to get hands-on practice&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py startapp &amp;lt;app_name&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For my &lt;code&gt;Journal app&lt;/code&gt; that I created I begun applying the MVT  Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Firstly I defined a model for the Journal entries in the &lt;code&gt;models.py&lt;/code&gt; file&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%2Fv4j6pn3v260b9kx0ws45.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%2Fv4j6pn3v260b9kx0ws45.png" alt="model" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This now is the &lt;strong&gt;MODEL&lt;/strong&gt; concept of the architecture&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The next step is to make migrations, This is going to be possible by the use of the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py makemigrations journal &lt;span class="c"&gt;# journal is the app name &lt;/span&gt;
python manage.py migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Ff2p6qejdzu3amo0gr93g.jpeg" 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%2Ff2p6qejdzu3amo0gr93g.jpeg" alt="migration" width="800" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Secondly, I fetch entries in the &lt;code&gt;journal/view.py&lt;/code&gt; file:&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%2Fh234roeb4344kvhdla1o.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%2Fh234roeb4344kvhdla1o.png" alt="view" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This above is the &lt;strong&gt;VIEW&lt;/strong&gt; concept of the architecture&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thirdly, I proceed to pass entries to the template in the &lt;code&gt;journal/templates/journal/journal_entries.html&lt;/code&gt; file&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%2Fo26dmuafn2jhqho0qi44.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%2Fo26dmuafn2jhqho0qi44.png" alt="template" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This above is the &lt;strong&gt;TEMPLATE&lt;/strong&gt; concept of the architecture&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The next step is to route the URL so that whatever has been created will be visible when one visits the browser&lt;/p&gt;

&lt;p&gt;Did this in &lt;code&gt;journal/urls.py&lt;/code&gt; file &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%2Ftkcfglxuf67utc2f0zpc.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%2Ftkcfglxuf67utc2f0zpc.png" alt="url" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly is to route the url of the main project too.&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%2Fzlbiknca1qpjwdcl6e76.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%2Fzlbiknca1qpjwdcl6e76.png" alt="main url" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This above is the &lt;strong&gt;URLs&lt;/strong&gt; concept of the architecture &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To ensure that my URL worked on the &lt;code&gt;journal&lt;/code&gt; app &lt;br&gt;
I started the developer server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py runserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I then visited this link &lt;code&gt;http://127.0.0.1:8000/journal/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This was what was displayed on my browser&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%2Fkdqvp0frsmmwfyszg1xe.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%2Fkdqvp0frsmmwfyszg1xe.png" alt="display" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I was so happy to see a display on my browser just as a guest gets finally to see the room they had reserved.&lt;/p&gt;

&lt;h3&gt;
  
  
  How MVT Architecture Works in My Journal App
&lt;/h3&gt;

&lt;p&gt;In the journal app, the &lt;code&gt;Model&lt;/code&gt; defines what each journal entry looks like. For example, each entry has: A title , Content.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;View&lt;/code&gt; handles the logic. It asks the database for all the journal entries, organizes them (like sorting by most recent), and sends them to a template.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Template&lt;/code&gt; is the HTML file that controls how the entries appear on the page. It takes the data passed from the view and displays it in a clean format using Django’s template language.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;URL&lt;/code&gt; tells Django where to send the visitor. When someone visits &lt;code&gt;/journal/&lt;/code&gt;, Django uses the &lt;code&gt;urls.py&lt;/code&gt; file to know which view function to run.&lt;/p&gt;

&lt;h3&gt;
  
  
  The flow of my &lt;code&gt;journal app&lt;/code&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;User visits /journal/&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;urls.py&lt;/code&gt; directs that request to the diary_entries view&lt;/li&gt;
&lt;li&gt;The view gets all entries from the model&lt;/li&gt;
&lt;li&gt;The view sends the data to the template&lt;/li&gt;
&lt;li&gt;The template displays the journal entries in the browser&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The same procedure I have used to do the &lt;code&gt;journal app&lt;/code&gt; you just do that to each app that you create.&lt;/p&gt;

&lt;p&gt;Hoping that my approach of the MVT will help you better understand this architecture used in Django.&lt;/p&gt;

</description>
      <category>mvt</category>
      <category>django</category>
      <category>womenintech</category>
      <category>wecoded</category>
    </item>
    <item>
      <title>Come along for 20 days of deep Django learning experience with me</title>
      <dc:creator>Sarah Nyambura Kiiru</dc:creator>
      <pubDate>Mon, 30 Jun 2025 18:19:11 +0000</pubDate>
      <link>https://dev.to/nyambura20/come-along-for-20-days-of-deep-django-learning-experience-with-me-4efa</link>
      <guid>https://dev.to/nyambura20/come-along-for-20-days-of-deep-django-learning-experience-with-me-4efa</guid>
      <description>&lt;h2&gt;
  
  
  &lt;u&gt;&lt;strong&gt;Day 1&lt;/strong&gt;&lt;/u&gt;: How I understood and practiced about the structure of Django
&lt;/h2&gt;




&lt;p&gt;The first thing is to understand what a structure is.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;A stucture&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;is the organized way in which parts of something are arranged or built.It helps one to understand where things belong and maintain one's project as it grows helping in collaboration without confusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Django project structure&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To be able to have a project structured in the Django style you run the following command to start the project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;django-admin startproject &amp;lt;project_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how the project structure will look like afterwards:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;my_project/
    manage.py 
    my_project/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;manage.py&lt;/strong&gt; - It is a command-line utility used to runserver, migrations etc&lt;br&gt;
&lt;strong&gt;my_project&lt;/strong&gt; (directory with the same name as your project) - This directory contains the project-wide settings and configurations. The files it contained are as below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;my_project/
    __init__.py
    settings.py
    urls.py
    asgi.py

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;init.py&lt;/code&gt; - This empty file tells Python to treat the directory as a package. It's necessary for importing files across different modules something you'll do a lot in Django projects.&lt;br&gt;
&lt;code&gt;settings.py&lt;/code&gt; - Contains all the configuration settings for your Django project, such as installed apps, middleware, database settings, static file paths, and more.&lt;br&gt;
&lt;code&gt;urls.py&lt;/code&gt; - Acts as the "table of contents" for your site. It defines how URLs are routed to views — basically deciding what happens when someone visits a specific page.&lt;br&gt;
&lt;code&gt;asgi.py&lt;/code&gt; - Entry point for ASGI (Asynchronous Server Gateway Interface), which allows your Django app to support asynchronous features like WebSockets and background tasks.&lt;br&gt;
&lt;code&gt;wsgi.py&lt;/code&gt; -     Entry point for WSGI (Web Server Gateway Interface), which helps traditional web servers like Gunicorn or uWSGI serve your Django project. This is what powers your site in most production environments. &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%2Fwzhy2dc9i4h5qlbz260l.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%2Fwzhy2dc9i4h5qlbz260l.png" alt="start project" width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Something to note is to ensure you have created a virtual environment in VS code so as to start the django project&lt;/strong&gt;&lt;br&gt;
You need to run the server so that to make sure the project runs(a rocket like thing will be displayed in the browser to confirm that)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py runserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&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%2Folq2gx7rsa1vb6n8ocvz.png" alt="server run" width="800" height="449"&gt;
&lt;/h2&gt;

&lt;p&gt;In order to get to practice on the django structure I created two applications for my day1 learning of django: &lt;strong&gt;a journal&lt;/strong&gt; and &lt;strong&gt;an about&lt;/strong&gt; apps &lt;br&gt;
To be able to create the apps I used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py startapp journal
python manage.py startapp about 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each app contains files and a folder which are:&lt;br&gt;
&lt;code&gt;admin.py&lt;/code&gt; - Configuration for the Django admin interface.&lt;br&gt;
&lt;code&gt;apps.py&lt;/code&gt; - Configuration for the app itself.&lt;br&gt;
&lt;code&gt;models.py&lt;/code&gt; - Contains the database models for the app.&lt;br&gt;
&lt;code&gt;tests.py&lt;/code&gt; - Contains tests for the app.&lt;br&gt;
&lt;code&gt;views.py&lt;/code&gt; - Contains the request/response logic for the app.&lt;br&gt;
&lt;code&gt;migrations/&lt;/code&gt; - Contains database migrations for the app. &lt;/p&gt;

&lt;p&gt;Then I registered the 2 apps in the &lt;code&gt;settings.py&lt;/code&gt; file &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%2F7xfi7afspvofm8xf8nee.jpeg" 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%2F7xfi7afspvofm8xf8nee.jpeg" alt="register" width="694" height="236"&gt;&lt;/a&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%2Fuw01gevw2u6je2vdvndk.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%2Fuw01gevw2u6je2vdvndk.png" alt="apps" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the 2 apps I created a folder templates for each.&lt;/p&gt;

&lt;p&gt;For the about app the template folder contained an about folder that has an &lt;code&gt;about.html&lt;/code&gt; file&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%2Fu9cfh83mtrc68o43r7wc.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%2Fu9cfh83mtrc68o43r7wc.png" alt="about" width="800" height="449"&gt;&lt;/a&gt; &lt;br&gt;
   For the journal app the template folder contained an journal folder that has an &lt;code&gt;entries.html&lt;/code&gt; file&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%2Fceaz18j61f0bjqvfcfp5.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%2Fceaz18j61f0bjqvfcfp5.png" alt="journal" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;in the settings.py had to tell Django where to find the template&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'DIRS'&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;BASE_DIR / &lt;span class="s2"&gt;"templates"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;,&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Frp3lzg2xy9j40q3w2omg.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%2Frp3lzg2xy9j40q3w2omg.png" alt="template" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then routed the URL so that the templates to be visible in the browser&lt;br&gt;
I did this by creating &lt;code&gt;urls.py&lt;/code&gt;file for each app and linking it from &lt;code&gt;view.py&lt;/code&gt; file of each app &lt;br&gt;
  &lt;strong&gt;For journal app&lt;/strong&gt; &lt;code&gt;view.py&lt;br&gt;
&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%2Fyxj9rho4siohqmk2swbg.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%2Fyxj9rho4siohqmk2swbg.png" alt="app1" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For about app&lt;/strong&gt; &lt;code&gt;view.py&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%2Flzyxuka516pm6tw4z4z8.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%2Flzyxuka516pm6tw4z4z8.png" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For journal app&lt;/strong&gt; &lt;code&gt;urls.py&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%2F2iogmwfzti39fgg32amx.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%2F2iogmwfzti39fgg32amx.png" alt="url1" width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;For about app&lt;/strong&gt; &lt;code&gt;urls.py&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%2Fxl0e0mmqsbebvkncxxom.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%2Fxl0e0mmqsbebvkncxxom.png" alt="url2" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For The whole project URL file&lt;/strong&gt; &lt;code&gt;urls.py&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%2Fukcr2jqtlx560drxuo5f.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%2Fukcr2jqtlx560drxuo5f.png" alt="wholeurl" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then started the developer server &lt;br&gt;
and used this link for me to get results &lt;br&gt;
&lt;code&gt;http://127.0.0.1:8000/journal/diary_entries/&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%2Fa8tonlsn9brjrw2yr8dv.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%2Fa8tonlsn9brjrw2yr8dv.png" alt="one" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
http://127.0.0.1:8000/about/about_me/&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%2Fb2728wpm3ilq3ta53fj8.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%2Fb2728wpm3ilq3ta53fj8.png" alt="three" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;My project about creating a diary was complete I had some challenges but got through but did not stop me from proceeding.&lt;br&gt;
This diary apps enabled me to get to understand how the Django structure works.&lt;/p&gt;

</description>
      <category>django</category>
      <category>python</category>
      <category>learning</category>
      <category>productivity</category>
    </item>
    <item>
      <title>My Journey Into Git, GitHub &amp; Version Control 💻</title>
      <dc:creator>Sarah Nyambura Kiiru</dc:creator>
      <pubDate>Thu, 26 Jun 2025 10:50:54 +0000</pubDate>
      <link>https://dev.to/nyambura20/what-i-learned-about-git-github-collaboration-305j</link>
      <guid>https://dev.to/nyambura20/what-i-learned-about-git-github-collaboration-305j</guid>
      <description>&lt;h2&gt;
  
  
  🧠 What I Learned About Version Control
&lt;/h2&gt;

&lt;p&gt;I dove into the world of &lt;strong&gt;version control&lt;/strong&gt; and learned how developers use Git and GitHub to manage and collaborate on code projects. Here’s a breakdown of the core concepts I grasped and practiced.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔁 1. Forking
&lt;/h2&gt;

&lt;p&gt;Forking lets you create &lt;strong&gt;your own copy of someone else’s repository&lt;/strong&gt; under your GitHub account. It’s useful when contributing to open-source projects.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📍 GitHub → Go to a repo → Click “Fork”&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%2Fgj7lem22gdiiao531pzu.jpeg" 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%2Fgj7lem22gdiiao531pzu.jpeg" alt="Forking" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  👯 2. Collaboration
&lt;/h2&gt;

&lt;p&gt;Git and GitHub make it easy for teams to work together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;branches&lt;/strong&gt; to separate features&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;pull requests&lt;/strong&gt; to share changes&lt;/li&gt;
&lt;li&gt;Communicate through &lt;strong&gt;issues and reviews&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&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%2Fp9lp6nnzzcea6ugkn0ih.jpeg" alt="Cloning" width="800" height="385"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  📬 3. Pull Requests (PRs)
&lt;/h2&gt;

&lt;p&gt;A pull request proposes changes from your fork or branch to the main project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# After committing your work&lt;/span&gt;
git push origin my-branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then go to GitHub → Click &lt;strong&gt;“Compare &amp;amp; Pull Request”&lt;/strong&gt; → Submit&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚔️ 4. Merge Conflicts
&lt;/h2&gt;

&lt;p&gt;When two people change the same line of code, Git can’t decide whose changes to keep. This causes a &lt;strong&gt;merge conflict&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To resolve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git shows conflict markers&lt;/li&gt;
&lt;li&gt;You manually fix the code&lt;/li&gt;
&lt;li&gt;Then commit the resolved version&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔍 5. Code Review
&lt;/h2&gt;

&lt;p&gt;After opening a PR, other contributors can review your changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leave comments&lt;/li&gt;
&lt;li&gt;Suggest improvements&lt;/li&gt;
&lt;li&gt;Approve for merging&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Code reviews improve quality and teamwork.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🐞 6. GitHub Issues
&lt;/h2&gt;

&lt;p&gt;Issues are used to track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bugs 🐛&lt;/li&gt;
&lt;li&gt;New features 🌟&lt;/li&gt;
&lt;li&gt;Tasks ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: “Add search functionality”&lt;br&gt;&lt;br&gt;
PRs can reference issues using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fixes #5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💻 7. Git Commands I Practiced
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;repo-url&amp;gt;                &lt;span class="c"&gt;# Copy repo to local machine&lt;/span&gt;
git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; new-branch          &lt;span class="c"&gt;# Create and switch to a new branch&lt;/span&gt;
git add &lt;span class="nb"&gt;.&lt;/span&gt;                           &lt;span class="c"&gt;# Stage changes&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Your message"&lt;/span&gt;        &lt;span class="c"&gt;# Save snapshot of changes&lt;/span&gt;
git push origin new-branch          &lt;span class="c"&gt;# Push changes to GitHub&lt;/span&gt;
git pull origin main                &lt;span class="c"&gt;# Sync with the main branch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⬆️ 8. Pushing Changes to GitHub
&lt;/h2&gt;

&lt;p&gt;Once I committed my changes:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Then I opened a pull request and waited for feedback!&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 Centralized vs Distributed Version Control Systems
&lt;/h2&gt;

&lt;p&gt;While learning about Git, I also explored the &lt;strong&gt;two main types of version control systems (VCS)&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  🏢 Centralized Version Control Systems (CVCS)
&lt;/h3&gt;

&lt;p&gt;In a centralized system, there is &lt;strong&gt;one central server&lt;/strong&gt; where all versions of a project are stored. Everyone connects to this server to get or submit changes.&lt;/p&gt;

&lt;h4&gt;
  
  
  Examples:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Subversion (SVN)&lt;/li&gt;
&lt;li&gt;Perforce&lt;/li&gt;
&lt;li&gt;CVS&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Pros:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Simpler to understand&lt;/li&gt;
&lt;li&gt;Easier to control access&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Cons:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Single point of failure&lt;/li&gt;
&lt;li&gt;Requires constant internet connection&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🌍 Distributed Version Control Systems (DVCS)
&lt;/h3&gt;

&lt;p&gt;In distributed systems like Git, &lt;strong&gt;every developer has a full copy of the project history&lt;/strong&gt;. Changes can be made locally and pushed later.&lt;/p&gt;

&lt;h4&gt;
  
  
  Examples:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Mercurial&lt;/li&gt;
&lt;li&gt;Bazaar&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Pros:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Work offline&lt;/li&gt;
&lt;li&gt;Better collaboration&lt;/li&gt;
&lt;li&gt;Faster operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Cons:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Slightly more complex to learn initially&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Git is a distributed version control system and that's what makes it so powerful for collaboration!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Learning Git and GitHub gave me superpowers 🦸‍♀️ to work with other developers, track my code history, and contribute to real-world projects with confidence.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The best way to learn Git is to &lt;em&gt;use&lt;/em&gt; Git.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;#git #github #versioncontrol #opensource #womenintech #productivity&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>opensource</category>
      <category>versioncontrol</category>
    </item>
    <item>
      <title>Setting Up a Python &amp; Django Dev Environment (Beginner Friendly)</title>
      <dc:creator>Sarah Nyambura Kiiru</dc:creator>
      <pubDate>Tue, 24 Jun 2025 12:47:25 +0000</pubDate>
      <link>https://dev.to/nyambura20/setting-up-a-python-django-development-environment-beginner-friendly-by-sarah-june-4nkc</link>
      <guid>https://dev.to/nyambura20/setting-up-a-python-django-development-environment-beginner-friendly-by-sarah-june-4nkc</guid>
      <description>&lt;h2&gt;
  
  
  Getting Started with Python and Django
&lt;/h2&gt;

&lt;p&gt;Getting started with Python and Django requires a solid development setup. Whether you're learning back end development or preparing to build your own Django project, this article walks you through the essential tools I installed and configured to get going, all from scratch.&lt;/p&gt;

&lt;p&gt;Before writing code, it was important to ensure everything was properly installed and ready from version control tools to editors and container platforms. Here's what I set up on my machine:&lt;/p&gt;




&lt;h2&gt;
  
  
  Tools I Installed
&lt;/h2&gt;




&lt;h3&gt;
  
  
  1. Python 3.13.3
&lt;/h3&gt;

&lt;p&gt;Django runs on Python, so the first thing I did was install the latest stable version of Python which is supposed to be 3.10+.&lt;/p&gt;

&lt;p&gt;During installation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I checked Add Python to PATH&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After installation, I confirmed it worked with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. VS Code
&lt;/h3&gt;

&lt;p&gt;I chose &lt;strong&gt;Visual Studio Code&lt;/strong&gt; because it is light, fast, and beginner-friendly.&lt;/p&gt;

&lt;p&gt;After installing VS Code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I installed the &lt;strong&gt;Python extension&lt;/strong&gt; (from Microsoft)&lt;/li&gt;
&lt;li&gt;Enabled &lt;strong&gt;code formatting&lt;/strong&gt;, &lt;strong&gt;linting&lt;/strong&gt;, and &lt;strong&gt;IntelliSense&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. Git
&lt;/h3&gt;

&lt;p&gt;Git helps manage project changes and is essential for collaboration. It's a must-have tool for any developer.&lt;/p&gt;

&lt;p&gt;To install Git on Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After setup, I checked the version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  4. Configure Git with GitHub (Using SSH)
&lt;/h3&gt;

&lt;p&gt;Instead of typing my username and password each time I push to GitHub, I configured SSH authentication. Here's how:&lt;/p&gt;

&lt;h4&gt;
  
  
  Generate SSH Key
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"your_email@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Start the SSH agent
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
ssh-add ~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Copy and Add the Key to GitHub
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;GitHub &lt;strong&gt;Settings  SSH and GPG keys  New SSH key&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Test the Connection
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-T&lt;/span&gt; git@github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If successful, GitHub will greet you by your username.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Docker (Using Moby Engine)
&lt;/h3&gt;

&lt;p&gt;To run isolated development environments, I installed Docker using the Docker-compatible &lt;code&gt;moby-engine&lt;/code&gt; and &lt;code&gt;moby-cli&lt;/code&gt; packages on my Kali Linux system.&lt;/p&gt;

&lt;p&gt;Here is what I did:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;ca-certificates curl gnupg lsb-release

curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/debian/gpg | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/docker.gpg

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [arch=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg &lt;span class="nt"&gt;--print-architecture&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian bullseye stable"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;moby-engine moby-cli &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I started Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And tested it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I got a welcome message confirming Docker works!&lt;/p&gt;

&lt;p&gt;Then I restarted the machine to apply the group changes.&lt;/p&gt;




&lt;p&gt;This setup gave me everything I needed to start building and managing Django applications efficiently. If you are just starting out with backend development, don't let the setup phase scare you just take it step-by-step.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Every expert once struggled with installations too."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Feel free to connect if you're setting up your own environment and need help, I'd be happy to share more.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;#python #django #git #github #vscode #docker #webdevelopment #womenintech&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>django</category>
      <category>git</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
