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()
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()
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")