如何使阻塞系统双向运行?



我意识到阻塞系统有一个限制。

基本上基于所讨论的代码,我已经这样做了,当我阻止一个用户,我将无法看到他的帖子在家庭饲料,在详细页面。我将不能添加评论或提交任何东西到他的帖子。但后来我意识到,我们阻止的用户仍然可以看到我的帖子,我的详细页面,并添加评论/提交东西到我的帖子。这会破坏阻塞系统的目的。

我怎样才能让被我屏蔽的人也不能看我的帖子,评论我的帖子,或者向我的帖子提交任何东西?

models.py

class Account(AbstractBaseUser):
email                  = models.EmailField(verbose_name="email", max_length=60, unique=True)
username               = models.CharField(max_length=30, unique=True)
blocked_users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name='blocked_by_user')

views.py在这里我试图实现块功能

type_of_post = TypeofPostFilter(request.GET, queryset=BlogPost.objects.exclude((Q(author_id__in=request.user.blocked_users.all()) | Q(author = request.user))).order_by('date_updated'))
if blog_post.author in user.blocked_users.all(): 
return redirect(reverse('HomeFeed:detail', kwargs={'slug': slug}))
if comment.name in comment.post.author.blocked_users.all(): 
return redirect(reverse('HomeFeed:main'))

views.py:

def block_user(request, pk):
user = request.user
user_to_block = Account.objects.get(pk=pk)
user.blocked_users.add(user_to_block)
if user_to_block == user:
return HttpResponse("You can't block yourself")
return redirect('account:view', user_id=user_to_block.pk)

由于您已将related_name设置为blocked_by_user,您可以在此基础上进行过滤:
在您的视图中:

type_of_post = TypeofPostFilter(request.GET, queryset=BlogPost.objects.exclude((Q(author_id__in=request.user.blocked_users.all()) | Q(author = request.user) | Q(author_id__in=request.user.blocked_by_user.all()))).order_by('date_updated'))
if blog_post.author in user.blocked_users.all() or blog_post.author in user.blocked_by_user.all(): 
return redirect(reverse('HomeFeed:detail', kwargs={'slug': slug}))
if comment.name in comment.post.author.blocked_users.all() or comment.name in comment.post.author.blocked_by_user.all(): 
return redirect(reverse('HomeFeed:main'))

基本上在你的配置文件查看你会这样做:

def profile(request, pk):
user = User.objects.get(pk=pk)
if request.user in user.blocked_users.all():
return HttpResponse('This user blocked you') #  or something else
else:
return render(request, 'profile.html', {'user', user})

def home(request): # view that shows all posts
posts = BlogPost.objects.exclude(post_author__in=request.user.blocked_users.all())
return render(request, 'home.html', {'posts': posts})
另外,对于初学者来说,明智的做法是让用户不能看到所有帖子,而只能看到他们是朋友的用户的帖子。查看被阻止的用户帖子您将使用与配置文件相同的逻辑.

最新更新