From 7dd314b08cdbd7a907cdb54c02fa443876082c40 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 27 Mar 2023 20:48:27 +0300 Subject: [PATCH] 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)