feat: archive for URLs
This commit is contained in:
parent
4ef250e4f2
commit
be6e2dad68
18
later42/migrations/0002_url_archived.py
Normal file
18
later42/migrations/0002_url_archived.py
Normal 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),
|
||||
),
|
||||
]
|
@ -7,3 +7,4 @@ class URL(models.Model):
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
url = models.CharField(max_length=2000)
|
||||
title = models.CharField(max_length=2000)
|
||||
archived = models.BooleanField(default=False)
|
||||
|
30
later42/templates/archive.html
Normal file
30
later42/templates/archive.html
Normal 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 %}
|
@ -31,6 +31,7 @@
|
||||
{% 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 '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>
|
||||
{% else %}
|
||||
<li class="nav-item"><a class="nav-link px-lg-3 py-3 py-lg-4" href="{% url 'signup' %}">Регистрация</a></li>
|
||||
|
@ -10,7 +10,7 @@
|
||||
<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>
|
||||
<a href="/archive/{{ url.id }}"><span class="fa-solid fa-trash"></span></a>
|
||||
</div>
|
||||
</div>
|
||||
<p class="post-meta">
|
||||
|
@ -42,7 +42,8 @@ router.register(r'users', UserViewSet)
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
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('profile/', profile.get, name='profile'),
|
||||
path('api/url/', api.URL.as_view(), name='urls'),
|
||||
@ -50,4 +51,7 @@ urlpatterns = [
|
||||
path('api_token/', api_token.create, name='api_token'),
|
||||
path('', index.get, name='index'),
|
||||
path('about/', about.get, name='about'),
|
||||
path('archive/', index.archive, name='archive'),
|
||||
path('archive/<int:url_id>', index.archive, name='archive_url'),
|
||||
|
||||
]
|
||||
|
@ -31,7 +31,10 @@ class URL(APIView):
|
||||
def delete(self, request, format=None):
|
||||
id = request.GET.get('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'})
|
||||
else:
|
||||
return Response({'status': 'error'})
|
||||
|
@ -1,3 +1,4 @@
|
||||
from multiprocessing import context
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.shortcuts import render, redirect
|
||||
from later42.models.urls import URL
|
||||
@ -5,14 +6,29 @@ from later42.models.urls import URL
|
||||
|
||||
def get(request):
|
||||
try:
|
||||
urls = URL.objects.filter(user=request.user).order_by('-id')
|
||||
context = {'urls': urls}
|
||||
urls = URL.objects.filter(
|
||||
user=request.user, archived=False).order_by('-id')
|
||||
except:
|
||||
context = {'urls': []}
|
||||
urls = []
|
||||
context = {'urls': urls}
|
||||
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
|
||||
def delete(request, url_id):
|
||||
URL.objects.filter(id=url_id, user=request.user).delete()
|
||||
return redirect('index')
|
||||
return redirect('archive')
|
||||
|
Loading…
Reference in New Issue
Block a user