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)
|
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)
|
||||||
|
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 %}
|
{% 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>
|
||||||
|
@ -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">
|
||||||
|
@ -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'),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
@ -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'})
|
||||||
|
@ -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')
|
||||||
|
Loading…
Reference in New Issue
Block a user