add bookmark model
This commit is contained in:
parent
03db2db899
commit
d0e4d9512c
14 changed files with 223 additions and 16 deletions
|
@ -8,6 +8,7 @@ from django.views.generic import ListView
|
|||
|
||||
from judge.comments import CommentedDetailView
|
||||
from judge.views.pagevote import PageVoteDetailView, PageVoteListView
|
||||
from judge.views.bookmark import BookMarkDetailView, BookMarkListView
|
||||
from judge.models import (
|
||||
BlogPost,
|
||||
Comment,
|
||||
|
@ -93,7 +94,7 @@ class FeedView(ListView):
|
|||
return context
|
||||
|
||||
|
||||
class PostList(FeedView, PageVoteListView):
|
||||
class PostList(FeedView, PageVoteListView, BookMarkListView):
|
||||
model = BlogPost
|
||||
paginate_by = 10
|
||||
context_object_name = "posts"
|
||||
|
@ -194,7 +195,7 @@ class CommentFeed(FeedView):
|
|||
return context
|
||||
|
||||
|
||||
class PostView(TitleMixin, CommentedDetailView, PageVoteDetailView):
|
||||
class PostView(TitleMixin, CommentedDetailView, PageVoteDetailView, BookMarkDetailView):
|
||||
model = BlogPost
|
||||
pk_url_kwarg = "id"
|
||||
context_object_name = "post"
|
||||
|
|
87
judge/views/bookmark.py
Normal file
87
judge/views/bookmark.py
Normal file
|
@ -0,0 +1,87 @@
|
|||
from django.contrib.auth.decorators import login_required
|
||||
from django.db import IntegrityError
|
||||
from django.db.models import F
|
||||
from django.http import (
|
||||
Http404,
|
||||
HttpResponse,
|
||||
HttpResponseBadRequest,
|
||||
HttpResponseForbidden,
|
||||
)
|
||||
from django.utils.translation import gettext as _
|
||||
from judge.models.bookmark import BookMark, MakeBookMark
|
||||
from django.views.generic.base import TemplateResponseMixin
|
||||
from django.views.generic.detail import SingleObjectMixin
|
||||
|
||||
from judge.dblock import LockModel
|
||||
from django.views.generic import View, ListView
|
||||
|
||||
|
||||
__all__ = [
|
||||
"dobookmark_page",
|
||||
"undobookmark_page",
|
||||
"BookMarkDetailView",
|
||||
]
|
||||
|
||||
|
||||
@login_required
|
||||
def bookmark_page(request, delta):
|
||||
if request.method != "POST":
|
||||
return HttpResponseForbidden()
|
||||
|
||||
if "id" not in request.POST:
|
||||
return HttpResponseBadRequest()
|
||||
|
||||
try:
|
||||
bookmark_id = int(request.POST["id"])
|
||||
bookmark_page = BookMark.objects.filter(id=bookmark_id)
|
||||
except ValueError:
|
||||
return HttpResponseBadRequest()
|
||||
else:
|
||||
if not bookmark_page.exists():
|
||||
raise Http404()
|
||||
|
||||
if delta == 0:
|
||||
bookmarklist = MakeBookMark.objects.filter(bookmark=bookmark_page.first(), user=request.profile)
|
||||
if not bookmarklist.exists():
|
||||
newbookmark = MakeBookMark(
|
||||
bookmark=bookmark_page.first(),
|
||||
user=request.profile,
|
||||
)
|
||||
newbookmark.save()
|
||||
else:
|
||||
bookmarklist = MakeBookMark.objects.filter(bookmark=bookmark_page.first(), user=request.profile)
|
||||
if bookmarklist.exists():
|
||||
bookmarklist.delete()
|
||||
|
||||
return HttpResponse("success", content_type="text/plain")
|
||||
|
||||
|
||||
def dobookmark_page(request):
|
||||
return bookmark_page(request, 0)
|
||||
|
||||
|
||||
def undobookmark_page(request):
|
||||
return bookmark_page(request, 1)
|
||||
|
||||
|
||||
class BookMarkDetailView(TemplateResponseMixin, SingleObjectMixin, View):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(BookMarkDetailView, self).get_context_data(**kwargs)
|
||||
queryset = BookMark.objects.filter(page=self.get_comment_page())
|
||||
if queryset.exists() == False:
|
||||
bookmark = BookMark(page=self.get_comment_page(),)
|
||||
bookmark.save()
|
||||
context["bookmark"] = queryset.first()
|
||||
return context
|
||||
|
||||
class BookMarkListView(ListView):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(BookMarkListView, self).get_context_data(**kwargs)
|
||||
for item in context["object_list"]:
|
||||
bookmark, _ = BookMark.objects.get_or_create(
|
||||
page=self.get_comment_page(item)
|
||||
)
|
||||
setattr(item, "bookmark", bookmark)
|
||||
return context
|
|
@ -83,6 +83,7 @@ from judge.utils.views import (
|
|||
)
|
||||
from judge.widgets import HeavyPreviewPageDownWidget
|
||||
from judge.views.pagevote import PageVoteDetailView
|
||||
from judge.views.bookmark import BookMarkDetailView
|
||||
|
||||
|
||||
__all__ = [
|
||||
|
@ -382,7 +383,7 @@ class ContestMixin(object):
|
|||
)
|
||||
|
||||
|
||||
class ContestDetail(ContestMixin, TitleMixin, CommentedDetailView, PageVoteDetailView):
|
||||
class ContestDetail(ContestMixin, TitleMixin, CommentedDetailView, PageVoteDetailView, BookMarkDetailView):
|
||||
template_name = "contest/contest.html"
|
||||
|
||||
def get_comment_page(self):
|
||||
|
|
|
@ -19,6 +19,8 @@ from django.views.generic import View, ListView
|
|||
__all__ = [
|
||||
"upvote_page",
|
||||
"downvote_page",
|
||||
"PageVoteDetailView",
|
||||
"PageVoteListView",
|
||||
]
|
||||
|
||||
|
||||
|
@ -97,14 +99,6 @@ class PageVoteDetailView(TemplateResponseMixin, SingleObjectMixin, View):
|
|||
raise NotImplementedError()
|
||||
return self.pagevote_page
|
||||
|
||||
# def get(self, request, *args, **kwargs):
|
||||
# self.object = self.get_object()
|
||||
# return self.render_to_response(
|
||||
# self.get_context_data(
|
||||
# object=self.object,
|
||||
# )
|
||||
# )
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(PageVoteDetailView, self).get_context_data(**kwargs)
|
||||
queryset = PageVote.objects.filter(page=self.get_comment_page())
|
||||
|
|
|
@ -87,6 +87,7 @@ from judge.utils.views import (
|
|||
)
|
||||
from judge.ml.collab_filter import CollabFilter
|
||||
from judge.views.pagevote import PageVoteDetailView, PageVoteListView
|
||||
from judge.views.bookmark import BookMarkDetailView, BookMarkListView
|
||||
|
||||
|
||||
def get_contest_problem(problem, profile):
|
||||
|
@ -178,6 +179,7 @@ class ProblemSolution(
|
|||
TitleMixin,
|
||||
CommentedDetailView,
|
||||
PageVoteDetailView,
|
||||
BookMarkDetailView,
|
||||
):
|
||||
context_object_name = "problem"
|
||||
template_name = "problem/editorial.html"
|
||||
|
@ -243,7 +245,7 @@ class ProblemRaw(
|
|||
|
||||
|
||||
class ProblemDetail(
|
||||
ProblemMixin, SolvedProblemMixin, CommentedDetailView, PageVoteDetailView
|
||||
ProblemMixin, SolvedProblemMixin, CommentedDetailView, PageVoteDetailView, BookMarkDetailView
|
||||
):
|
||||
context_object_name = "problem"
|
||||
template_name = "problem/problem.html"
|
||||
|
@ -813,7 +815,7 @@ class ProblemList(QueryStringSortMixin, TitleMixin, SolvedProblemMixin, ListView
|
|||
return HttpResponseRedirect(request.get_full_path())
|
||||
|
||||
|
||||
class ProblemFeed(ProblemList, PageVoteListView):
|
||||
class ProblemFeed(ProblemList, PageVoteListView, BookMarkListView):
|
||||
model = Problem
|
||||
context_object_name = "problems"
|
||||
template_name = "problem/feed.html"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue