From 7dd314b08cdbd7a907cdb54c02fa443876082c40 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 27 Mar 2023 20:48:27 +0300 Subject: [PATCH 1/7] Created `Project` model --- FOSSDB_web/apps/fossdb/forms.py | 9 +++++++++ FOSSDB_web/apps/fossdb/models.py | 14 +++++++++++++- FOSSDB_web/apps/fossdb/urls.py | 7 +++++++ FOSSDB_web/apps/fossdb/views.py | 26 ++++++++++++++++++++++++-- FOSSDB_web/settings.py | 1 + FOSSDB_web/urls.py | 8 +++++++- 6 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 FOSSDB_web/apps/fossdb/forms.py create mode 100644 FOSSDB_web/apps/fossdb/urls.py diff --git a/FOSSDB_web/apps/fossdb/forms.py b/FOSSDB_web/apps/fossdb/forms.py new file mode 100644 index 0000000..9603689 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/forms.py @@ -0,0 +1,9 @@ +from django import forms + +from .models import Project + + +class ProjectForm(forms.ModelForm): + class Meta: + model = Project + fields = ["title", "description"] diff --git a/FOSSDB_web/apps/fossdb/models.py b/FOSSDB_web/apps/fossdb/models.py index 71a8362..e61e920 100644 --- a/FOSSDB_web/apps/fossdb/models.py +++ b/FOSSDB_web/apps/fossdb/models.py @@ -1,3 +1,15 @@ +from django.contrib.auth.models import User from django.db import models -# Create your models here. + +class Project(models.Model): + author = models.ForeignKey(User, on_delete=models.CASCADE) + title = models.CharField(max_length=255) + description = models.TextField() + create_date = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return self.repo_name + + def get_absolute_url(self): + return f"/projects/{self.id}" diff --git a/FOSSDB_web/apps/fossdb/urls.py b/FOSSDB_web/apps/fossdb/urls.py new file mode 100644 index 0000000..2d9cdc0 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +from . import views + +urlpatterns = [ + path("", views.index, name="index") +] diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index 91ea44a..c84bc6a 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -1,3 +1,25 @@ -from django.shortcuts import render +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import redirect, render -# Create your views here. +from .forms import ProjectForm +from .models import Project + + +def index(request): + projects = Project.objects.all() + return render(request, "fossdb/index.html", {"title": "FOSSDB", "projects": projects}) + + +@login_required(login_url="account/login/") +@permission_required("fossdb.add_post)", login_url="account/login/", raise_exception=True) +def create_project(request): + if request.method == "POST": + project = ProjectForm(request.POST) + if project.is_valid(): + post = project.save(commit=False) + post.author = request.user + post.save() + return redirect("") + else: + project = ProjectForm() + return render(request, "main/create_project.html", {"title": "Add project", "form": project}) diff --git a/FOSSDB_web/settings.py b/FOSSDB_web/settings.py index 34fb5ca..ba3d2d0 100644 --- a/FOSSDB_web/settings.py +++ b/FOSSDB_web/settings.py @@ -37,6 +37,7 @@ ALLOWED_HOSTS = config["ALLOWED_HOSTS"] # Application definition INSTALLED_APPS = [ + "fossdb", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", diff --git a/FOSSDB_web/urls.py b/FOSSDB_web/urls.py index 3d97689..b4a15ab 100644 --- a/FOSSDB_web/urls.py +++ b/FOSSDB_web/urls.py @@ -13,9 +13,15 @@ Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path("blog/", include("blog.urls")) """ +from django.conf import settings +from django.conf.urls.static import static from django.contrib import admin -from django.urls import path +from django.urls import include, path urlpatterns = [ + path("", include("fossdb.urls")), path("admin/", admin.site.urls), + ] + +urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) From 9959ec5b164f7e4ebceec7cc30eab124ada7be85 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 27 Mar 2023 20:48:38 +0300 Subject: [PATCH 2/7] Created `layout.html` --- templates/layout.html | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 templates/layout.html diff --git a/templates/layout.html b/templates/layout.html new file mode 100644 index 0000000..08fe90d --- /dev/null +++ b/templates/layout.html @@ -0,0 +1,15 @@ +{% load static %} + + + + + + + {% block title %}{% endblock %} + + {% block meta %}{% endblock %} + + + {% block content %}{% endblock %} + + From 30dc13adcc237f031d1d47195fe90593c6933f23 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 27 Mar 2023 20:48:56 +0300 Subject: [PATCH 3/7] Created homepage --- templates/fossdb/index.html | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 templates/fossdb/index.html diff --git a/templates/fossdb/index.html b/templates/fossdb/index.html new file mode 100644 index 0000000..c7843d8 --- /dev/null +++ b/templates/fossdb/index.html @@ -0,0 +1,13 @@ +{% extends "layout.html" %} +{% load static %} +{% block title %}{{ title }}{% endblock %} +{% block meta %}{% endblock %} +{% block content %} + {% for project in projects %} + @{{ project.author.username }} +
{{ project.title }}
+

{{ project.description }}

+ {% empty %} +

No projects yet (

+ {% endfor %} +{% endblock %} From 67cc48e8224478adb73b16d6b8dd546293557712 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 27 Mar 2023 20:49:02 +0300 Subject: [PATCH 4/7] Fix typo --- FOSSDB_web/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FOSSDB_web/settings.py b/FOSSDB_web/settings.py index ba3d2d0..cc0962b 100644 --- a/FOSSDB_web/settings.py +++ b/FOSSDB_web/settings.py @@ -87,7 +87,7 @@ DATABASES = { "USER": config["DATABASE"]["USER"], "PASSWORD": config["DATABASE"]["PASSWORD"], "HOST": config["DATABASE"]["HOST"], - "PORT": config["DATABASE"]["PORT"] + "PORT": config["DATABASE"]["PORT"], } } From 02680dbdadf3d7503b78c3b71b55c95453aa2d68 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 27 Mar 2023 20:49:20 +0300 Subject: [PATCH 5/7] Add migrations --- .../apps/fossdb/migrations/0001_initial.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 FOSSDB_web/apps/fossdb/migrations/0001_initial.py diff --git a/FOSSDB_web/apps/fossdb/migrations/0001_initial.py b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py new file mode 100644 index 0000000..def7053 --- /dev/null +++ b/FOSSDB_web/apps/fossdb/migrations/0001_initial.py @@ -0,0 +1,27 @@ +# Generated by Django 4.1 on 2023-03-27 17:46 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Project', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255)), + ('description', models.TextField()), + ('create_date', models.DateTimeField(auto_now_add=True)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] From 70a1d9e02c7d393d55cafc3ac9bd70244f53aada Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 27 Mar 2023 20:53:14 +0300 Subject: [PATCH 6/7] Removed redundant code --- FOSSDB_web/apps/fossdb/admin.py | 3 --- FOSSDB_web/apps/fossdb/tests.py | 3 --- 2 files changed, 6 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/admin.py b/FOSSDB_web/apps/fossdb/admin.py index 8c38f3f..e69de29 100644 --- a/FOSSDB_web/apps/fossdb/admin.py +++ b/FOSSDB_web/apps/fossdb/admin.py @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/FOSSDB_web/apps/fossdb/tests.py b/FOSSDB_web/apps/fossdb/tests.py index 7ce503c..e69de29 100644 --- a/FOSSDB_web/apps/fossdb/tests.py +++ b/FOSSDB_web/apps/fossdb/tests.py @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. From af5f735070711353431ff05c15e0ec7d1850424b Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 27 Mar 2023 20:53:36 +0300 Subject: [PATCH 7/7] Renamed `create_project` to `add_project` --- FOSSDB_web/apps/fossdb/urls.py | 3 ++- FOSSDB_web/apps/fossdb/views.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/FOSSDB_web/apps/fossdb/urls.py b/FOSSDB_web/apps/fossdb/urls.py index 2d9cdc0..11fbdee 100644 --- a/FOSSDB_web/apps/fossdb/urls.py +++ b/FOSSDB_web/apps/fossdb/urls.py @@ -3,5 +3,6 @@ from django.urls import path from . import views urlpatterns = [ - path("", views.index, name="index") + path("", views.index, name="index"), + path("add", views.add_project, name="add-project"), ] diff --git a/FOSSDB_web/apps/fossdb/views.py b/FOSSDB_web/apps/fossdb/views.py index c84bc6a..35c3d5a 100644 --- a/FOSSDB_web/apps/fossdb/views.py +++ b/FOSSDB_web/apps/fossdb/views.py @@ -12,7 +12,7 @@ def index(request): @login_required(login_url="account/login/") @permission_required("fossdb.add_post)", login_url="account/login/", raise_exception=True) -def create_project(request): +def add_project(request): if request.method == "POST": project = ProjectForm(request.POST) if project.is_valid():