Предупреждение новичка: у меня есть следующий код.Мой блог-приложение является многопользовательским.Как только любой пользователь создает сообщение и посещает его / ее профиль, он должен видеть только свое сообщение, что очень просто.
post_id
- это первичный ключ модели Post, который увеличивается сам по себе.Проблема с многопользовательским приложением состоит в том, что пользователи могут попытаться поместить /<post_id>/
того, что им не принадлежит.Я пытаюсь уловить эту проблему здесь.Через некоторое время им станет очевидно, что их post_id
не увеличиваются, а некоторые «отсутствуют», потому что они принадлежат кому-то другому.
- Это хорошая идея показать ПКсообщения в URL, чтобы захватить его и проверить в представлении
edit_post
, принадлежит ли оно пользователю? - Есть ли лучшее предложение, чем показ первичного ключа в URL?
- Как еще можно получить текущий
post_id
, если его нет в URL, и я считаю, что мне нужно post_id
, чтобы получить текущее сообщение, которое пользователь хочет отредактировать.
urls.py
(r'^create/$', create_post),
(r'^post/(?P<post_id>\d+)/edit/$', edit_post),
models.py:
class Post (models.Model):
name = models.CharField(max_length=1000, help_text="required, name of the post")
user = models.ForeignKey(User, unique=False, help_text="user this post belongs to")
def __unicode__(self):
return self.name
class PostForm(ModelForm):
class Meta:
model = Post
views.py
#----------------------------View--------------------------------------
@login_required
def create_post (request):
if request.method == 'POST':
post_form = PostForm(request.POST)
if post_form.is_valid():
post.save()
return render_to_response('home.html')
else:
return HttpResponse('not working')
else:
post_form = PostForm()
return render_to_response('create.html', {'post_form':post_form })
@login_required
def edit_post (request, post_id):
if request.method == 'POST':
post_form = PostForm(request.POST)
"""
Stuff to check whether the
current logged in user owns
this post.
like
if post_user = Post(pk=post_id).user:
show the post here.
"""
else:
return HttpResponse('not working')
else:
post_form = PostForm()
return render_to_response('create.html', {'post_form':post_form })\