Запуск промежуточного программного обеспечения для определенных ссылок
do Я пытаюсь написать код для сайта социальной сети. Мне нужно, чтобы каждая ссылка на использование проверялась, например, если у пользователя нет подписчиков, то число должно быть равно 0, а если нет подписчиков, то число должно быть равно 0. Это отлично работает для определенных пользователей, но создает проблемы с некоторыми другими, я размещу мой код ниже.
*UserFollowing - это модель, определяющая, кто за кем следует. модели:
`class UserFollowing(models.Model):
user = models.ForeignKey(User, related_name="following",on_delete=models.CASCADE)
following_user= models.ForeignKey(User, related_name="followers",on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)`
УРЛЫ:
from django.urls import path
from . import views
from.views import CreatePost
urlpatterns = [
path('explore/', views.Listexplore.as_view(), name='page-explore'),
path('user/<str:username>/', views.UserList.as_view(), name='user-posts'),
path('post/<int:pk>/', views.DetailPost.as_view(), name='post-detail'),
path('post/<int:pk>/update/', views.UpdatePost.as_view(), name='post-update'),
path('post/<int:pk>/delete/', views.DeletePost.as_view(), name='post-delete'),
path('post/create/', CreatePost.as_view(), name='post-create'),
path('about/',views.about,name='page-about'),
path('home/',views.Listhome.as_view(),name='page-home'),
path('tests/',views.test,name="page-test"),
]
view:
def post(self, request,**kwargs):
user2 = get_object_or_404(User, username=self.kwargs.get("username"))
try:
UserFollowing.objects.get(following_user=user2, user=request.user)
created = UserFollowing.objects.get(following_user=user2, user=request.user)
created.delete()
request.user.profile.follower -= 1
user2.profile.following -= 1
request.user.save()
user2.save()
except UserFollowing.DoesNotExist :
created = UserFollowing.objects.create(following_user=user2, user=request.user)
request.user.profile.follower += 1
user2.profile.following += 1
created.save()
request.user.save()
user2.save()
return redirect(request.META['HTTP_REFERER'])
def get_queryset(self):
user = get_object_or_404(User, username=self.kwargs.get("username"))
return post.objects.filter(author=user).order_by("-time")
def get_context_data(self, **kwargs):
context = super(UserList, self).get_context_data(**kwargs)
context['user2'] = get_object_or_404(User, username=self.kwargs.get("username"))
my_user= User.objects.get(username=self.request.user.username)
try:
UserFollowing.objects.get(following_user=context['user2'], user=my_user)
follow=True
except UserFollowing.DoesNotExist :
follow=False
context['follow']=follow
return context
the middleware i wrote:
from django.http.response import HttpResponseForbidden
from django.shortcuts import get_object_or_404
from django.http.response import HttpResponse
from django.http import HttpRequest
from .models import User,UserFollowing
def follow_middleware(get_response):
def middleware(request):
response = get_response(request)
if 'user' in request.path_info:
username=request.path_info.split('/')
username=username[2]
user2 = get_object_or_404(User, username=username)
if len(UserFollowing.objects.filter(following_user=user2)) == 0:
user2.profile.following = 0
if len(UserFollowing.objects.filter(user=user2)) == 0:
user2.profile.follower = 0
user2.save()
return response
return middleware
любая помощь будет признательна
редактирование:
Мне удалось решить эту проблему, единственная проблема в том, что если я удаляю все объекты, цифры восстанавливаются, только если я перезагружаю страницу
что мне делать?