You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
3.0 KiB
81 lines
3.0 KiB
from django.shortcuts import render
|
|
|
|
# Create your views here.
|
|
from .models import Comment
|
|
from blog.models import Article
|
|
from .forms import CommentForm
|
|
from django.views.generic.edit import FormView
|
|
from django.http import HttpResponseRedirect
|
|
from django.contrib.auth import get_user_model
|
|
from django import forms
|
|
|
|
|
|
class CommentPostView(FormView):
|
|
form_class = CommentForm
|
|
template_name = 'blog/article_detail.html'
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
article_id = self.kwargs['article_id']
|
|
|
|
article = Article.objects.get(pk=article_id)
|
|
url = article.get_absolute_url()
|
|
return HttpResponseRedirect(url + "#comments")
|
|
|
|
def form_invalid(self, form):
|
|
article_id = self.kwargs['article_id']
|
|
article = Article.objects.get(pk=article_id)
|
|
u = self.request.user
|
|
|
|
if self.request.user.is_authenticated:
|
|
form.fields.update({
|
|
'email': forms.CharField(widget=forms.HiddenInput()),
|
|
'name': forms.CharField(widget=forms.HiddenInput()),
|
|
})
|
|
user = self.request.user
|
|
form.fields["email"].initial = user.email
|
|
form.fields["name"].initial = user.username
|
|
|
|
return self.render_to_response({
|
|
'form': form,
|
|
'article': article
|
|
})
|
|
|
|
def form_valid(self, form):
|
|
"""提交的数据验证合法后的逻辑"""
|
|
user = self.request.user
|
|
|
|
article_id = self.kwargs['article_id']
|
|
article = Article.objects.get(pk=article_id)
|
|
if not self.request.user.is_authenticated():
|
|
email = form.cleaned_data['email']
|
|
username = form.cleaned_data['name']
|
|
|
|
user = get_user_model().objects.get_or_create(username=username, email=email)[0]
|
|
# auth.login(self.request, user)
|
|
comment = form.save(False)
|
|
comment.article = article
|
|
|
|
comment.author = user
|
|
|
|
if form.cleaned_data['parent_comment_id']:
|
|
parent_comment = Comment.objects.get(pk=form.cleaned_data['parent_comment_id'])
|
|
comment.parent_comment = parent_comment
|
|
|
|
comment.save(True)
|
|
from DjangoBlog.utils import expire_view_cache, cache
|
|
from django.contrib.sites.models import Site
|
|
path = article.get_absolute_url()
|
|
site = Site.objects.get_current().domain
|
|
if site.find(':') > 0:
|
|
site = site[0:site.find(':')]
|
|
expire_view_cache(path, servername=site, serverport=self.request.get_port(), key_prefix='blogdetail')
|
|
if cache.get('seo_processor'):
|
|
cache.delete('seo_processor')
|
|
comment_cache_key = 'article_comments_{id}'.format(id=article_id)
|
|
cache.delete(comment_cache_key)
|
|
from django.core.cache.utils import make_template_fragment_key
|
|
username = self.request.user.username if self.request.user else ''
|
|
key = make_template_fragment_key('sidebar', [username])
|
|
cache.delete(key)
|
|
return HttpResponseRedirect("%s#div-comment-%d" % (article.get_absolute_url(), comment.pk))
|