class VideoEnForm(forms.Form): title = forms.CharField(required=True, error_messages=ERROR_MESSAGES) text = forms.CharField(required=True, error_messages=ERROR_MESSAGES) youtube_id = forms.CharField(required=True, error_messages=ERROR_MESSAGES) published_at = forms.DateTimeField(required=True, error_messages=ERROR_MESSAGES) introductions = forms.MultipleChoiceField( required=False, widget=forms.CheckboxSelectMultiple, choices=lambda: [(v.id, v.id) for v in IntroductionEn.get_all()], error_messages=ERROR_MESSAGES) topics = forms.MultipleChoiceField( required=False, widget=forms.CheckboxSelectMultiple, choices=lambda: [(v.id, v.id) for v in TopicEn.get_all()], error_messages=ERROR_MESSAGES) categories = forms.MultipleChoiceField( required=False, widget=forms.CheckboxSelectMultiple, choices=lambda: [(v.id, v.id) for v in Category.get_all()], error_messages=ERROR_MESSAGES) videos = forms.MultipleChoiceField( required=False, widget=forms.CheckboxSelectMultiple, choices=lambda: [(v.id, v.id) for v in VideoEn.get_all()], error_messages=ERROR_MESSAGES)
def get(_, lang, event_id): if lang == 'ja': cached_event = Cache.get('api_event_' + str(event_id)) if cached_event is None: event = Topic.get_event_published_by_id(event_id) if event is None: return JsonResponse({ 'message': 'Not Found' }, status=404) res = EventSerializer(event).data Cache.set('api_event_' + str(event_id), res) else: res = cached_event elif lang == 'en': cached_event_en = Cache.get('api_event_en_' + str(event_id)) if cached_event_en is None: event = TopicEn.get_event_published_by_id(event_id) if event is None: return JsonResponse({ 'message': 'Not Found' }, status=404) res = EventEnSerializer(event).data Cache.set('api_event_en_' + str(event_id), res) else: res = cached_event_en else: return JsonResponse({ 'message': 'Not Found' }, status=404) return JsonResponse(res, safe=False)
def get(request, lang, topic_id): if lang == 'ja': topic_model = Topic() else: topic_model = TopicEn() topic = topic_model.get_by_id(topic_id) if topic is None: raise Http404 title = topic.title if lang == 'ja': use_videos = topic.video_set.all().order_by('video_topic.id') use_images = topic.images.all().order_by('topic_images.id') else: use_videos = topic.videoen_set.all().order_by('video_en_topic.id') use_images = topic.images.all().order_by('topic_en_images.id') return TemplateResponse(request, 'topic.html', { 'title': title + ' | トピックス | FEED App 管理', 'topic': topic, 'use_videos': use_videos, 'use_images': use_images, 'error_messages': {}, 'form_data': {}, 'lang': lang, 'post_types': [ {'name': 'トピック', 'val': 'topic'}, {'name': 'イベント', 'val': 'event'}, ] })
def get(_, lang): if lang == 'ja': cached_topics = Cache.get('api_topics') if cached_topics is None: res = TopicsSerializer( Topic.get_topic_published_all(), many=True).data Cache.set('api_topics', res) else: res = cached_topics elif lang == 'en': cached_topics_en = Cache.get('api_topics_en') if cached_topics_en is None: res = TopicsEnSerializer( TopicEn.get_topic_published_all(), many=True).data Cache.set('api_topics_en', res) else: res = cached_topics_en else: return JsonResponse({ 'message': 'Not Found' }, status=404) return JsonResponse(res, safe=False)
def post(request, lang, topic_id): if lang == 'ja': topic_model = Topic() else: topic_model = TopicEn() topic = topic_model.get_by_id(topic_id) if topic is None: return JsonResponse({ 'status': 503, 'message': '投稿が存在しません'}, status=503) form = NewForm(request.POST) if form.errors: messages.add_message(request, messages.INFO, dict(form.errors.items())) if form.is_valid(): try: topic_model.new_change( form.cleaned_data.get('new'), topic_id) except: return JsonResponse({ 'status': 500, 'message': 'Not Change'}, status=500) else: return JsonResponse({ 'status': 500, 'message': get_error_message(request)}, status=500) return JsonResponse({ 'status': 200, 'message': 'Changed'}, status=200)
def get(_, lang, topic_id): if lang == 'ja': cached_topic = Cache.get('api_topic_' + str(topic_id)) if cached_topic is None: topic = Topic.get_topic_published_by_id(topic_id) if topic is None: return JsonResponse({ 'message': 'Not Found' }, status=404) res = TopicSerializer(topic).data Cache.set('api_topic_' + str(topic_id), res) else: res = cached_topic elif lang == 'en': cached_topic_en = Cache.get('api_topic_en_' + str(topic_id)) if cached_topic_en is None: topic = TopicEn.get_topic_published_by_id(topic_id) if topic is None: return JsonResponse({ 'message': 'Not Found' }, status=404) res = TopicEnSerializer(topic).data Cache.set('api_topic_en_' + str(topic_id), res) else: res = cached_topic_en else: return JsonResponse({ 'message': 'Not Found' }, status=404) return JsonResponse(res, safe=False)
def get(request, lang, paged=1): search = request.GET.get('search', '') if lang == 'ja': topic_model = Topic() else: topic_model = TopicEn() if search != '': total = topic_model.get_topic_search_all(search).count() else: total = topic_model.get_all().count() pagination = Pagination( page=paged, per_page=10, total=total, query=search, slug='/{}/admin/topics/page/'.format(lang)) if search != '': topics = topic_model.get_topic_search_all(search)[ pagination.offset:pagination.offset + pagination.per_page] else: topics = topic_model.get_all()[ pagination.offset:pagination.offset + pagination.per_page] return TemplateResponse(request, 'topics.html', { 'title': 'トピックス | FEED App 管理', 'topics': topics, 'information': pagination.information(), 'pagination': pagination, 'lang': lang, 'search': search, })
def get(_, lang, image_id): delete_flag = True image_model = Image() category_model = Category() if lang == 'ja': topic_model = Topic() introduction_model = Introduction() else: topic_model = TopicEn() introduction_model = IntroductionEn() try: image = image_model.get_by_image_id(image_id) topic_use_flag, topic_use_posts = topic_model.is_use_image( image.image_url, image.id) if topic_use_flag is True: delete_flag = False introduction_use_flag, introduction_use_posts = \ introduction_model.is_use_image(image.image_url) if introduction_use_flag is True: delete_flag = False category_use_flag, category_use_posts = category_model.is_use_image( image.image_url) if category_use_flag is True: delete_flag = False use_posts = ( topic_use_posts + category_use_posts + introduction_use_posts ) def get_unique_list(seq): seen = [] return [x for x in seq if x not in seen and not seen.append(x)] use_posts = get_unique_list(use_posts) return JsonResponse({ 'status': 200, 'delete_flag': delete_flag, 'use_posts': use_posts, }, status=200) except Exception as e: return JsonResponse({ 'status': 500, 'message': 'Exception Error ' + str(e) }, status=500)
def remove_video_self(cls, video_id): all_topic_ids = [v.id for v in TopicEn.get_all()] try: video = cls.objects.get(id=video_id) for v in all_topic_ids: video.video.remove(v) except: pass
def get(_, lang): if lang == 'ja': cached_home_events = Cache.get('api_home_events') if cached_home_events is None: events_res = EventsSerializer( Topic.get_event_home_published_all(), many=True).data Cache.set('api_home_events', events_res) else: events_res = cached_home_events cached_home_topics = Cache.get('api_home_topics') if cached_home_topics is None: topics_res = TopicsSerializer( Topic.get_topic_home_published_all(), many=True).data Cache.set('api_home_topics', topics_res) else: topics_res = cached_home_topics elif lang == 'en': cached_home_categories_en = Cache.get('api_home_categories_en') if cached_home_categories_en is None: events_res = EventsEnSerializer( TopicEn.get_event_home_published_all(), many=True).data Cache.set('api_categories_en', events_res) else: events_res = cached_home_categories_en cached_home_topics_en = Cache.get('api_home_topics_en') if cached_home_topics_en is None: topics_res = TopicsEnSerializer( TopicEn.get_topic_home_published_all(), many=True).data Cache.set('api_home_topics_en', topics_res) else: topics_res = cached_home_topics_en else: return JsonResponse({ 'message': 'Not Found' }, status=404) return JsonResponse({ 'events': events_res, 'topics': topics_res, }, safe=False)
def add_topic(cls, video_id, topic_ids): topic_ids = list(map(int, topic_ids)) all_topic_ids = [v.id for v in TopicEn.get_all()] try: video = cls.objects.get(id=video_id) for v in all_topic_ids: if v in topic_ids: try: video.topic.add(v) except: pass else: video.topic.remove(v) except: pass
def get(request, lang, paged=1): try: value = request.GET.get('value') if lang == 'ja': topic_model = Topic() else: topic_model = TopicEn() if value != '': total = topic_model.get_topic_search_all(value).count() else: total = topic_model.get_all().count() pagination = Pagination( page=paged, per_page=10, total=total, slug='') if value != '': topics = topic_model.get_topic_search_all(value)[ pagination.offset:pagination.offset + pagination.per_page] else: topics = topic_model.get_all()[ pagination.offset:pagination.offset + pagination.per_page] if lang == 'ja': res = TopicsSerializer(topics, many=True).data else: res = TopicsEnSerializer(topics, many=True).data return JsonResponse({ 'total': pagination.pages, 'paged': paged, 'topics': res, }, safe=False) except Exception as e: return JsonResponse({ 'status': 500, 'message': 'Exception Error ' + str(e) }, status=500)
def get(request, lang): if lang == 'ja': introduction_model = Introduction() video_model = Video() topic_model = Topic() else: introduction_model = IntroductionEn() video_model = VideoEn() topic_model = TopicEn() introductions = introduction_model.get_all()[:3] videos = video_model.get_all()[:3] topics = topic_model.get_all()[:3] return TemplateResponse(request, 'top.html', { 'title': 'FEED App 管理', 'introductions': introductions, 'videos': videos, 'topics': topics, 'lang': lang, })
def post(_, lang, topic_id): sid = transaction.savepoint() if lang == 'ja': topic_model = Topic() video_model = Video() else: topic_model = TopicEn() video_model = VideoEn() try: video_model.remove_video_from_topic(topic_id) topic_model.delete_topic(topic_id) topic_model.remove_image(topic_id) transaction.savepoint_commit(sid) except: transaction.savepoint_rollback(sid) pass return HttpResponseRedirect('/{}/admin/topics'.format(lang))
def post(request, lang): sid = transaction.savepoint() if lang == 'ja': form = TopicForm(request.POST) topic_model = Topic() video_model = Video() else: form = TopicEnForm(request.POST) topic_model = TopicEn() video_model = VideoEn() if form.errors: messages.add_message(request, messages.INFO, dict(form.errors.items())) if form.is_valid(): try: res_topic = topic_model.create_topic({ 'new': form.cleaned_data.get('new'), 'post_type': form.cleaned_data.get('post_type'), 'title': form.cleaned_data.get('title'), 'text': form.cleaned_data.get('text'), 'thumbnail': form.cleaned_data.get('thumbnail'), 'url': form.cleaned_data.get('url'), 'event_date': form.cleaned_data.get('event_date'), 'button_label': form.cleaned_data.get('button_label'), }) add_videos = form.cleaned_data.get('videos') if add_videos: video_model.add_video_from_topic(res_topic.id, add_videos) add_images = form.cleaned_data.get('images') if add_images: topic_model.add_image(res_topic.id, add_images) transaction.savepoint_commit(sid) return HttpResponseRedirect('/{}/admin/topics'.format(lang)) except: transaction.savepoint_rollback(sid) pass select_videos = [] if form.cleaned_data.get('videos'): video_ids = list(map(int, form.cleaned_data.get('videos'))) select_videos = video_model.get_by_ids(video_ids) select_images = [] if form.cleaned_data.get('images'): image_ids = list(map(int, form.cleaned_data.get('images'))) select_images = Image.get_by_ids(image_ids) return TemplateResponse( request, 'topic_create.html', { 'title': '新規投稿 | トピックス | FEED App 管理', 'select_videos': select_videos, 'select_images': select_images, 'form_data': form.cleaned_data, 'error_messages': get_error_message(request), 'lang': lang, 'post_types': [ {'name': 'トピック', 'val': 'topic'}, {'name': 'イベント', 'val': 'event'}, ] })
def post(request, lang): sid = transaction.savepoint() if lang == 'ja': form = VideoForm(request.POST) video_model = Video() else: form = VideoEnForm(request.POST) video_model = VideoEn() if form.errors: messages.add_message(request, messages.INFO, dict(form.errors.items())) if form.is_valid(): try: res_video = video_model.create_video({ 'published_at': form.cleaned_data.get('published_at'), 'title': form.cleaned_data.get('title'), 'text': form.cleaned_data.get('text'), 'youtube_id': form.cleaned_data.get('youtube_id'), }) add_introductions = form.cleaned_data.get('introductions') if add_introductions: video_model.add_introduction(res_video.id, add_introductions) add_categories = form.cleaned_data.get('categories') if add_categories: video_model.add_category(res_video.id, add_categories) add_topics = form.cleaned_data.get('topics') if add_topics: video_model.add_topic(res_video.id, add_topics) transaction.savepoint_commit(sid) return HttpResponseRedirect('/{}/admin/videos'.format(lang)) except: transaction.savepoint_rollback(sid) pass if lang == 'ja': topic_model = Topic() introduction_model = Introduction() else: topic_model = TopicEn() introduction_model = IntroductionEn() select_categories = [] if form.cleaned_data.get('categories'): category_ids = list(map(int, form.cleaned_data.get('categories'))) select_categories = Category.get_by_ids(category_ids) select_introductions = [] if form.cleaned_data.get('introductions'): title_ids = list(map(int, form.cleaned_data.get('introductions'))) select_introductions = introduction_model.get_by_ids(title_ids) select_topics = [] if form.cleaned_data.get('topics'): topic_ids = list(map(int, form.cleaned_data.get('topics'))) select_topics = topic_model.get_by_ids(topic_ids) select_videos = [] if form.cleaned_data.get('videos'): video_ids = list(map(int, form.cleaned_data.get('videos'))) select_videos = video_model.get_by_ids(video_ids) groups = Group.get_all() return TemplateResponse( request, 'video_create.html', { 'title': '新規投稿 | 動画 | FEED App 管理', 'select_categories': select_categories, 'select_introductions': select_introductions, 'select_topics': select_topics, 'select_videos': select_videos, 'groups': groups, 'form_data': form.cleaned_data, 'error_messages': get_error_message(request), 'lang': lang, })