Skip to content

Commit f11e04e

Browse files
committed
feat: 添加文章点赞功能。
1 parent 74c9789 commit f11e04e

File tree

7 files changed

+420
-4
lines changed

7 files changed

+420
-4
lines changed

core/urls.py

+5
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@
6464
path('api/del_talk/', del_talk, name='del_talk'),
6565
path('api/run_online_script/', run_online_script, name='run_online_script'),
6666
path('api/send_email/', send_email, name="send_email"),
67+
path('api/save_postlike/', save_postlike, name="save_postlike"),
68+
path('api/delete_postlike/', delete_postlike, name="delete_postlike"),
69+
path('api/change_postlike/', change_postlike, name="change_postlike"),
6770

6871
path('pub/save/', pub.save, name='pub_save'),
6972
path('pub/save_post/', pub.save_post, name='pub_save_post'),
@@ -99,6 +102,8 @@
99102
path('pub/cancelSubscribe/', pub.cancelSubscribe, name='pub_cancelSubscribe'),
100103
path('pub/getSubscribeSum/', pub.getSubscribeSum, name='pub_getSubscribeSum'),
101104
path('pub/getVerificationCode/', pub.getVerificationCode, name='pub_getVerificationCode'),
105+
path('pub/set_postlike/', pub.set_postlike, name='pub_set_postlike'),
106+
path('pub/get_postlike/', pub.get_postlike, name='pub_get_postlike'),
102107

103108
re_path(r'^(?!api)^(?!pub).*$\.*', pages, name='pages'),
104109
]

hexoweb/api.py

+58-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from django.views.decorators.csrf import csrf_exempt
1010

1111
from core import settings
12+
from hexoweb.models import PostLikeModel
1213
from .functions import *
1314

1415

@@ -936,4 +937,60 @@ def send_email(request):
936937
html_content = getSubscribeHtml()
937938
for to_email in MailModel.objects.all():
938939
send_custom_email(to_email.mail, to_email.name, from_email, email_passd, html_content, 'html')
939-
return JsonResponse(safe=False, data={"msg":"OK,邮件已经发送完成。", "status":"true"})
940+
return JsonResponse(safe=False, data={"msg":"OK,邮件已经发送完成。", "status":"true"})
941+
942+
# 保存点赞位
943+
@login_required(login_url="/login/")
944+
def save_postlike(request):
945+
if request.method != "POST":
946+
return
947+
948+
postname = request.POST.get("postname")
949+
postlike = PostLikeModel.objects.filter(postName=postname).first() # 查看是否已经订阅过
950+
if (not postlike):
951+
try:
952+
PostLikeModel.objects.create(postName=postname)
953+
return JsonResponse(safe=False, data={"msg":"OK,创建点赞位成功。", "status":True})
954+
except Exception as error:
955+
return JsonResponse(safe=False, data={"msg":"数据库插入记录失败。", "status":False})
956+
return JsonResponse(safe=False, data={"msg":"点赞位已经存在", "status":False})
957+
958+
# 删除点赞位
959+
@login_required(login_url="/login/")
960+
def delete_postlike(request):
961+
if request.method != "POST":
962+
return
963+
964+
postname = request.POST.get("postname")
965+
postlike = PostLikeModel.objects.filter(postName=postname).first() # 查看是否已经订阅过
966+
if (postlike):
967+
try:
968+
PostLikeModel.objects.filter(postName=postname).delete()
969+
return JsonResponse(safe=False, data={"msg":"OK,删除点赞位成功。", "status":True})
970+
except Exception as error:
971+
return JsonResponse(safe=False, data={"msg":"数据库删除记录失败。", "status":False})
972+
return JsonResponse(safe=False, data={"msg":"点赞位不存在!", "status":False})
973+
974+
# 修改点赞位
975+
@login_required(login_url="/login/")
976+
def change_postlike(request):
977+
if request.method != "POST":
978+
return
979+
980+
print("进入")
981+
postname = request.POST.get("postname")
982+
content = request.POST.get("content")
983+
print("正在查询")
984+
postlike = PostLikeModel.objects.filter(postName=postname).first() # 查看是否已经订阅过
985+
if (postlike):
986+
try:
987+
print("修改值:", content)
988+
print("文章名称:", postname)
989+
PostLikeModel.objects.filter(postName=postname).update(postName=content)
990+
print("修改")
991+
return JsonResponse(safe=False, data={"msg":"OK,修改点赞位成功。", "status":True})
992+
except Exception as error:
993+
print("异常")
994+
return JsonResponse(safe=False, data={"msg":"数据库修改记录失败。", "status":False})
995+
print("查询不到")
996+
return JsonResponse(safe=False, data={"msg":"点赞位不存在!", "status":False})

hexoweb/models.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,8 @@ class VerificationCodeModel(models.Model):
8181

8282
class MailModel(models.Model):
8383
mail=models.CharField(primary_key=True, max_length=50, verbose_name='邮箱')
84-
name=models.CharField(unique=False, max_length=30, verbose_name='名称')
84+
name=models.CharField(unique=False, max_length=30, verbose_name='名称')
85+
86+
class PostLikeModel(models.Model):
87+
postName=models.CharField(primary_key=True, max_length=50, verbose_name='文章名称')
88+
like=models.IntegerField(default=0)

hexoweb/pub.py

+36-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from core import settings
1111

1212
from .functions import *
13-
from .models import EssayModel, ImageModel, MailModel, SettingModel, VerificationCodeModel
13+
from .models import EssayModel, ImageModel, MailModel, PostLikeModel, SettingModel, VerificationCodeModel
1414

1515

1616
# 保存内容 pub/save
@@ -824,4 +824,38 @@ def cancelSubscribe(request):
824824
# 订阅总数
825825
@csrf_exempt
826826
def getSubscribeSum(request):
827-
return JsonResponse(safe=False, data={"msg": subscribe_sum(), "status": True})
827+
return JsonResponse(safe=False, data={"msg": subscribe_sum(), "status": True})
828+
829+
# 设置文章点赞
830+
@csrf_exempt
831+
def set_postlike(request):
832+
if request.method != "POST":
833+
return
834+
835+
try:
836+
postname = json.loads(request.body).get('postname')
837+
postlikemodel = PostLikeModel.objects.filter(postName=postname).first()
838+
if (not postlikemodel):
839+
return JsonResponse(safe=False, data={"msg": "文章未创建点赞功能!", "status": False})
840+
postlikemodel.like += 1
841+
count = postlikemodel.like
842+
postlikemodel.save()
843+
except Exception as error:
844+
return JsonResponse(safe=False, data={"msg": "点赞发生错误,请检查数据库或网络!", "status": False})
845+
return JsonResponse(safe=False, data={"msg": count, "status": True})
846+
847+
# 获取文章点赞数
848+
@csrf_exempt
849+
def get_postlike(request):
850+
if request.method != "POST":
851+
return
852+
853+
try:
854+
postname = json.loads(request.body).get('postname')
855+
postlikemodel = PostLikeModel.objects.filter(postName=postname).first()
856+
if (not postlikemodel):
857+
return JsonResponse(safe=False, data={"msg": "文章未创建点赞功能!", "status": False})
858+
count = postlikemodel.like
859+
except Exception as error:
860+
return JsonResponse(safe=False, data={"msg": "获取点赞数失败,请检查数据库或网络!", "status": True})
861+
return JsonResponse(safe=False, data={"msg": count, "status": True})

hexoweb/views.py

+12
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,18 @@ def pages(request):
601601
context["post_number"] = len(posts)
602602
context["page_number"] = ceil(context["post_number"] / 15)
603603
context["search"] = search
604+
elif "post_like" in load_template:
605+
posts = []
606+
postlike = PostLikeModel.objects.all()
607+
608+
for i in postlike:
609+
posts.append({"postName": i.postName,
610+
"like": i.like,
611+
})
612+
613+
context["posts"] = posts
614+
context["post_number"] = len(posts)
615+
context["page_number"] = ceil(context["post_number"] / 15)
604616
elif "talks" in load_template:
605617
search = request.GET.get("s")
606618
posts = []

0 commit comments

Comments
 (0)