예제 #1
0
파일: views.py 프로젝트: rhinon/rblog
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})
예제 #2
0
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()
예제 #3
0
 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
예제 #4
0
 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