blog 9 months ago
parent c499ef1f7a
commit afdfb0728d

@ -0,0 +1,12 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="post.views.*" />
</list>
</option>
</inspection_tool>
</profile>
</component>

@ -41,8 +41,7 @@ INSTALLED_APPS = [
'django.contrib.staticfiles',
'post',
'ckeditor',
'ckeditor_uploader',
'haystack' #容器
'ckeditor_uploader'
]
@ -143,18 +142,4 @@ MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
CKEDITOR_UPLOAD_PATH = 'upload/'
# 指定生成的索引路径
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', # 指定索引引擎
'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
},
}
# 实时生成索引文件
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
# global_settings去复制

@ -0,0 +1,29 @@
# Generated by Django 5.0.6 on 2024-05-31 08:55
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('post', '0002_alter_category_id_alter_post_content_alter_post_id_and_more'),
]
operations = [
migrations.CreateModel(
name='Comment',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('content', models.TextField()),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='post.post')),
],
options={
'verbose_name_plural': '评论',
'db_table': 'comments',
'ordering': ['-created_at'],
},
),
]

@ -0,0 +1,34 @@
# Generated by Django 5.0.6 on 2024-05-31 09:09
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('post', '0003_comment'),
]
operations = [
migrations.AlterField(
model_name='comment',
name='content',
field=models.TextField(verbose_name='内容'),
),
migrations.AlterField(
model_name='comment',
name='created_at',
field=models.DateTimeField(auto_now_add=True, verbose_name='创建时间'),
),
migrations.AlterField(
model_name='comment',
name='post',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='post.post', verbose_name='帖子'),
),
migrations.AlterField(
model_name='comment',
name='updated_at',
field=models.DateTimeField(auto_now=True, verbose_name='更新时间'),
),
]

@ -61,6 +61,21 @@ class Post(models.Model):
# 使用f-string进行字符串格式化
return f'Post:{self.title}'
# 评论
class Comment(models.Model):
"""评论模型"""
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments', verbose_name='帖子')
content = models.TextField(verbose_name='内容')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
class Meta:
db_table = 'comments'
verbose_name_plural = '评论'
ordering = ['-created_at']
def __str__(self):
return f'{self.content[:50]}'

@ -1,17 +0,0 @@
#coding=UTF-8
from haystack import indexes
from post.models import *
#注意格式(模型类名+Index)
class PostIndex(indexes.SearchIndex,indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
#给title,content设置索引
title = indexes.NgramField(model_attr='title')
content = indexes.NgramField(model_attr='content')
def get_model(self):
return Post
#设置索引的分词器
def index_queryset(self, using=None):
return self.get_model().objects.order_by('-created')

@ -34,6 +34,17 @@
<div class="bdsharebuttonbox"><a href="#" class="bds_more" data-cmd="more"></a><a href="#" class="bds_qzone" data-cmd="qzone"></a><a href="#" class="bds_tsina" data-cmd="tsina"></a><a href="#" class="bds_tqq" data-cmd="tqq"></a><a href="#" class="bds_renren" data-cmd="renren"></a><a href="#" class="bds_weixin" data-cmd="weixin"></a></div>
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdPic":"","bdStyle":"0","bdSize":"16"},"share":{},"image":{"viewList":["qzone","tsina","tqq","renren","weixin"],"viewText":"分享到:","viewSize":"16"},"selectShare":{"bdContainerClass":null,"bdSelectMiniList":["qzone","tsina","tqq","renren","weixin"]}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
</div>
<!--评论-->
<h3>Comments</h3>
{% for comment in post.comments.all %}
<p>{{ comment.author.username }} says: {{ comment.content }}</p>
{% endfor %}
<h3>Add a comment</h3>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit Comment</button>
</form>
{% endblock %}

@ -1,12 +1,11 @@
#coding=utf-8
from django.urls import path, re_path
from . import views # 确保从当前目录导入views模块前面的import语句有误
urlpatterns = [
path('', views.queryAll, name='home'),
re_path(r'^page/(?P<num>\d+)$', views.queryAll, name='pagination'),
re_path(r'^post/(?P<postid>\d+)$', views.detail, name='post_detail'),
re_path(r'^category/(?P<cid>\d+)$', views.queryPostByCid, name='category_posts'),
re_path(r'^archive/(?P<year>\d+)/(?P<month>\d+)$', views.queryPostByCreated, name='archive'),
]
path('', views.queryAll, name='home'), # 首页
re_path(r'^page/(?P<num>\d+)$', views.queryAll, name='pagination'), # 分页
re_path(r'^post/(?P<postid>\d+)$', views.detail, name='post_detail'), # 帖子详情
re_path(r'^category/(?P<cid>\d+)$', views.queryPostByCid, name='category_posts'), # 分类
re_path(r'^archive/(?P<year>\d+)/(?P<month>\d+)$', views.queryPostByCreated, name='archive'), # 归档
path('<int:pk>/comments/', views.post_detail, name='post_comments'), # 帖单评论页
]

@ -1,26 +1,27 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import math
from django.core.paginator import Paginator
from django.shortcuts import get_object_or_404, redirect, render
from django.shortcuts import render
# Create your views here.
#渲染主页面
# 渲染主页面
from post.models import Post
from django.core.paginator import Paginator
import math
def queryAll(request,num=1):
from django import forms
def queryAll(request, num=1):
num = int(num)
#获取所有帖子信息
postList = Post.objects.all().order_by('-created')
#创建分页器对象
pageObj = Paginator(postList,1)
pageObj = Paginator(postList, 1)
#获取当前页的数据
perPageList = pageObj.page(num)
#生成页码数列表
# 每页开始页码
begin = (num - int(math.ceil(10.0 / 2)))
@ -39,27 +40,51 @@ def queryAll(request,num=1):
pageList = range(begin, end + 1)
return render(request, 'index.html', {'postList': perPageList, 'pageList': pageList, 'currentNum': num})
return render(request,'index.html',{'postList':perPageList,'pageList':pageList,'currentNum':num})
#阅读全文功能
def detail(request,postid):
def detail(request, postid):
postid = int(postid)
#根据postid查询帖子的详情信息
post = Post.objects.get(id=postid)
return render(request,'detail.html',{'post':post})
#根据类别id查询所有帖子
def queryPostByCid(request,cid):
return render(request, 'detail.html', {'post': post})
#根据类别id查询所有帖子
def queryPostByCid(request, cid):
postList = Post.objects.filter(category_id=cid)
# Post.objects.filter(category__id=cid)
return render(request,'article.html',{'postList':postList})
return render(request, 'article.html', {'postList': postList})
#根据发帖时间查询所有帖子
def queryPostByCreated(request,year,month):
def queryPostByCreated(request, year, month):
postList = Post.objects.filter(created__year=year, created__month=month)
return render(request, 'article.html', {'postList': postList})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = post
comment.save()
return redirect('detail', pk=post.pk) # 重定向到文章详情页
else:
form = CommentForm()
context = {
'post': post,
'form': form,
}
return render(request, 'detail.html', context)
postList = Post.objects.filter(created__year=year,created__month=month)
return render(request,'article.html',{'postList':postList})
class CommentForm(forms.Form):
content = forms.CharField(widget=forms.Textarea(attrs={'rows': '4', 'cols': '60'}))

@ -1,2 +0,0 @@
{{object.title}}
{{object.content}}
Loading…
Cancel
Save