<?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: Malicha Galma</title>
    <description>The latest articles on DEV Community by Malicha Galma (@malicha_galma_1deb33044b2).</description>
    <link>https://dev.to/malicha_galma_1deb33044b2</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%2F3289745%2F135ada4e-52b6-4d8e-b20d-d8b73d27f55a.png</url>
      <title>DEV Community: Malicha Galma</title>
      <link>https://dev.to/malicha_galma_1deb33044b2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/malicha_galma_1deb33044b2"/>
    <language>en</language>
    <item>
      <title>Django Models: The Backbone of Your Database</title>
      <dc:creator>Malicha Galma</dc:creator>
      <pubDate>Wed, 02 Jul 2025 19:16:15 +0000</pubDate>
      <link>https://dev.to/malicha_galma_1deb33044b2/django-models-the-backbone-of-your-database-23k5</link>
      <guid>https://dev.to/malicha_galma_1deb33044b2/django-models-the-backbone-of-your-database-23k5</guid>
      <description>&lt;p&gt;In Django’s MVT architecture, the Model is responsible for handling everything related to the database. It defines how data is structured, stored, and accessed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Is a Model?&lt;/strong&gt;&lt;br&gt;
A Model is a Python class that inherits from &lt;code&gt;django.db.models.Model&lt;/code&gt;. Each model maps to a database table, and each attribute in the class represents a column in that table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defining a Simple Model&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python
from django.db import models
class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.CharField(max_length=100)
    date_created = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.title
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;CharField&lt;/strong&gt;– for short text like titles or names&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TextField&lt;/strong&gt;– for longer content&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DateTimeField&lt;/strong&gt;– stores the timestamp when the object is created&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Making Migrations&lt;/strong&gt;&lt;br&gt;
After defining the model:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Performing CRUD operations&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Create .&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python
Post.objects.create(
    title="Hello", content="My first post", author="admin"
)

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Read&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python
Post.objects.all()
Post.objects.get(id=1)
Post.objects.filter(author="admin")

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python
post = Post.objects.get(id=1)
post.title = "Updated Title"
post.save()

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Delete&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python
post = Post.objects.get(id=1)
post.delete()

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Model Relationships.&lt;/strong&gt;&lt;br&gt;
To create relationships between tables, Django provides:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python
class Category(models.Model):
    name = models.CharField(max_length=100)

class Post(models.Model):
    title = models.CharField(max_length=200)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

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

&lt;/div&gt;



&lt;p&gt;This sets up a one-to-many relationship where each post belongs to one category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Registering Models in Admin.&lt;/strong&gt;&lt;br&gt;
To display your model in the admin panel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python
from django.contrib import admin
from .models import Post

admin.site.register(Post)

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

&lt;/div&gt;



&lt;p&gt;Now the model appears in the admin dashboard at &lt;a href="http://127.0.0.1:8000/admin." rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Conclusion.&lt;/strong&gt;&lt;br&gt;
Django Models make it simple to define, structure, and work with your database using just Python code. Whether you're building a blog, an inventory system, or a social network, models are the core of your data layer. Once you understand how to create and interact with them, you unlock one of Django’s most powerful features.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Django Architecture:Models, Views and Templates</title>
      <dc:creator>Malicha Galma</dc:creator>
      <pubDate>Wed, 02 Jul 2025 18:32:42 +0000</pubDate>
      <link>https://dev.to/malicha_galma_1deb33044b2/django-architecturemodels-views-and-templates-4nik</link>
      <guid>https://dev.to/malicha_galma_1deb33044b2/django-architecturemodels-views-and-templates-4nik</guid>
      <description>&lt;p&gt;A beginner-friendly explanation of Django’s core design pattern&lt;br&gt;
Django is a high-level Python framework that helps developers build secure and maintainable websites quickly. One of the most important concepts that powers Django is the MVT architecture, which stands for:&lt;br&gt;
&lt;strong&gt;Model&lt;/strong&gt;– represents the data structure&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View&lt;/strong&gt;– contains the logic&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Template&lt;/strong&gt;– handles presentation&lt;/p&gt;

&lt;p&gt;Although it's inspired by the MVC (Model-View-Controller) pattern, Django takes a slightly different approach by introducing Templates instead of Controllers. That said, Django doesn’t force you to stick to a particular architecture — you can organize your app the way that works best for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Models .&lt;/strong&gt;&lt;br&gt;
In Django, a model defines the structure of your database tables. Each model is a Python class that inherits from models.Model, and each attribute maps to a database field.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python&lt;br&gt;
class Users(models.Model):&lt;br&gt;
    full_name = models.CharField(max_length=200)&lt;br&gt;
    bio = models.TextField()&lt;br&gt;
    def __str__(self):&lt;br&gt;
        return self.full_name&lt;br&gt;
&lt;/code&gt;The above example will generate a Users table with full_name and bio as its columns.&lt;/p&gt;

&lt;p&gt;Models contain all the necessary fields and behavior for your data. They're the layer that handles all your database interactions — from creation to querying.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://docs.djangoproject.com/en/5.2/topics/db/models/" rel="noopener noreferrer"&gt;https://docs.djangoproject.com/en/5.2/topics/db/models/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Views .&lt;/strong&gt;&lt;br&gt;
A view is where your logic lives. It’s a function or class that processes a request and returns a response. It may fetch data from the model and pass it to the template, or return a redirect or even JSON.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python&lt;br&gt;
Copy&lt;br&gt;
Edit&lt;br&gt;
def users_list(request):&lt;br&gt;
    users = Users.objects.all()&lt;br&gt;
    return render(request, 'users/users_list.html', {'users': users})&lt;br&gt;
&lt;/code&gt;The above function gets all Users from the database and passes them to a template named &lt;a href="https://dev.tourl"&gt;users_list.html&lt;/a&gt;. Views are usually stored in a file called &lt;code&gt;views.py&lt;/code&gt; inside your app.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://docs.djangoproject.com/en/5.2/topics/http/views/" rel="noopener noreferrer"&gt;https://docs.djangoproject.com/en/5.2/topics/http/views/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Templates&lt;/strong&gt; &lt;br&gt;
Templates are HTML files that allow you to display dynamic content using Django’s templating language. They include special syntax to loop over data, show variables, or include conditional statements.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;My Users&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;All Users&amp;lt;/h1&amp;gt;
    {% for user in users %}
        &amp;lt;div&amp;gt;
            &amp;lt;h2&amp;gt;{{ user.full_name }}&amp;lt;/h2&amp;gt;
            &amp;lt;p&amp;gt;{{ user.bio }}&amp;lt;/p&amp;gt;
        &amp;lt;/div&amp;gt;
    {% empty %}
        &amp;lt;p&amp;gt;No users available.&amp;lt;/p&amp;gt;
    {% endfor %}
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;In this example, the template loops through the list of users and renders each one. If the list is empty, it shows a fallback message.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;URL configuration.&lt;/strong&gt;&lt;br&gt;
To make your view accessible via a browser, you need to connect it to a URL pattern.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python&lt;br&gt;
from django.urls import path&lt;br&gt;
from . import views&lt;br&gt;
urlpatterns = [&lt;br&gt;
    path('', views.users_list, name='users_list'),&lt;br&gt;
]&lt;br&gt;
&lt;/code&gt;This connects the root URL (/) of your app to the users_list view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How MVT works.&lt;/strong&gt;&lt;br&gt;
Here’s a quick rundown of how Django’s MVT pattern flows:&lt;/p&gt;

&lt;p&gt;A request comes from the browser&lt;/p&gt;

&lt;p&gt;&lt;code&gt;urls.py&lt;/code&gt;sends the request to the right view&lt;/p&gt;

&lt;p&gt;The view fetches data from the model&lt;/p&gt;

&lt;p&gt;The data is passed to a template&lt;/p&gt;

&lt;p&gt;The template renders a response as HTML&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finally&lt;/strong&gt;&lt;br&gt;
Django’s MVT architecture breaks your app into three key parts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model:&lt;/strong&gt;Manages the structure and interaction with the database&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View:&lt;/strong&gt;Handles business logic and request processing&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Template:&lt;/strong&gt;Takes care of rendering the UI&lt;/p&gt;

&lt;p&gt;This separation makes your code cleaner, easier to manage, and scalable as your project grows.&lt;/p&gt;

&lt;p&gt;Want to take this further? I’d be happy to write a follow-up on Django Forms&lt;/p&gt;

</description>
      <category>django</category>
      <category>python</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Building a Django Project With Two Apps</title>
      <dc:creator>Malicha Galma</dc:creator>
      <pubDate>Mon, 30 Jun 2025 19:05:40 +0000</pubDate>
      <link>https://dev.to/malicha_galma_1deb33044b2/building-a-django-project-with-two-apps-399n</link>
      <guid>https://dev.to/malicha_galma_1deb33044b2/building-a-django-project-with-two-apps-399n</guid>
      <description>&lt;h1&gt;
  
  
  How I Built a Django Project with Two Apps and Templates Using Git Bash &amp;amp; VS Code
&lt;/h1&gt;

&lt;p&gt;Hey,&lt;br&gt;
In this post, I’ll explain how I created a Django project named &lt;code&gt;django_project&lt;/code&gt; using &lt;strong&gt;Git Bash&lt;/strong&gt; and &lt;strong&gt;VS Code&lt;/strong&gt;, and added &lt;strong&gt;two apps&lt;/strong&gt; with views and templates for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Home
&lt;/li&gt;
&lt;li&gt;About
&lt;/li&gt;
&lt;li&gt;Contact
&lt;/li&gt;
&lt;li&gt;Services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything is explained step-by-step to help beginners follow along easily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Open Git Bash and Create a Virtual Environment&lt;/strong&gt;&lt;br&gt;
To keep all the Python packages for this project separate, I created a &lt;strong&gt;virtual environment&lt;/strong&gt; in Git Bash:&lt;br&gt;
&lt;code&gt;bash&lt;br&gt;
python -m venv env&lt;/code&gt;&lt;br&gt;
Then I activated it:&lt;br&gt;
&lt;code&gt;bash&lt;br&gt;
source env/Scripts/activate&lt;/code&gt;&lt;br&gt;
On Windows, this uses the Scripts folder inside env to activate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step2:Install Django&lt;/strong&gt;&lt;br&gt;
Once the virtual environment was activated, I installed Django:&lt;br&gt;
&lt;code&gt;bash&lt;br&gt;
pip install django&lt;/code&gt;&lt;br&gt;
This made the django-admin command available.&lt;br&gt;
&lt;strong&gt;Step 3:Start a Django Project.&lt;/strong&gt;&lt;br&gt;
Next I created the project and named it django_project:&lt;br&gt;
&lt;code&gt;bash&lt;br&gt;
django-admin startproject django_project&lt;br&gt;
cd django_project&lt;br&gt;
&lt;/code&gt;This created a folder called django_project with important files like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;manage.py&lt;/code&gt;– for running commands&lt;/p&gt;

&lt;p&gt;&lt;code&gt;settings.py&lt;/code&gt;– to configure your project&lt;/p&gt;

&lt;p&gt;&lt;code&gt;urls.py&lt;/code&gt; – for connecting routes&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wsgi.py&lt;/code&gt; and &lt;code&gt;asgi.py&lt;/code&gt; – for deployment (can ignore for now)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:Create Two Apps&lt;/strong&gt;&lt;br&gt;
In Django, apps are like separate components or features. I created two:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bash&lt;br&gt;
python manage.py startapp app1&lt;br&gt;
python manage.py startapp app2&lt;br&gt;
&lt;/code&gt;app1 will handle the Home and About pages&lt;/p&gt;

&lt;p&gt;app2 will handle the Contact and Services pages&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:Open the Project in VS Code.&lt;/strong&gt;&lt;br&gt;
Still inside Git Bash, I opened the project in VS Code with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bash&lt;br&gt;
code .&lt;br&gt;
&lt;/code&gt;This opened the full project directory in Visual Studio Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6:Register the Apps in settings.py .&lt;/strong&gt;&lt;br&gt;
In django_project/settings.py, I added both apps under INSTALLED_APPS so Django can recognize them:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python&lt;br&gt;
INSTALLED_APPS = [&lt;br&gt;
    ...&lt;br&gt;
    'app1',&lt;br&gt;
    'app2',&lt;br&gt;
]&lt;br&gt;
&lt;/code&gt;&lt;strong&gt;Step 7:Configure the Main urls.py File.&lt;/strong&gt;&lt;br&gt;
In django_project/urls.py, I imported include and connected both apps to the project URLs:&lt;br&gt;
&lt;code&gt;python&lt;br&gt;
from django.contrib import admin&lt;br&gt;
from django.urls import path, include&lt;br&gt;
urlpatterns = [&lt;br&gt;
    path('admin/', admin.site.urls),&lt;br&gt;
    path('', include('app1.urls')),&lt;br&gt;
    path('app2/', include('app2.urls')),&lt;br&gt;
]&lt;br&gt;
&lt;/code&gt;This makes sure that URLs from both apps are recognized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8:Create Views in Both Apps&lt;/strong&gt;&lt;br&gt;
In app1/views.py:&lt;br&gt;
&lt;code&gt;python&lt;br&gt;
from django.shortcuts import render&lt;br&gt;
def home(request):&lt;br&gt;
    return render(request, 'home.html')&lt;br&gt;
def about(request):&lt;br&gt;
    return render(request, 'about.html')&lt;br&gt;
&lt;/code&gt;In app2/views.py:&lt;br&gt;
&lt;code&gt;python&lt;br&gt;
from django.shortcuts import render&lt;br&gt;
def contact(request):&lt;br&gt;
    return render(request, 'contact.html')&lt;br&gt;
def services(request):&lt;br&gt;
    return render(request, 'services.html')&lt;/code&gt;&lt;br&gt;
Each view will load a corresponding HTML page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9:Create urls.py in Both Apps.&lt;/strong&gt;&lt;br&gt;
I created a file named urls.py in each app.&lt;br&gt;
app1/urls.py:&lt;br&gt;
&lt;code&gt;python&lt;br&gt;
from django.urls import path&lt;br&gt;
from . import views&lt;br&gt;
urlpatterns = [&lt;br&gt;
    path('', views.home, name='home'),&lt;br&gt;
    path('about/', views.about, name='about'),&lt;br&gt;
]&lt;/code&gt;&lt;br&gt;
app2/urls.py:&lt;br&gt;
&lt;code&gt;python&lt;br&gt;
from django.urls import path&lt;br&gt;
from . import views&lt;br&gt;
urlpatterns = [&lt;br&gt;
    path('contact/', views.contact, name='contact'),&lt;br&gt;
    path('services/', views.services, name='services'),&lt;br&gt;
]&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Step 10:Add HTML Templates.&lt;/strong&gt;&lt;br&gt;
At the root level (same level as manage.py), I created a folder called templates, and added four files:&lt;br&gt;
&lt;code&gt;arduino&lt;br&gt;
templates/&lt;br&gt;
├── home.html&lt;br&gt;
├── about.html&lt;br&gt;
├── contact.html&lt;br&gt;
└── services.html&lt;/code&gt;&lt;br&gt;
Each file contains basic HTML. Here's an example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;home.html:&lt;br&gt;
html&lt;br&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br&gt;
&amp;lt;html&amp;gt;&lt;br&gt;
&amp;lt;head&amp;gt;&lt;br&gt;
    &amp;lt;title&amp;gt;Home&amp;lt;/title&amp;gt;&lt;br&gt;
&amp;lt;/head&amp;gt;&lt;br&gt;
&amp;lt;body&amp;gt;&lt;br&gt;
    &amp;lt;h1&amp;gt;Welcome to the Home Page&amp;lt;/h1&amp;gt;&lt;br&gt;
&amp;lt;/body&amp;gt;&lt;br&gt;
&amp;lt;/html&amp;gt;&lt;br&gt;
&lt;/code&gt;Repeat similar HTML for about.html, contact.html, and services.html.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11:Configure Template Path in settings.py&lt;/strong&gt;&lt;br&gt;
In settings.py, I told Django where to find the templates:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python&lt;br&gt;
import os&lt;br&gt;
TEMPLATES = [&lt;br&gt;
    {&lt;br&gt;
        ...&lt;br&gt;
        'DIRS': [os.path.join(BASE_DIR, 'templates')],&lt;br&gt;
        ...&lt;br&gt;
    },&lt;br&gt;
]&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Step 12:Run the Server and Test&lt;/strong&gt;&lt;br&gt;
I went back to Git Bash and ran:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bash&lt;br&gt;
python manage.py runserver&lt;br&gt;
&lt;/code&gt;Then I opened the following URLs in my browser:&lt;br&gt;
`&lt;br&gt;
&lt;a href="http://127.0.0.1:8000/" rel="noopener noreferrer"&gt;http://127.0.0.1:8000/&lt;/a&gt; → Home Page&lt;/p&gt;

&lt;p&gt;&lt;a href="http://127.0.0.1:8000/about/" rel="noopener noreferrer"&gt;http://127.0.0.1:8000/about/&lt;/a&gt; → About Page&lt;/p&gt;

&lt;p&gt;&lt;a href="http://127.0.0.1:8000/app2/contact/" rel="noopener noreferrer"&gt;http://127.0.0.1:8000/app2/contact/&lt;/a&gt; → Contact Page&lt;/p&gt;

&lt;p&gt;&lt;a href="http://127.0.0.1:8000/app2/services/" rel="noopener noreferrer"&gt;http://127.0.0.1:8000/app2/services/&lt;/a&gt; → Services Page&lt;br&gt;
`&lt;br&gt;
All templates displayed successfully!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion.&lt;/strong&gt;&lt;br&gt;
That’s how I built a Django project using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git Bash for environment setup and command line&lt;/li&gt;
&lt;li&gt;VS Code for writing and exploring code&lt;/li&gt;
&lt;li&gt;Django apps for modular views&lt;/li&gt;
&lt;li&gt;Templates to render dynamic web pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup is great for beginners, and you can now build on it with forms, authentication, databases, or styling with CSS.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>django</category>
      <category>github</category>
    </item>
    <item>
      <title>Git and Github Explained</title>
      <dc:creator>Malicha Galma</dc:creator>
      <pubDate>Thu, 26 Jun 2025 13:24:56 +0000</pubDate>
      <link>https://dev.to/malicha_galma_1deb33044b2/git-and-github-explained-4nj</link>
      <guid>https://dev.to/malicha_galma_1deb33044b2/git-and-github-explained-4nj</guid>
      <description>&lt;p&gt;Hey there so you’ve been hearing about Git and GitHub...&lt;br&gt;
Welcome to the world of &lt;em&gt;version control&lt;/em&gt; — where collaboration meets backup, and coding becomes way less scary.&lt;/p&gt;

&lt;p&gt;This isn’t your average tutorial. This is you learning Git the smart, beginner-friendly, not-so-boring way.&lt;/p&gt;

&lt;h2&gt;
  
  
  So... What Even Is Version Control?
&lt;/h2&gt;

&lt;p&gt;Imagine writing an essay, then accidentally deleting half of it. Now imagine having a magic “undo” button — not just for the last change, but for every single change ever made. That’s &lt;em&gt;version control&lt;/em&gt;.&lt;br&gt;
It helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track changes to your code over time&lt;/li&gt;
&lt;li&gt;Work in teams without fighting over one file&lt;/li&gt;
&lt;li&gt;Go back in time when you mess up (you will)&lt;/li&gt;
&lt;li&gt;Collaborate without chaos
The tool we use for that? &lt;em&gt;Git. And where we host our Git work? **GitHub&lt;/em&gt;.
##Git Basics
Let’s not memorize commands — let’s &lt;em&gt;understand what they do&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;git init&lt;/td&gt;
&lt;td&gt;"I'm starting a project"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git clone &lt;/td&gt;
&lt;td&gt;"Copy this repo to my laptop"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git status&lt;/td&gt;
&lt;td&gt;"What’s the situation with my files?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git add &lt;/td&gt;
&lt;td&gt;"I want to include this in the next save"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git commit -m "msg"&lt;/td&gt;
&lt;td&gt;"Save this version with a message"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git push&lt;/td&gt;
&lt;td&gt;"Upload my changes to GitHub"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git pull&lt;/td&gt;
&lt;td&gt;"Download latest changes from GitHub"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git merge&lt;/td&gt;
&lt;td&gt;"Combine this branch with another"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Forking
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Forking&lt;/em&gt; is just a fancy way of saying:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hey, I want to make my own copy of this project so I can mess with it.”&lt;br&gt;
It’s how you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contribute to open source&lt;/li&gt;
&lt;li&gt;Experiment without wrecking the original&lt;/li&gt;
&lt;li&gt;Start customizing someone else’s code
Go to a GitHub repo → Click &lt;em&gt;Fork&lt;/em&gt; → It’s now yours. Remix it like it’s your favorite song&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Collaboration
&lt;/h2&gt;

&lt;p&gt;**With Git and GitHub, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create branches to work on features&lt;/li&gt;
&lt;li&gt;Push your changes&lt;/li&gt;
&lt;li&gt;Pull others’ updates&lt;/li&gt;
&lt;li&gt;Review and merge work as a team
Teamwork becomes less “he touched my code” and more “let’s build something amazing together”.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pull Requests
&lt;/h2&gt;

&lt;p&gt;A &lt;em&gt;Pull Request (PR)&lt;/em&gt; is like submitting an assignment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You fork → clone → make changes.&lt;/li&gt;
&lt;li&gt;You push your changes.&lt;/li&gt;
&lt;li&gt;You open a PR and say: "Hi maintainer, here’s what I changed and why."&lt;/li&gt;
&lt;li&gt;They review it. You fix stuff. They merge it. You celebrate
A PR isn’t just a request — it’s a conversation about code.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Merge Conflicts
&lt;/h2&gt;

&lt;p&gt;**&lt;em&gt;Merge conflicts&lt;/em&gt; happen when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You and someone else edit the same line in the same file.
Git freaks out and marks the conflict like this:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;bash&lt;br&gt;
HEAD&lt;br&gt;
Your changes&lt;br&gt;
Other person's changes&lt;br&gt;
 other-branch&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  **Code Reviews
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
Pull Requests usually come with &lt;em&gt;code reviews&lt;/em&gt;, which are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A chance to catch bugs before they grow up&lt;/li&gt;
&lt;li&gt;A way to learn cleaner, smarter code&lt;/li&gt;
&lt;li&gt;A form of teamwork (not judgement!)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tip: Ask questions. Be kind. No one writes perfect code. Not even senior devs. &lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Issues
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;GitHub Issues&lt;/em&gt; are like a to-do list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Report bugs &lt;/li&gt;
&lt;li&gt;Request features &lt;/li&gt;
&lt;li&gt;Ask questions &lt;/li&gt;
&lt;li&gt;Organize tasks &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can label them, assign them, and even link them to pull requests. Organized code = happy devs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pushing Changes to GitHub
&lt;/h2&gt;

&lt;p&gt;Once you’ve made some edits locally:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bash&lt;br&gt;
git add .&lt;br&gt;
git commit -m "Added something amazing"&lt;br&gt;
git push origin your-branch&lt;/code&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>beginners</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Basic Dev Environment Setup for Beginners Using WSL on Windows</title>
      <dc:creator>Malicha Galma</dc:creator>
      <pubDate>Tue, 24 Jun 2025 21:18:44 +0000</pubDate>
      <link>https://dev.to/malicha_galma_1deb33044b2/basic-dev-environment-setup-for-beginners-using-wsl-on-windows-21ab</link>
      <guid>https://dev.to/malicha_galma_1deb33044b2/basic-dev-environment-setup-for-beginners-using-wsl-on-windows-21ab</guid>
      <description>&lt;p&gt;This is a basic checklist I followed to set up my developer environment on Windows using WSL and connect Git to GitHub using SSH. It's beginner-friendly and includes everything I needed to get started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.Git&lt;/strong&gt;&lt;br&gt;
I installed Git inside Ubuntu (WSL):&lt;br&gt;
&lt;code&gt;sudo apt update&lt;br&gt;
sudo apt install git -y&lt;/code&gt;&lt;br&gt;
Then I set my Git identity:&lt;br&gt;
&lt;code&gt;git config --global user.name "your-username"&lt;br&gt;
git config --global user.email "your-email@example.com"&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;2.Python (Version 3.10+)&lt;/strong&gt;&lt;br&gt;
To check if Python is installed:&lt;br&gt;
&lt;code&gt;python3 --version&lt;br&gt;
&lt;/code&gt;If not, I installed it with:&lt;br&gt;
&lt;code&gt;sudo apt install python3 python3-pip -y&lt;br&gt;
&lt;/code&gt;&lt;strong&gt;3.Text Editor: VS Code&lt;/strong&gt;&lt;br&gt;
I used Visual Studio Code as my main editor.&lt;br&gt;
I installed the Remote - WSL extension to open Ubuntu files directly in VS Code.&lt;br&gt;
 &lt;strong&gt;4.WSL (For Windows Users)&lt;/strong&gt;&lt;br&gt;
I enabled WSL by running this in PowerShell (as administrator):&lt;br&gt;
&lt;code&gt;wsl --install&lt;br&gt;
&lt;/code&gt;After restarting, I chose Ubuntu and created a Linux username.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.Docker&lt;/strong&gt;&lt;br&gt;
I installed Docker Desktop from:&lt;/p&gt;

&lt;p&gt;[]&lt;a href="https://dev.tourl"&gt;(https://www.docker.com/products/docker-desktop)&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
During setup, I enabled the WSL 2 backend in Docker settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6.GitHub SSH Setup&lt;/strong&gt;&lt;br&gt;
I created an SSH key in Ubuntu:&lt;br&gt;
&lt;code&gt;ssh-keygen -t ed25519 -C "your-email@example.com"&lt;/code&gt;&lt;br&gt;
Then added it to the SSH agent:&lt;br&gt;
&lt;code&gt;eval "$(ssh-agent -s)"&lt;br&gt;
ssh-add ~/.ssh/id_ed25519&lt;/code&gt;&lt;br&gt;
To copy the public key:&lt;br&gt;
&lt;code&gt;cat ~/.ssh/id_ed25519.pub&lt;/code&gt;&lt;br&gt;
I pasted it into GitHub under:&lt;br&gt;
Settings → SSH and GPG Keys → New SSH key&lt;/p&gt;

&lt;p&gt;To test the connection:&lt;br&gt;
&lt;code&gt;ssh -T git@github.com&lt;/code&gt;&lt;br&gt;
And got:&lt;/p&gt;

&lt;p&gt;Hi your-username! You've successfully authenticated...&lt;/p&gt;

&lt;p&gt;Now my dev environment is ready. I can write Python code, use GitHub securely with SSH, run Docker containers, and work entirely inside Ubuntu using VS Code.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>HOW I SET UP GIT AND GITHUB WITH SSH ON WSL</title>
      <dc:creator>Malicha Galma</dc:creator>
      <pubDate>Tue, 24 Jun 2025 19:00:57 +0000</pubDate>
      <link>https://dev.to/malicha_galma_1deb33044b2/how-i-set-up-git-and-github-with-ssh-on-wsl-508a</link>
      <guid>https://dev.to/malicha_galma_1deb33044b2/how-i-set-up-git-and-github-with-ssh-on-wsl-508a</guid>
      <description>&lt;p&gt;This is how I configured Git and connected it to GitHub using SSH:&lt;br&gt;
1.I installed git&lt;br&gt;
2.Set my git username and email&lt;br&gt;
3.I generated an SSH key-to securely connect to github(ssh-keygen -t ed25519 -C "&lt;a href="mailto:galmalicha@gmail.com"&gt;galmalicha@gmail.com&lt;/a&gt;")&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Added SSH key to Agent(eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519)
5.I then connected it to Github
6.Tested SSH connection(ssh -T &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;)-that's how i got Git and Github working with SSH.
This was my first time doing this setup, and now I can use Git and GitHub with SSH inside Ubuntu on Windows.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>ubuntu</category>
      <category>howto</category>
    </item>
  </channel>
</rss>
