views.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from django.shortcuts import render
  2. # Create your views here.
  3. from .models import Comment
  4. from blog.models import Article
  5. from .forms import CommentForm
  6. from django.views.generic.edit import FormView
  7. from django.http import HttpResponseRedirect
  8. from django.contrib.auth import get_user_model
  9. from django import forms
  10. class CommentPostView(FormView):
  11. form_class = CommentForm
  12. template_name = 'blog/article_detail.html'
  13. def get(self, request, *args, **kwargs):
  14. article_id = self.kwargs['article_id']
  15. article = Article.objects.get(pk=article_id)
  16. url = article.get_absolute_url()
  17. return HttpResponseRedirect(url + "#comments")
  18. def form_invalid(self, form):
  19. article_id = self.kwargs['article_id']
  20. article = Article.objects.get(pk=article_id)
  21. u = self.request.user
  22. if self.request.user.is_authenticated:
  23. form.fields.update({
  24. 'email': forms.CharField(widget=forms.HiddenInput()),
  25. 'name': forms.CharField(widget=forms.HiddenInput()),
  26. })
  27. user = self.request.user
  28. form.fields["email"].initial = user.email
  29. form.fields["name"].initial = user.username
  30. return self.render_to_response({
  31. 'form': form,
  32. 'article': article
  33. })
  34. def form_valid(self, form):
  35. """提交的数据验证合法后的逻辑"""
  36. user = self.request.user
  37. article_id = self.kwargs['article_id']
  38. article = Article.objects.get(pk=article_id)
  39. if not self.request.user.is_authenticated:
  40. email = form.cleaned_data['email']
  41. username = form.cleaned_data['name']
  42. user = get_user_model().objects.get_or_create(username=username, email=email)[0]
  43. # auth.login(self.request, user)
  44. comment = form.save(False)
  45. comment.article = article
  46. comment.author = user
  47. if form.cleaned_data['parent_comment_id']:
  48. parent_comment = Comment.objects.get(pk=form.cleaned_data['parent_comment_id'])
  49. comment.parent_comment = parent_comment
  50. comment.save(True)
  51. from website.blog_signals import comment_save_signal
  52. port = self.request.get_port()
  53. username = self.request.user.username if self.request.user else ''
  54. comment_save_signal.send(sender=self.__class__, comment_id=comment.id, username=username, serverport=port)
  55. return HttpResponseRedirect("%s#div-comment-%d" % (article.get_absolute_url(), comment.pk))