Пример #1
0
def update_review(request, id):
    # owner check
    # edited time
    if request.method == 'GET':
        review = get_object_or_404(MovieReview, pk=id)
        if request.user != review.owner:
            return HttpResponseBadRequest()
        form = MovieReviewForm(instance=review)
        movie = review.movie
        return render(
            request, 'movies/create_update_review.html', {
                'form': form,
                'title': _("编辑评论"),
                'movie': movie,
                'submit_url': reverse("movies:update_review", args=[review.id
                                                                    ]),
            })
    elif request.method == 'POST':
        review = get_object_or_404(MovieReview, pk=id)
        if request.user != review.owner:
            return HttpResponseBadRequest()
        form = MovieReviewForm(request.POST, instance=review)
        if form.is_valid():
            form.instance.edited_time = timezone.now()
            form.save()
            if form.cleaned_data['share_to_mastodon']:
                if form.cleaned_data['is_private']:
                    visibility = TootVisibilityEnum.PRIVATE
                else:
                    visibility = TootVisibilityEnum.UNLISTED
                url = "https://" + request.get_host() + reverse(
                    "movies:retrieve_review", args=[form.instance.id])
                words = "发布了关于" + f"《{form.instance.movie.title}》" + "的评论"
                # tags = MASTODON_TAGS % {'category': '书', 'type': '评论'}
                tags = ''
                content = words + '\n' + url + \
                    '\n' + form.cleaned_data['title'] + '\n' + tags
                response = post_toot(request.user.mastodon_site, content,
                                     visibility,
                                     request.session['oauth_token'])
                if response.status_code != 200:
                    mastodon_logger.error(
                        f"CODE:{response.status_code} {response.text}")
                    return HttpResponseServerError(
                        "publishing mastodon status failed")
            return redirect(
                reverse("movies:retrieve_review", args=[form.instance.id]))
        else:
            return HttpResponseBadRequest()
    else:
        return HttpResponseBadRequest()
Пример #2
0
def create_review(request, game_id):
    if request.method == 'GET':
        form = GameReviewForm(initial={'game': game_id})
        game = get_object_or_404(Game, pk=game_id)
        return render(
            request, 'games/create_update_review.html', {
                'form': form,
                'title': _("添加评论"),
                'game': game,
                'submit_url': reverse("games:create_review", args=[game_id]),
            })
    elif request.method == 'POST':
        form = GameReviewForm(request.POST)
        if form.is_valid():
            form.instance.owner = request.user
            form.save()
            if form.cleaned_data['share_to_mastodon']:
                if form.cleaned_data['is_private']:
                    visibility = TootVisibilityEnum.PRIVATE
                else:
                    visibility = TootVisibilityEnum.UNLISTED
                url = "https://" + request.get_host() + reverse(
                    "games:retrieve_review", args=[form.instance.id])
                words = "发布了关于" + f"《{form.instance.game.title}》" + "的评论"
                # tags = MASTODON_TAGS % {'category': '书', 'type': '评论'}
                tags = ''
                content = words + '\n' + url + \
                    '\n' + form.cleaned_data['title'] + '\n' + tags
                response = post_toot(request.user.mastodon_site, content,
                                     visibility,
                                     request.session['oauth_token'])
                if response.status_code != 200:
                    mastodon_logger.error(
                        f"CODE:{response.status_code} {response.text}")
                    return HttpResponseServerError(
                        "publishing mastodon status failed")
            return redirect(
                reverse("games:retrieve_review", args=[form.instance.id]))
        else:
            return HttpResponseBadRequest()
    else:
        return HttpResponseBadRequest()
Пример #3
0
def create_update_mark(request):
    # check list:
    # clean rating if is wish
    # transaction on updating movie rating
    # owner check(guarantee)
    if request.method == 'POST':
        pk = request.POST.get('id')
        old_rating = None
        old_tags = None
        if pk:
            mark = get_object_or_404(MovieMark, pk=pk)
            old_rating = mark.rating
            old_tags = mark.moviemark_tags.all()
            # update
            form = MovieMarkForm(request.POST, instance=mark)
        else:
            # create
            form = MovieMarkForm(request.POST)

        if form.is_valid():
            if form.instance.status == MarkStatusEnum.WISH.value:
                form.instance.rating = None
                form.cleaned_data['rating'] = None
            form.instance.owner = request.user
            form.instance.edited_time = timezone.now()
            movie = form.instance.movie

            try:
                with transaction.atomic():
                    # update movie rating
                    movie.update_rating(old_rating, form.instance.rating)
                    form.save()
                    # update tags
                    if old_tags:
                        for tag in old_tags:
                            tag.delete()
                    if form.cleaned_data['tags']:
                        for tag in form.cleaned_data['tags']:
                            MovieTag.objects.create(content=tag,
                                                    movie=movie,
                                                    mark=form.instance)
            except IntegrityError as e:
                return HttpResponseServerError("integrity error")
                logger.error(e.__str__())

            if form.cleaned_data['share_to_mastodon']:
                if form.cleaned_data['is_private']:
                    visibility = TootVisibilityEnum.PRIVATE
                else:
                    visibility = TootVisibilityEnum.UNLISTED
                url = "https://" + request.get_host() + reverse(
                    "movies:retrieve", args=[movie.id])
                words = MovieMarkStatusTranslator(int(form.cleaned_data['status'])) +\
                    f"《{movie.title}》" + \
                    rating_to_emoji(form.cleaned_data['rating'])

                # tags = MASTODON_TAGS % {'category': '书', 'type': '标记'}
                tags = ''
                content = words + '\n' + url + '\n' + \
                    form.cleaned_data['text'] + '\n' + tags
                response = post_toot(request.user.mastodon_site, content,
                                     visibility,
                                     request.session['oauth_token'])
                if response.status_code != 200:
                    mastodon_logger.error(
                        f"CODE:{response.status_code} {response.text}")
                    return HttpResponseServerError(
                        "publishing mastodon status failed")
        else:
            return HttpResponseBadRequest("invalid form data")

        return redirect(
            reverse("movies:retrieve", args=[form.instance.movie.id]))
    else:
        return HttpResponseBadRequest("invalid method")