Beispiel #1
0
async def before_request(request: Request):
    if request.path.startswith('/build') or request.path in ['/api/login', '/api/register', '/api/is_authenticated']:
        return None
    token, user_id = authenticate(request)
    if request.path in ['/', '/login', '/register']:
        if user_id and request.path == '/login':
            return redirect('/home')
        return home(request)
    else:
        if not user_id:
            return redirect('/login')
        elif not request.path.startswith('/api'):
            return home(request)
Beispiel #2
0
async def user(request, urltype, steamid):
    path = urlparse(request.url).path

    currentuser = await getcurrentuser(request)
    if currentuser and currentuser['url'] == path:
        user = currentuser
    else:
        user = await getuser(steamid, urltype)

    if user:
        if user['url'] != path:
            return redirect(user['url'])

        items = await getitems(item['index'] for item in user['wishlist'])

        for i, item in enumerate(items):
            item.update({'i': i})
            item.update(user['wishlist'][i])

    else:
        abort(404)

    return await render('user.html',
                        user=user,
                        items=items)
Beispiel #3
0
 def redirect(self, request, path):
     if request.query_string:
         path = '{}?{}'.format(
             path, request.query_string
         )
     r = response.redirect(path)
     r.headers['Link'] = '<{}>; rel=preload'.format(path)
     if self.ds.cors:
         r.headers['Access-Control-Allow-Origin'] = '*'
     return r
Beispiel #4
0
async def seek(request):
    import time
    begin = time.time()
    
    keyword = request.args.get('kw', '').strip()
    if not keyword:
        return redirect('/books/search')
    
    is_contain_chinese = chinese_contain_check(keyword)
    
    book_name = f'{keyword} 小说 阅读 最新'
    
    # print("request-"+str(request))
    # print("request.url-"+str(request.url))
    # print("request.args-"+str(request.args))
    # print("request.json-"+str(request.json))
    # print("request.raw_args-"+str(request.raw_args))
    # print("request.files-"+str(request.files))
    # print("request.form-"+str(request.form))
    # print("request.body-"+str(request.body))
    # print("request.ip-"+str(request.ip))
    # print("request.app-"+str(request.app))
    # print("request.scheme-"+str(request.scheme))
    # print("request.host-"+str(request.host))
    # print("request.path-"+str(request.path))
    # print("request.query_string-"+str(request.query_string))
    # print("request.uri_template-"+str(request.uri_template))
    
    use_engine = None
    seek_results = None
    
    if is_contain_chinese:
        for engine in ENGINE_PRIORITY.get('chinese'):
            if engine == 'baidu':
                seek_results = ''
                
                if seek_results:
                    break
    else:
        for engine in ENGINE_PRIORITY.get('non-chinese'):
            await mongo_obj.search_records.update_one({'keyword': keyword, 'use_engine': use_engine}, {'$inc': {'count': 1}}, upsert=True)

        
    
    end =  time.time()
    seek_time = '%.2f' % (end - begin)
    return page('books/search.html',
                active_page = "/books/seek",
                seek_results = seek_results,
                seek_time = seek_time
    )
Beispiel #5
0
async def get_candidate(request, candidate_id):
    async with app.mysql.acquire() as conn:
        async with conn.cursor() as cur:
            await cur.execute('SELECT * FROM candidates WHERE id = {}'.format(candidate_id))
            candidate = await cur.fetchone()
            if not candidate:
                return redirect('/')

            await cur.execute('SELECT COUNT(*) AS count FROM votes WHERE candidate_id = {}'.format(candidate_id))
            votes = (await cur.fetchone())['count']
            keywords = await get_voice_of_supporter([candidate_id])
            return render_template('candidate.html',
                                   request,
                                   candidate=candidate,
                                   votes=votes,
                                   keywords=keywords)
Beispiel #6
0
def login(request):
    sid = b64encode(os.urandom(16)).decode()
    session = {'sid': sid}

    c = consumer.Consumer(session, None)
    a = c.begin('http://steamcommunity.com/openid')
    url = a.redirectURL(config.homepage, login_verify_url)

    response = redirect(url)

    response.cookies['sid'] = sid
    response.cookies['sid']['expires'] = datetime.now() + session_age
    response.cookies['sid']['httponly'] = True
    response.cookies['sid']['secure'] = True

    return response
Beispiel #7
0
async def login_verify(request):
    sid = request.cookies.get('sid')
    session = {'sid': sid}

    c = consumer.Consumer(session, None)
    info = c.complete(
        {k: request.args.get(k) for k in request.args},
        login_verify_url
    )

    if info.status == consumer.SUCCESS:
        steamid = request.args.get('openid.claimed_id').split('/')[-1]
        user = await getuser(steamid, create=True)
        await store.setex(getsessionkey(sid), int(session_age.total_seconds()),
                          user['id'])

    return redirect('/')
Beispiel #8
0
async def item(request, **kwargs):
    slug = kwargs.get('slug')
    index = kwargs.get('index')
    is_json = kwargs.get('is_json')

    item = await (getitembyslug(slug) if slug else getitem(index))

    if item and index is not None and not is_json:
        slug = slugify(item['name'])
        return redirect(f'/{slug}', status=301)

    if not item:
        if is_json:
            return tojson({'error': 'Item does not exist.'})
        abort(404)

    if is_json:
        return tojson(item)
    else:
        name = item['name']
        tags_text = '/'.join(item['tags']) if item['tags'] else 'item'
        classes_text = getlistastext(item['classes'], 'all classes')

        description = f'{name} is a TF2 {tags_text} for {classes_text}.'

        if item['description']:
            desc_parts = item['description'].partition('---')

            desc = desc_parts[0].replace('\n', ' ')
            bundle_items = getlistastext(desc_parts[2].split('\n'))

            description = (
                f"{description} {desc} {bundle_items}" if bundle_items else
                f"{description} {desc}"
            ).rstrip(':')

            if description[-1] not in ('.', '?', '!'):
                description += '.'

        return await render('item.html',
                            item=item,
                            description=description)
Beispiel #9
0
async def owllook_content(request):
    """
    返回小说章节内容页
    : content_url   这决定当前U页面url的生成方式
    : url           章节内容页源url
    : chapter_url   小说目录源url
    : novels_name   小说名称
    :return: 小说章节内容页
    """
    url = request.args.get('url', None)
    chapter_url = request.args.get('chapter_url', None)
    novels_name = request.args.get('novels_name', None)
    name = request.args.get('name', '')
    is_ajax = request.args.get('is_ajax', '')
    # 当小说内容url不在解析规则内 跳转到原本url
    netloc = get_netloc(url)
    if netloc not in RULES.keys():
        return redirect(url)
    user = request['session'].get('user', None)
    # 拼接小说目录url
    book_url = "/chapter?url={chapter_url}&novels_name={novels_name}".format(
        chapter_url=chapter_url, novels_name=novels_name)
    motor_db = motor_base.get_db()
    if url == chapter_url:
        # 阅读到最后章节时候 在数据库中保存最新阅读章节
        if user and is_ajax == "owl_cache":
            owl_referer = request.headers.get('Referer',
                                              '').split('owllook_content')[1]
            if owl_referer:
                latest_read = "/owllook_content" + owl_referer
                await motor_db.user_message.update_one(
                    {
                        'user': user,
                        'books_url.book_url': book_url
                    }, {'$set': {
                        'books_url.$.last_read_url': latest_read
                    }})
        return redirect(book_url)
    content_url = RULES[netloc].content_url
    content_data = await cache_owllook_novels_content(url=url, netloc=netloc)
    if content_data:
        try:
            content = content_data.get('content', '获取失败')
            next_chapter = content_data.get('next_chapter', [])
            title = content_data.get('title', '').replace(novels_name, '')
            name = title if title else name
            # 拼接小说书签url
            bookmark_url = "{path}?url={url}&name={name}&chapter_url={chapter_url}&novels_name={novels_name}".format(
                path=request.path,
                url=url,
                name=name,
                chapter_url=chapter_url,
                novels_name=novels_name)
            # 破坏广告链接
            content = str(content).strip('[]Jjs,').replace(
                'http', 'hs').replace('.js', '').replace('();', '')
            if user:
                bookmark = await motor_db.user_message.find_one({
                    'user':
                    user,
                    'bookmarks.bookmark':
                    bookmark_url
                })
                book = await motor_db.user_message.find_one({
                    'user':
                    user,
                    'books_url.book_url':
                    book_url
                })
                bookmark = 1 if bookmark else 0
                if book:
                    # 当书架中存在该书源
                    book = 1
                    # 保存最后一次阅读记录
                    if is_ajax == "owl_cache":
                        owl_referer = request.headers.get(
                            'Referer',
                            bookmark_url).split('owllook_content')[1]
                        latest_read = "/owllook_content" + owl_referer
                        await motor_db.user_message.update_one(
                            {
                                'user': user,
                                'books_url.book_url': book_url
                            }, {
                                '$set': {
                                    'books_url.$.last_read_url': latest_read
                                }
                            })
                else:
                    book = 0
                if is_ajax == "owl_cache":
                    owl_cache_dict = dict(is_login=1,
                                          user=user,
                                          name=name,
                                          url=url,
                                          bookmark=bookmark,
                                          book=book,
                                          content_url=content_url,
                                          chapter_url=chapter_url,
                                          novels_name=novels_name,
                                          next_chapter=next_chapter,
                                          soup=content)
                    return json(owl_cache_dict)
                return template('content.html',
                                is_login=1,
                                user=user,
                                name=name,
                                url=url,
                                bookmark=bookmark,
                                book=book,
                                content_url=content_url,
                                chapter_url=chapter_url,
                                novels_name=novels_name,
                                next_chapter=next_chapter,
                                soup=content)
            else:
                if is_ajax == "owl_cache":
                    owl_cache_dict = dict(is_login=0,
                                          name=name,
                                          url=url,
                                          bookmark=0,
                                          book=0,
                                          content_url=content_url,
                                          chapter_url=chapter_url,
                                          novels_name=novels_name,
                                          next_chapter=next_chapter,
                                          soup=content)
                    return json(owl_cache_dict)
                return template('content.html',
                                is_login=0,
                                name=name,
                                url=url,
                                bookmark=0,
                                book=0,
                                content_url=content_url,
                                chapter_url=chapter_url,
                                novels_name=novels_name,
                                next_chapter=next_chapter,
                                soup=content)
        except Exception as e:
            LOGGER.exception(e)
            return redirect(book_url)
    else:
        if user:
            is_login = 1
            user = user
            return template('parse_error.html',
                            url=url,
                            is_login=is_login,
                            user=user)
        else:
            is_login = 0
            return template('parse_error.html', url=url, is_login=is_login)
Beispiel #10
0
def index(request):
    return redirect("index.html")
Beispiel #11
0
async def handler(request):
    return response.redirect("/sleep/3")
Beispiel #12
0
async def index(request):
    return redirect('/quiz/list')
Beispiel #13
0
async def default(request, query):
    return redirect(f"/p/{query}", status=301)
Beispiel #14
0
async def handle_request(request):
    response = redirect('/')
    del response.cookies['username']
    return response
Beispiel #15
0
async def search_user(request):
    user = request['session'].get('user', None)
    name = request.args.get('ss', None)
    if user and name:
        try:
            motor_db = motor_base.get_db()
            data = await motor_db.user_message.find_one({'user': name})
            books_url = data.get('books_url', None) if data else None
            if books_url:
                result = []
                for i in books_url:
                    item_result = {}
                    book_url = i.get('book_url', None)
                    last_read_url = i.get("last_read_url", "")
                    book_query = parse_qs(urlparse(book_url).query)
                    last_read_chapter_name = parse_qs(last_read_url).get(
                        'name', ['暂无'])[0]
                    item_result['novels_name'] = book_query.get(
                        'novels_name', '')[0] if book_query.get(
                            'novels_name', '') else ''
                    item_result['book_url'] = book_url
                    latest_data = await motor_db.latest_chapter.find_one(
                        {'owllook_chapter_url': book_url})
                    if latest_data:
                        item_result['latest_chapter_name'] = latest_data[
                            'data']['latest_chapter_name']
                        item_result['owllook_content_url'] = latest_data[
                            'data']['owllook_content_url']
                    else:
                        get_latest_data = await get_the_latest_chapter(book_url
                                                                       ) or {}
                        item_result[
                            'latest_chapter_name'] = get_latest_data.get(
                                'latest_chapter_name', '暂未获取,请反馈')
                        item_result[
                            'owllook_content_url'] = get_latest_data.get(
                                'owllook_content_url', '')
                    item_result['add_time'] = i.get('add_time', '')
                    item_result[
                        "last_read_url"] = last_read_url if last_read_url else book_url
                    item_result[
                        "last_read_chapter_name"] = last_read_chapter_name
                    result.append(item_result)
                return template('search_user.html',
                                title='{name}的书架'.format(name=name),
                                is_login=1,
                                user=user,
                                username=name,
                                is_bookmark=1,
                                result=result[::-1])
            else:
                return template('search_user.html',
                                title='{name}的书架'.format(name=name),
                                is_login=1,
                                user=user,
                                is_bookmark=0)
        except Exception as e:
            LOGGER.error(e)
            return redirect('/')
    else:
        return redirect('/')
Beispiel #16
0
async def lcxs(request):
    user = request['session'].get('user', None)
    if user:
        return template('admin_lcxs.html', is_login=1, user=user)
    else:
        return redirect('/')
Beispiel #17
0
async def check_request(request):
    host = request.headers.get('host', None)
    if not host or host not in HOST:
        return redirect('http://www.google.com')
Beispiel #18
0
async def index(request):
    return redirect('/index.html')
Beispiel #19
0
def index(request):
    return response.redirect(
        os.getenv("REDIRECT_URL",
                  "https://github.com/Magisk-Modules-Repo/Pix3lify"))
Beispiel #20
0
async def search(request, **kwargs):
    user = asyncio.ensure_future(getcurrentuser(request))

    slug = kwargs.get('slug')
    is_json = kwargs.get('is_json', '')

    query = slug.replace('-', ' ') if slug else request.args.get('q')

    if not query:
        if is_json:
            return {'error': 'No query provided.'}
        return redirect('/')

    elif query == 'random':
        index = await store.srandmember('items:indexes')
        return redirect('/{}{}'.format(index, is_json))

    itemnames = await store.hgetall('items:names')

    if query in itemnames:
        return redirect('/{}'.format(itemnames[query]))

    t0 = time.time()

    classes = set()
    tags = set()

    priceviz = False

    if query == 'all':
        items = store.Hashes(
            [getitemkey(k.decode()) for k in await store.sort('items')])
        results = [tf2search.getsearchresult(items=items)]
    else:
        sources = ('backpack.tf', 'trade.tf')
        pricesource = request.cookies.get('price_source')
        if pricesource not in sources:
            pricesource = sources[0]

        items = {
            item['index']: item async for item in store.Hashes([
                getitemkey(143),  # Earbuds
                getitemkey(5021),  # Key
                getitemkey(5002),  # Refined
                getitemkey(5001),  # Reclaimed
                getitemkey(5000),  # Scrap
                getitemkey(0)  # Weapon
            ])
        }
        results = tf2search.visualizeprice(query, items, pricesource)

        input_ = tf2search.parseinput(query)
        classes = input_['classes']
        tags = input_['tags']

        if results is not None:
            if len(results) != 0:
                priceviz = True
                if not is_json:
                    items = []
                    for item in results[0]['items']:
                        items.extend([item['item']] * item['count'])
                    results[0]['items'] = items

        elif classes or tags:
            results = await getresults(classes, tags)

        else:
            itemsdict = await store.SearchHashSet(
                'items', getitemkey,
                ('index', 'name', 'image', 'classes', 'tags', 'marketprice'),
                int)

            itemsets = await store.get('items:sets')
            bundles = await store.get('items:bundles')

            results = tf2search.search(query, itemsdict, itemnames,
                                       itemsets, bundles, pricesource)

            for result in results:
                result['items'] = store.Hashes(
                    [h.key for h in result['items']])

    t1 = time.time()

    count = sum(len(result['items']) for result in results)

    all_classes = list(tf2api.getallclasses().keys())
    classes_text = getlistastext(sorted(classes, key=all_classes.index))
    tags_text = getlistastext(sorted(tags))

    if query == 'all':
        description = f'A list of all {count:,} items in TF2.'
    elif classes and tags:
        description = (
            f'A list of the {count:,} {tags_text} items for {classes_text}'
            ' in TF2.'
        )
    elif classes:
        description = (
            f'A list of the {count:,} items for {classes_text} in TF2.'
        )
    elif tags:
        description = f'A list of the {count:,} {tags_text} items in TF2.'
    elif priceviz:
        from_, equals, to = results[0]['title'].partition(' = ')
        to = getlistastext(to.split(' + '))
        description = (f'{from_} is the same as {to} in TF2.' if equals else
                       f'A list of {from_} items in TF2.')
    elif results and ':' in results[0]['title']:
        title = results[0]['title'].replace(':', '')
        description = f'{count:,} {title} items in TF2.'
    else:
        description = f'Search results for "{query}" items in TF2.'

    qualities = defaultdict(set)

    user = await user
    if user:
        for item in user.get('backpack', {}).get('items', []):
            qualities[item['defindex']].add(item['quality'])

    if is_json:
        for result in results:
            result['items'] = [item async for item in result['items']]
        return tojson(results)
    else:
        return await render('search.html',
                            query=query,
                            description=description,
                            results=results,
                            qualities=qualities,
                            count=count,
                            time=round(t1 - t0, 3))
Beispiel #21
0
async def parse_map_image(request, mapcode):
    return response.redirect(
        "https://cheese.formice.com/maps.php?code={}&nodefault".format(
            mapcode))
Beispiel #22
0
async def redirect(request):
    return response.redirect(request.raw_args['url'])
Beispiel #23
0
 def redirect_on_404_with_trailing_slash(request, original_response):
     if original_response.status == 404 and request.path.endswith("/"):
         path = request.path.rstrip("/")
         if request.query_string:
             path = "{}?{}".format(path, request.query_string)
         return response.redirect(path)
Beispiel #24
0
 async def to_client(request):
     return redirect("/client/index.html")
Beispiel #25
0
 def redirect_to_index(
     request: request.Request, ) -> response.HTTPResponse:
     return response.redirect(
         f"{blueprint.url_prefix}/client/index.html?{request.query_string}"
     )
Beispiel #26
0
async def logout(request):
    request.ctx.session["session"].clear()
    return response.redirect("/")
Beispiel #27
0
async def main(request):
    return response.redirect("https://github.com/team-alpha-kr/PUBG-API")
Beispiel #28
0
async def direct_download_legacy(request: Request, region: str, model: str):
    return redirect(f'/direct/{region}/{model}')
Beispiel #29
0
async def logout(request):
    if 'uid' in request['session']:
        request['session'].pop('uid')
    return redirect(app.url_for('home.index'))
Beispiel #30
0
async def owllook_search(request):
    start = time.time()
    name = str(request.args.get('wd', '')).strip()
    novels_keyword = name.split(' ')[0]
    motor_db = motor_base.get_db()
    if not name:
        return redirect('/')
    else:
        # 记录搜索小说名
        try:
            await motor_db.search_records.update_one({'keyword': name},
                                                     {'$inc': {
                                                         'count': 1
                                                     }},
                                                     upsert=True)
        except Exception as e:
            LOGGER.exception(e)
    # 通过搜索引擎获取检索结果
    parse_result = None
    if name.startswith('!baidu'):
        novels_keyword = name.split('baidu')[1].strip()
        novels_name = 'intitle:{name} 小说 阅读'.format(name=novels_keyword)
        parse_result = await get_novels_info(class_name='baidu',
                                             novels_name=novels_name)
    elif name.startswith('!360'):
        novels_keyword = name.split('360')[1].strip()
        novels_name = "{name} 小说 最新章节".format(name=novels_keyword)
        parse_result = await get_novels_info(class_name='so',
                                             novels_name=novels_name)
    elif name.startswith('!bing'):
        novels_keyword = name.split('bing')[1].strip()
        novels_name = "{name} 小说 阅读 最新章节".format(name=novels_keyword)
        parse_result = await get_novels_info(class_name='bing',
                                             novels_name=novels_name)
    elif name.startswith('!duck_go'):
        novels_keyword = name.split('duck_go')[1].strip()
        novels_name = '{name} 小说 阅读 最新章节'.format(name=novels_keyword)
        parse_result = await get_novels_info(class_name='duck_go',
                                             novels_name=novels_name)
    else:
        for each_engine in ENGINE_PRIORITY:
            # for bing
            if each_engine == "bing":
                novels_name = "{name} 小说 阅读 最新章节".format(name=name)
                parse_result = await get_novels_info(class_name='bing',
                                                     novels_name=novels_name)
                if parse_result:
                    break
            # for 360 so
            if each_engine == "360":
                novels_name = "{name} 小说 最新章节".format(name=name)
                parse_result = await get_novels_info(class_name='so',
                                                     novels_name=novels_name)
                if parse_result:
                    break
            # for baidu
            if each_engine == "baidu":
                novels_name = 'intitle:{name} 小说 阅读'.format(name=name)
                parse_result = await get_novels_info(class_name='baidu',
                                                     novels_name=novels_name)
                if parse_result:
                    break
            # for duckduckgo
            if each_engine == "duck_go":
                novels_name = '{name} 小说 阅读 最新章节'.format(name=name)
                parse_result = await get_novels_info(class_name='duck_go',
                                                     novels_name=novels_name)
                if parse_result:
                    break
    if parse_result:
        # result_sorted = sorted(
        #     parse_result, reverse=True, key=lambda res: res['timestamp']) if ':baidu' not in name else parse_result
        # 优先依靠是否解析进行排序  其次以更新时间进行排序
        result_sorted = sorted(parse_result,
                               reverse=True,
                               key=itemgetter('is_recommend', 'is_parse',
                                              'timestamp'))
        user = request['session'].get('user', None)
        if user:
            try:
                time_current = get_time()
                res = await motor_db.user_message.update_one(
                    {'user': user},
                    {'$set': {
                        'last_update_time': time_current
                    }},
                    upsert=True)
                # 此处语法操作过多  下次看一遍mongo再改
                if res:
                    is_ok = await motor_db.user_message.update_one(
                        {
                            'user': user,
                            'search_records.keyword': {
                                '$ne': novels_keyword
                            }
                        },
                        {
                            '$push': {
                                'search_records': {
                                    'keyword': novels_keyword,
                                    'counts': 1
                                }
                            }
                        },
                    )

                    if is_ok:
                        await motor_db.user_message.update_one(
                            {
                                'user': user,
                                'search_records.keyword': novels_keyword
                            }, {'$inc': {
                                'search_records.$.counts': 1
                            }})

            except Exception as e:
                LOGGER.exception(e)
            return template('result.html',
                            is_login=1,
                            user=user,
                            name=novels_keyword,
                            time='%.2f' % (time.time() - start),
                            result=result_sorted,
                            count=len(parse_result))

        else:
            return template('result.html',
                            is_login=0,
                            name=novels_keyword,
                            time='%.2f' % (time.time() - start),
                            result=result_sorted,
                            count=len(parse_result))

    else:
        return html("No Result!请将小说名反馈给本站,谢谢!")
Beispiel #31
0
async def index(request: Request):
    return redirect('https://c-w.github.io/gutenberg-http/')
Beispiel #32
0
 def handler(request):
     return redirect('/3')
Beispiel #33
0
async def index(request):
    user = request['user']
    if user:
        return response.redirect(app.url_for('user_panel.index'))
    else:
        return response.redirect(app.url_for('auth.LoginView'))
Beispiel #34
0
async def reader_page(request):
    return response.redirect('/')
Beispiel #35
0
 async def init_handler(request, test):
     assert test == test_str
     return redirect("/api/v2/test/{}/".format(quote(test)))
Beispiel #36
0
 def handler1(request):
     return redirect("/2")
Beispiel #37
0
 async def redirect_with_header_injection(request):
     return redirect("/unsafe\ntest-header: test-value\n\ntest-body")
Beispiel #38
0
async def admin(request):
    if not db.isadmin(request['session']['username']):
        return redirect(app.url_for('/'))
Beispiel #39
0
async def default(request):
    return redirect("/p", status=301)
Beispiel #40
0
 async def redirect_init_with_301(request):
     return redirect("/redirect_target", status=301)
Beispiel #41
0
async def main(request):
    if not request['session'].get('logged_in'):
        return redirect(app.url_for('login'))
    else:
        return redirect(app.url_for('dashboard'))
Beispiel #42
0
 def handler2(request):
     return redirect("/3")
Beispiel #43
0
async def verify(request):
    if not request['session'].get('password_ok'):
        return redirect(app.url_for('login'))
    message = randomstr(20)
    request['session']['message'] = message
    return render_template('verify.html', message=message)
Beispiel #44
0
 async def redirect_init(request):
     return redirect("/redirect_target")
Beispiel #45
0
async def logout(request):
    del request['session']['logged_in']
    return redirect(app.url_for('main'))
Beispiel #46
0
async def dashboard(request):
    if not request['session'].get('logged_in'):
        return redirect(app.url_for('login'))

    return render_template('dashboard.html')
Beispiel #47
0
def handle_request(request):
    return response.redirect('/json')