添加评论功能,待完善

master
车亮亮 9 years ago
parent d2aa71b9ea
commit dc81f144d2

@ -19,5 +19,5 @@ from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include('blog.urls', namespace='blog', app_name='blog')),
url(r'', include('comments.urls', namespace='comment', app_name='comments'))
]

@ -4,6 +4,7 @@ from django.conf import settings
class Article(models.Model):
"""文章"""
STATUS_CHOICES = (
('d', '草稿'),
@ -20,7 +21,7 @@ class Article(models.Model):
pub_time = models.DateTimeField('发布时间', blank=True, null=True,
help_text="不指定发布时间则视为草稿,可以指定未来时间,到时将自动发布。")
status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES, default='o')
commentstatus = models.CharField('评论状态', max_length=1, choices=COMMENT_STATUS)
comment_status = models.CharField('评论状态', max_length=1, choices=COMMENT_STATUS)
summary = models.CharField('摘要', max_length=200, blank=True, help_text="可选若为空将摘取正文的前300个字符。")
views = models.PositiveIntegerField('浏览量', default=0)
author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='作者', on_delete=models.CASCADE)

@ -3,6 +3,7 @@ from django.shortcuts import render
# Create your views here.
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.views.generic import UpdateView
from django.views.generic.edit import CreateView, FormView
from django.views.generic.dates import YearArchiveView, MonthArchiveView
from blog.models import Article, Category, Tag
@ -11,6 +12,7 @@ import markdown
from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
from django.core.exceptions import ObjectDoesNotExist
from comments.forms import CommentForm
class ArticleListView(ListView):
@ -56,6 +58,13 @@ class ArticleDetailView(DetailView):
except ObjectDoesNotExist:
return None
form = CommentForm()
if self.request.user.is_authenticated():
user = self.request.user
form.fields["email"].initial = user.email
form.fields["name"].initial=user.username
kwargs['form'] = form
next_article = get_article(articleid + 1)
prev_article = get_article(articleid - 1)
kwargs['next_article'] = next_article
@ -63,6 +72,15 @@ class ArticleDetailView(DetailView):
return super(ArticleDetailView, self).get_context_data(**kwargs)
"""
def post(self, request, *args, **kwargs):
form = CommentForm(request.POST)
if form.is_valid():
data = form.cleaned_data
pass
"""
class CategoryDetailView(ArticleListView):
# template_name = 'index.html'

@ -0,0 +1,44 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.org/
@software: PyCharm
@file: forms.py
@time: 2016/11/12 下午2:45
"""
from .models import Comment
from django import forms
from django.forms import ModelForm
from django.contrib.auth.models import User
"""
class CommentForm(forms.Form):
url = forms.URLField(label='网址', required=False)
email = forms.EmailField(label='电子邮箱', required=False)
name = forms.CharField(label='姓名')
body = forms.CharField(widget=forms.Textarea, label='评论')
parent_comment_id = forms.IntegerField(widget=forms.HiddenInput, required=False)
"""
class CommentForm(ModelForm):
url = forms.URLField(label='网址', required=False)
if User.is_authenticated:
email = forms.EmailField(label='电子邮箱', required=False, widget=forms.HiddenInput)
name = forms.CharField(label='姓名', widget=forms.HiddenInput)
else:
email = forms.EmailField(label='电子邮箱', required=False)
name = forms.CharField(label='姓名')
# body = forms.CharField(widget=forms.Textarea, label='评论')
parent_comment_id = forms.IntegerField(widget=forms.HiddenInput, required=False)
class Meta:
model = Comment
fields = ['body']

@ -7,12 +7,15 @@ from blog.models import Article
# Create your models here.
class Comment(models.Model):
#url = models.URLField('地址', blank=True, null=True)
#email = models.EmailField('电子邮件', blank=True, null=True)
body = models.TextField('正文')
created_time = models.DateTimeField('创建时间', auto_now_add=True)
last_mod_time = models.DateTimeField('修改时间', auto_now=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='作者', on_delete=models.CASCADE)
article = models.ForeignKey(Article, verbose_name='文章', on_delete=models.CASCADE)
parant_comment = models.ForeignKey('self', verbose_name="上级评论", blank=True, null=True)
parent_comment = models.ForeignKey('self', verbose_name="上级评论", blank=True, null=True)
class Meta:
ordering = ['created_time']

@ -17,18 +17,28 @@ from django import template
from django.template.loader import render_to_string
from ..models import Comment
from blog.models import Article
from comments.forms import CommentForm
register = template.Library()
"""
@register.simple_tag(name='get_comment_count')
def GetCommentCount(parser, token):
commentcount = Comment.objects.filter(article__author_id=token).count()
return "0" if commentcount == 0 else str(commentcount) + " comments"
@register.inclusion_tag('comments/tags/post_comment.html')
def load_post_comment(article):
def load_post_comment(article, lastform=None):
if not lastform:
form = CommentForm()
form.article_id = article.id
form.parent_comment_id = ''
else:
form = lastform
return {
'article': article
'article': article,
'form': form
}
"""

@ -0,0 +1,22 @@
#!/usr/bin/env python
# encoding: utf-8
"""
@version: ??
@author: liangliangyy
@license: MIT Licence
@contact: liangliangyy@gmail.com
@site: https://www.lylinux.org/
@software: PyCharm
@file: urls.py
@time: 2016/11/12 下午3:03
"""
from django.conf.urls import url
from . import views
urlpatterns = [
# url(r'^postcomment/(?P<article_id>\d+)$', views.CommentPostView.as_view(), name='postcomment'),
url(r'^article/(?P<article_id>\d+)/postcomment$', views.CommentPostView.as_view(), name='postcomment'),
]

@ -1,3 +1,47 @@
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.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
from accounts.models import BlogUser
class CommentPostView(FormView):
form_class = CommentForm
template_name = 'blog/articledetail.html'
def get(self, request, *args, **kwargs):
article_id = self.kwargs['article_id']
url = reverse('blog:detail', kwargs={'article_id': article_id})
return HttpResponseRedirect(url)
def form_invalid(self, form):
article_id = self.kwargs['article_id']
article = Article.objects.get(pk=article_id)
return self.render_to_response({
'form': form,
'article': article
})
def form_valid(self, form):
"""提交的数据验证合法后的逻辑"""
article_id = self.kwargs['article_id']
article = Article.objects.get(pk=article_id)
if not self.request.user.is_authenticated():
pass
author_id = self.request.user.pk
comment = form.save(False)
comment.author = BlogUser.objects.get(pk=author_id)
comment.article = article
comment.save(True)
return HttpResponseRedirect('/')

@ -26,9 +26,10 @@
class="meta-nav">&rarr;</span></a></span>
{% endif %}
</nav><!-- .nav-single -->
{% if article.commentstatus == "o" %}
{% load comments_tags %}
{% load_post_comment article %}
{% if article.comment_status == "o" %}
{% comment %}{% load comments_tags %}
{% load_post_comment article from %}{% endcomment %}
{% include 'comments/tags/post_comment.html' %}
{% endif %}
</div><!-- #content -->
</div><!-- #primary -->

@ -5,31 +5,55 @@
<small><a rel="nofollow" id="cancel-comment-reply-link" href="/wordpress/?p=3786#respond"
style="display:none;">取消回复</a></small>
</h3>
<form action="#" method="post" id="commentform"
class="comment-form">
<p class="comment-notes"><span id="email-notes">电子邮件地址不会被公开</span> 必填项已用<span class="required">*</span>标注
</p>
<p class="comment-form-comment"><label for="comment">评论</label> <textarea id="comment" name="comment"
<form action="{% url 'comments:postcomment' article.pk %}" method="post" id="commentform"
class="comment-form">{% csrf_token %}
{% comment %}<p class="comment-notes"><span id="email-notes">电子邮件地址不会被公开</span> 必填项已用<span class="required">*</span>标注
</p>{% endcomment %}
<p class="comment-form-comment">
{{ form.body.label_tag }}
{{ form.body }}
{{ form.body.errors }}
{% comment %}<label for="comment">评论</label> <textarea id="comment" name="comment"
cols="45" rows="8"
maxlength="65525"
aria-required="true"
required="required"></textarea>
required="required"></textarea>{% endcomment %}
</p>
<p class="comment-form-author"><label for="author">姓名 <span class="required">*</span></label> <input
id="author" name="author" type="text" value="" size="30" maxlength="245" aria-required='true'
required='required'/></p>
<p class="comment-form-email"><label for="email">电子邮件 <span class="required">*</span></label> <input
<p class="comment-form-author">
{% if not form.name.is_hidden %}
{{ form.name.label_tag }}
{% endif %}
{{ form.name }}
{{ form.name.errors }}
{% comment %}<label for="author">姓名 <span class="required">*</span></label>
<input id="author" name="author" type="text" value="" size="30" maxlength="245" aria-required='true'
required='required'/></p>{% endcomment %}
<p class="comment-form-email">
{% comment %} <label for="email">电子邮件 <span class="required">*</span></label> <input
id="email" name="email" type="text" value="" size="30" maxlength="100"
aria-describedby="email-notes" aria-required='true' required='required'/></p>
<p class="comment-form-url"><label for="url">站点</label> <input id="url" name="url" type="text" value=""
size="30" maxlength="200"/></p>
<p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="发表评论"/> <input
type='hidden' name='comment_post_ID' value='3786' id='comment_post_ID'/>
<input type='hidden' name='comment_parent' id='comment_parent' value='0'/>
aria-describedby="email-notes" aria-required='true' required='required'/>{% endcomment %}
{% if not form.email.is_hidden %}
{{ form.email.label_tag }}
{% endif %}
{{ form.email }}
{{ form.email.errors }}
</p>
<p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce"
value="0767785ef9"/></p>
<p style="display: none;"><input type="hidden" id="ak_js" name="ak_js" value="238"/></p></form>
{% comment %}<p class="comment-form-url">
{{ form.url.label_tag }}
{{ form.url }}
{{ form.url.errors }}
</p>{% endcomment %}
{{ form.parent_comment_id }}
<p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="发表评论"/>
</p>
</form>
</div><!-- #respond -->
</div><!-- #comments .comments-area -->
</div><!-- #comments .comments-area -->

Loading…
Cancel
Save