def new_post(request): if not request.user.is_authenticated(): return redirect('/admin/login') post = Post() categories = Category.objects.all() if request.method == 'POST': print request.POST post.user = request.user post.title = request.POST.get('post_title','') post.text = request.POST.get('post_text','') post.category_id = request.POST.get('post_category',0) post.save() return redirect('/blog/%s' % post.category.name) return render(request, 'main/posts/new.html', {'post': post, 'categories': categories})
def callback(request): def startButton(reply_token, send_text): try: reply = line_bot_api.reply_message(reply_token, [ TextSendMessage(send_text), TemplateSendMessage(alt_text='メニューを更新', template=ButtonsTemplate( title='メニューを更新', text='更新ボタンを押してください', actions=[ PostbackTemplateAction( label='メニューを更新', data='start'), ])) ]) except LineBotApiError: return HttpResponseBadRequest() return reply def confirmButton(reply_token, send_text): try: reply = line_bot_api.reply_message(reply_token, [ TextSendMessage(send_text), TemplateSendMessage( alt_text='確認', template=ButtonsTemplate( title='確認', text='選択してください', actions=[ PostbackTemplateAction(label='更新', data='save'), PostbackTemplateAction(label='中止', data='quit'), ])) ]) except LineBotApiError: return HttpResponseBadRequest() return reply if request.method == 'POST': body = request.body.decode('utf-8') signature = request.META['HTTP_X_LINE_SIGNATURE'] try: events = parser.parse(body, signature) except InvalidSignatureError: return HttpResponseForbidden() except LineBotApiError: return HttpResponseBadRequest() for event in events: posts = Post.objects.values('user_id').order_by('-created_at') users = [] for post in posts: users.append(post['user_id']) has_created = event.source.user_id in users if has_created == True: post = Post.objects.filter( user_id=event.source.user_id).order_by('-created_at')[0] if isinstance(event, FollowEvent): startButton( event.reply_token, 'フォローありがとうございます!\nメニューを更新したい場合、下のボタンを押してください\nなお、以下がサイトのURLです\n\nhttps://{}' .format(settings.DOMAIN_NAME)) elif isinstance(event, PostbackEvent): if event.postback.data == 'start': if has_created == False: post = Post(user_id=event.source.user_id, status=1) post.save() try: line_bot_api.reply_message( event.reply_token, TextSendMessage('メニューの更新ですね\nまずは料理名を入力してください')) except LineBotApiError: return HttpResponseBadRequest() else: if post.status == 0: post = Post(user_id=event.source.user_id, status=1) post.save() try: line_bot_api.reply_message( event.reply_token, TextSendMessage( 'メニューの更新ですね\nまずは料理名を入力してください')) except LineBotApiError: return HttpResponseBadRequest() elif event.postback.data == 'save': if has_created == True: if post.status == 5: post.status = 0 post.save() try: line_bot_api.reply_message( event.reply_token, TextSendMessage( 'サイトが更新されました\n\nhttps://{}'.format( settings.DOMAIN_NAME))) except LineBotApiError: return HttpResponseBadRequest() elif event.postback.data == 'quit': if has_created == True: if post.status == 5: post.image_path.delete() post.delete() try: line_bot_api.reply_message( event.reply_token, TextSendMessage('操作中のデータを削除しました')) except LineBotApiError: return HttpResponseBadRequest() elif isinstance(event, MessageEvent): if isinstance(event.message, TextMessage): if event.message.text == 'ニッポンポン': del_posts = Post.objects.exclude( Q(image_path__contains='ebi-fry') | Q(image_path__contains='katsu-don') | Q(image_path__contains='beef-stew')) for del_post in del_posts: del_post.image_path.delete() Post.objects.all().delete() try: line_bot_api.reply_message( event.reply_token, TextSendMessage('合衆国ニッポンポン!!!')) except LineBotApiError: return HttpResponseBadRequest() elif event.message.text == 'ナナリー': del_posts = Post.objects.exclude( Q(image_path__contains='ebi-fry') | Q(image_path__contains='katsu-don') | Q(image_path__contains='beef-stew')) for del_post in del_posts: del_post.image_path.delete() Post.objects.all().delete() Post.objects.bulk_create([ Post(title='エビフライ', description='プリプリのエビをカリカリの衣で包んだ至高の一品', price='850', image_path='img/post/ebi-fry.jpg', status=0), Post(title='シチュー', description='バラ肉をルーとともにホロホロになるまで煮込んだビーフシチュー', price='1200', image_path='img/post/beef-stew.jpg', status=0), Post(title='かつ丼', description='揚げたてのカツをふんわり半熟卵でとじた定番の一品', price='750', image_path='img/post/katsu-don.jpg', status=0), ]) try: line_bot_api.reply_message( event.reply_token, TextSendMessage('ナナリーーーーーッッ!!!!!')) except LineBotApiError: return HttpResponseBadRequest() if has_created == True: if post.status == 0: startButton( event.reply_token, 'ご利用ありがとうございます\nメニューを更新したい場合、下のボタンを押してください\nなお、以下がサイトのURLです\n\nhttps://{}' .format(settings.DOMAIN_NAME)) elif post.status == 1: post.title = event.message.text post.status = 2 post.save() try: line_bot_api.reply_message( event.reply_token, TextSendMessage('次はメニューの説明文を入力してください'), ) except LineBotApiError: return HttpResponseBadRequest() elif post.status == 2: post.description = event.message.text post.status = 3 post.save() try: line_bot_api.reply_message( event.reply_token, TextSendMessage('次は値段を入力してください'), ) except LineBotApiError: return HttpResponseBadRequest() elif post.status == 3: try: post.price = int(event.message.text) post.status = 4 post.save() except: try: line_bot_api.reply_message( event.reply_token, TextSendMessage('半角数字を入力してください'), ) except LineBotApiError: return HttpResponseBadRequest() try: line_bot_api.reply_message( event.reply_token, TextSendMessage('次は掲載する画像を送信してください'), ) except LineBotApiError: return HttpResponseBadRequest() elif post.status == 4: try: line_bot_api.reply_message( event.reply_token, TextSendMessage('画像を送信してください'), ) except LineBotApiError: return HttpResponseBadRequest() else: startButton( event.reply_token, 'ご利用ありがとうございます\nメニューを更新したい場合、下のボタンを押してください\nなお、以下がサイトのURLです\n\nhttps://{}' .format(settings.DOMAIN_NAME)) elif isinstance(event.message, ImageMessage): if has_created == True: if post.status == 4: try: message_content = line_bot_api.get_message_content( event.message.id) with NamedTemporaryFile(mode='w+b') as f: for chunk in message_content.iter_content( ): f.write(chunk) post.image_path.save(event.message.id + '.jpg', File(f), save=True) post.status = 5 post.save() except: traceback.print_exc() try: line_bot_api.reply_message( event.reply_token, TextSendMessage('画像を保存できませんでした'), ) except LineBotApiError: return HttpResponseBadRequest() confirmButton( event.reply_token, '項目は以上です\nこれでよろしければ「保存」、更新を中止したい場合は「中止」を押してください' ) elif post.status == 0: startButton( event.reply_token, 'ご利用ありがとうございます\nメニューを更新したい場合、下のボタンを押してください\nなお、以下がサイトのURLです\n\nhttps://{}' .format(settings.DOMAIN_NAME)) elif post.status == 5: confirmButton(event.reply_token, 'すでに画像は送信されています\n更新または中止を選択してください') else: try: line_bot_api.reply_message( event.reply_token, TextSendMessage('テキストを入力してください'), ) except LineBotApiError: return HttpResponseBadRequest() else: startButton( event.reply_token, 'ご利用ありがとうございます\nメニューを更新したい場合、下のボタンを押してください\nなお、以下がサイトのURLです\n\nhttps://{}' .format(settings.DOMAIN_NAME)) return HttpResponse() else: return HttpResponseBadRequest()
def handle(self, **options): Menu.objects.get_or_create( name='menu' ) Menu.objects.get_or_create( name='bottom_menu' ) post_count = int(options.get('post-count', 100)) comment_limit = int(options.get('comment-limit', 100)) random_rate = lambda: int(random() * 1000) get_rand = lambda _list: _list[int(random()*len(_list))] blog_types = map( lambda type: BlogType.objects.get_or_create(name=type)[0], (getattr(settings, 'DEFAULT_BLOG_TYPE', 'main'), 'talks', 'personal',) ) random_type = partial(get_rand, blog_types) users = map( lambda username: User.objects.get_or_create(username=username)[0], ('bob', 'paul', 'mike', 'anna', 'sasha', 'katya', 'masha',) ) map( lambda user: Profile.objects.get_or_create( user=user, rate=random_rate(), posts_rate=random_rate(), comments_rate=random_rate(), blogs_rate=random_rate(), )[0], users ) random_user = partial(get_rand, users) blogs = map( lambda (blog_name, url): Blog.objects.get_or_create( name=blog_name, owner=random_user(), type=random_type(), description=url, rate=random_rate(), rate_count=random_rate(), )[0], ( (u'астрономии', 'astronomy.xml'), (u'геологии', 'geology.xml'), (u'гироскопии', 'gyroscope.xml'), (u'литературоведению', 'literature.xml'), (u'маркетингу', 'marketing.xml'), (u'математике', 'mathematics.xml'), (u'музыковедению', 'music.xml'), (u'политологии', 'polit.xml'), (u'почвоведению', 'agrobiologia.xml'), (u'правоведению', 'law.xml'), (u'психологии', 'psychology.xml'), (u'страноведению', 'geography.xml'), (u'физике', 'physics.xml'), (u'философии', 'philosophy.xml'), (u'химии', 'chemistry.xml'), (u'эстетике', 'estetica.xml'), ) ) random_blog = partial(get_rand, blogs) random_comment = lambda limit: Post.objects.all()[int(random() * limit)].title for counter in range(post_count): post = Post() post.author = random_user() post.blog = random_blog() post.title, post.text = obtain_spring(post.blog.description) post.rate = random_rate() post.rate_count = random_rate() post.save(edit=False, retry=True) post.set_tags(','.join(post.title.split())) last = root = post.create_comment_root() limit = int(random() * comment_limit) while limit: if not int(random()*3): last = root last = last.add_child( post=post, author=random_user(), text=random_comment(counter), created=datetime.now(), rate=random_rate(), rate_count=random_rate() ) limit -= 1
def handle(self, **options): Menu.objects.get_or_create(name='menu') Menu.objects.get_or_create(name='bottom_menu') post_count = int(options.get('post-count', 100)) comment_limit = int(options.get('comment-limit', 100)) random_rate = lambda: int(random() * 1000) get_rand = lambda _list: _list[int(random() * len(_list))] blog_types = map( lambda type: BlogType.objects.get_or_create(name=type)[0], ( getattr(settings, 'DEFAULT_BLOG_TYPE', 'main'), 'talks', 'personal', )) random_type = partial(get_rand, blog_types) users = map( lambda username: User.objects.get_or_create(username=username)[0], ( 'bob', 'paul', 'mike', 'anna', 'sasha', 'katya', 'masha', )) map( lambda user: Profile.objects.get_or_create( user=user, rate=random_rate(), posts_rate=random_rate(), comments_rate=random_rate(), blogs_rate=random_rate(), )[0], users) random_user = partial(get_rand, users) blogs = map( lambda (blog_name, url): Blog.objects.get_or_create( name=blog_name, owner=random_user(), type=random_type(), description=url, rate=random_rate(), rate_count=random_rate(), )[0], ( (u'астрономии', 'astronomy.xml'), (u'геологии', 'geology.xml'), (u'гироскопии', 'gyroscope.xml'), (u'литературоведению', 'literature.xml'), (u'маркетингу', 'marketing.xml'), (u'математике', 'mathematics.xml'), (u'музыковедению', 'music.xml'), (u'политологии', 'polit.xml'), (u'почвоведению', 'agrobiologia.xml'), (u'правоведению', 'law.xml'), (u'психологии', 'psychology.xml'), (u'страноведению', 'geography.xml'), (u'физике', 'physics.xml'), (u'философии', 'philosophy.xml'), (u'химии', 'chemistry.xml'), (u'эстетике', 'estetica.xml'), )) random_blog = partial(get_rand, blogs) random_comment = lambda limit: Post.objects.all()[int(random() * limit) ].title for counter in range(post_count): post = Post() post.author = random_user() post.blog = random_blog() post.title, post.text = obtain_spring(post.blog.description) post.rate = random_rate() post.rate_count = random_rate() post.save(edit=False, retry=True) post.set_tags(','.join(post.title.split())) last = root = post.create_comment_root() limit = int(random() * comment_limit) while limit: if not int(random() * 3): last = root last = last.add_child(post=post, author=random_user(), text=random_comment(counter), created=datetime.now(), rate=random_rate(), rate_count=random_rate()) limit -= 1