feat: archive for URLs

This commit is contained in:
Silver Ghost 2022-10-24 16:31:34 +03:00
parent 4ef250e4f2
commit be6e2dad68
No known key found for this signature in database
8 changed files with 80 additions and 7 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 4.1.2 on 2022-10-24 13:04
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('later42', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='url',
name='archived',
field=models.BooleanField(default=False),
),
]

View File

@ -7,3 +7,4 @@ class URL(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE)
url = models.CharField(max_length=2000) url = models.CharField(max_length=2000)
title = models.CharField(max_length=2000) title = models.CharField(max_length=2000)
archived = models.BooleanField(default=False)

View File

@ -0,0 +1,30 @@
{% extends 'base.html' %}
{% block content %}
{% if urls|length > 0 %}
{% for url in urls %}
<!-- Post preview-->
<div class="post-preview">
<div class="d-flex justify-content-between">
<div class="p-2">
<a href="{{ url.url }}">
<h2 class="post-title">{{ url.title }}</h2>
</a>
</div>
<div class="p-2">
<a href="/delete/{{ url.id }}"><span class="fa-solid fa-trash"></span></a>
</div>
</div>
<p class="post-meta">
{{ url.url }}
</p>
</div>
<!-- Divider-->
<hr class="my-4" />
{% endfor %}
{% else %}
<div class="post-preview">
<h2 class="post-title">У вас нет ссылок в архиве</h2>
</div>
{% endif %}
{% endblock %}

View File

@ -31,6 +31,7 @@
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="{% url 'about' %}">О нас</a></li> <li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="{% url 'about' %}">О нас</a></li>
<li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="{% url 'profile' %}">Профиль</a></li> <li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="{% url 'profile' %}">Профиль</a></li>
<li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="{% url 'archive' %}">Архив</a></li>
<li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="{% url 'logout' %}">Выйти</a></li> <li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="{% url 'logout' %}">Выйти</a></li>
{% else %} {% else %}
<li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="{% url 'signup' %}">Регистрация</a></li> <li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="{% url 'signup' %}">Регистрация</a></li>

View File

@ -10,7 +10,7 @@
<a href="{{ url.url }}"><h2 class="post-title">{{ url.title }}</h2></a> <a href="{{ url.url }}"><h2 class="post-title">{{ url.title }}</h2></a>
</div> </div>
<div class="p-2"> <div class="p-2">
<a href="/delete/{{ url.id }}"><span class="fa-solid fa-trash"></span></a> <a href="/archive/{{ url.id }}"><span class="fa-solid fa-trash"></span></a>
</div> </div>
</div> </div>
<p class="post-meta"> <p class="post-meta">

View File

@ -42,7 +42,8 @@ router.register(r'users', UserViewSet)
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('signup/', signup.register, name='signup'), path('signup/', signup.register, name='signup'),
path("accounts/login/", LoginView.as_view(authentication_form=CustomLoginForm), name="login"), path("accounts/login/",
LoginView.as_view(authentication_form=CustomLoginForm), name="login"),
path("accounts/", include("django.contrib.auth.urls")), path("accounts/", include("django.contrib.auth.urls")),
path('profile/', profile.get, name='profile'), path('profile/', profile.get, name='profile'),
path('api/url/', api.URL.as_view(), name='urls'), path('api/url/', api.URL.as_view(), name='urls'),
@ -50,4 +51,7 @@ urlpatterns = [
path('api_token/', api_token.create, name='api_token'), path('api_token/', api_token.create, name='api_token'),
path('', index.get, name='index'), path('', index.get, name='index'),
path('about/', about.get, name='about'), path('about/', about.get, name='about'),
path('archive/', index.archive, name='archive'),
path('archive/<int:url_id>', index.archive, name='archive_url'),
] ]

View File

@ -31,7 +31,10 @@ class URL(APIView):
def delete(self, request, format=None): def delete(self, request, format=None):
id = request.GET.get('id') id = request.GET.get('id')
if id: if id:
URLModel.objects.filter(id=id).delete() url = URLModel.objects.filter(id=id).first()
if url:
url.archived = True
url.save()
return Response({'status': 'success'}) return Response({'status': 'success'})
else: else:
return Response({'status': 'error'}) return Response({'status': 'error'})

View File

@ -1,3 +1,4 @@
from multiprocessing import context
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from later42.models.urls import URL from later42.models.urls import URL
@ -5,14 +6,29 @@ from later42.models.urls import URL
def get(request): def get(request):
try: try:
urls = URL.objects.filter(user=request.user).order_by('-id') urls = URL.objects.filter(
context = {'urls': urls} user=request.user, archived=False).order_by('-id')
except: except:
context = {'urls': []} urls = []
context = {'urls': urls}
return render(request, 'index.html', context) return render(request, 'index.html', context)
@login_required
def archive(request, url_id=None):
if url_id:
URL.objects.filter(id=url_id, user=request.user).update(archived=True)
return redirect('index')
try:
urls = URL.objects.filter(
user=request.user, archived=True).order_by('-id')
except:
urls = []
context = {'urls': urls}
return render(request, 'archive.html', context)
@login_required @login_required
def delete(request, url_id): def delete(request, url_id):
URL.objects.filter(id=url_id, user=request.user).delete() URL.objects.filter(id=url_id, user=request.user).delete()
return redirect('index') return redirect('archive')