Beispiel #1
0
def post_search(request):
    '''
    搜索
    :param request:
    :return:
    '''
    form = SearchForm()
    query = None
    results = []
    if 'query' in request.GET:
        form = SearchForm(request.GET)
        if form.is_valid():
            query = form.cleaned_data['query']
            # 设置搜索权重
            search_vector = SearchVector('title', weight='A') + SearchVector(
                'body', weight='B')
            search_query = SearchQuery(query)
            results = Post.objects.annotate(
                search=search_vector,
                rank=SearchRank(
                    search_vector,
                    search_query)).filter(rank__gte=0.3).order_by('-rank')
    return render(request, 'blog/post/search.html', {
        'query': query,
        'form': form,
        'results': results
    })
Beispiel #2
0
def search_by_key_words(request):
    needed_posts = []
    posts = BlogPost.objects.all()
    search_form = SearchForm(request.POST)
    if search_form.is_valid():
        search_form.save()
        d = search_form.cleaned_data
        key_words = d['keywords']
        key_words = key_words.split()
        for key_word in key_words:
            for post in posts:
                if key_word in post.title or key_word in post.article:
                    needed_posts.append(post)
        return render_to_response('post/posts.html', {
            'posts': needed_posts,
            'form': search_form
        },
                                  context_instance=RequestContext(request))
    else:
        categories = BlogPostCategory.objects.all()
        new_posts = BlogPost.objects.all()[:2]
        return render_to_response('base.html', {
            'categories': categories,
            'new_posts': new_posts,
            'form': search_form
        },
                                  context_instance=RequestContext(request))
Beispiel #3
0
def post_search(request):
    form = SearchForm()
    query = None
    results = []
    if 'query' in request.GET:
        form = SearchForm(request.GET)
        if form.is_valid():
            query = form.cleaned_data['query']
            search_vector = SearchVector('title', weight='A') + SearchVector(
                'body', weight='B')
            search_query = SearchQuery(query)

            # results = Post.objects.annotate(
            #     rank=SearchRank(search_vector, search_query)
            # ).filter(rank__gte=0.3).order_by('-rank')

            results = Post.objects.annotate(similarity=TrigramSimilarity(
                'title',
                query), ).filter(similarity__gt=0.1).order_by('-similarity')

    return render(request, 'blog/post/search.html', {
        'form': form,
        'query': query,
        'results': results
    })
Beispiel #4
0
def post_search(request):
    form = SearchForm(request.GET or None)
    query = None
    posts = None
    page_obj = None
    paginator = None
    if form.is_valid():
        query = form.cleaned_data['query']

        search_vector = SearchVector('title', weight='A') + SearchVector('body', weight='B')
        search_query = SearchQuery(query)
        posts = Post.published.annotate(rank=SearchRank(search_vector, search_query)).filter(
            rank__gte=0.3).order_by('-rank')
        paginator = Paginator(posts, settings.POSTS_PER_PAGE)
        page = request.GET.get('page', 1)
        try:
            posts = paginator.page(page)
        except PageNotAnInteger:
            posts = paginator.page(1)
        except EmptyPage:
            posts = paginator.page(paginator.num_pages)

        page_obj = pager.Page(posts.number, paginator.num_pages)

    return render(request, 'blog/post/list.html', {
        'query': query,
        'paginator': paginator,
        'posts': posts,
        'page_obj': page_obj,
    })
Beispiel #5
0
def post_search(request):
    form = SearchForm()
    if 'query' in request.GET:
        form = SearchForm(request.GET)
        if form.is_valid():
            cd = form.cleaned_data
            results = SearchQuerySet.models(Post).filter(content=cd['query']).load_all()
            # count total results
            total_results = results.count()
    return render(request, 'blog/post/search.html',
                  {'form': form, 'cd': cd, 'results': results, 'total_results': total_results})
Beispiel #6
0
 def get_queryset(self):
     from django.db.models import Q
     if self.request.method == 'GET':
         form = SearchForm(self.request.GET)
         if form.is_valid():
             query = form.cleaned_data['query']
             words = query.split(' ')
             qobjects = [Q(body__icontains=w) | Q(title__icontains=w) for w in words]
             condition = reduce(lambda x,y: x & y, qobjects)
             results = BlogPost.objects.filter(condition)
             return results
     return BlogPost.objects.none()
Beispiel #7
0
def search(request):
    if request.method == "POST":
        form = SearchForm(request.POST)
        if form.is_valid():
            query = form.cleaned_data['query']
            post_list = Post.objects.filter(Q(name__icontains=query) |
                                           Q(post_text__icontains=query) |
                                           Q(author__name__icontains=query) |
                                           Q(author__description__icontains=query))
            news_list = News.objects.filter(Q(headline__icontains=query) |
                                            Q(news_text__icontains=query))
            print('abc')
            return render(request, "search_list.html", {'post_list': post_list,
                                                        'news_list': news_list })
Beispiel #8
0
def search(request):
    global page_article_list, search_list, search_result
    try:
        if request.method == 'GET':
            searchform = SearchForm(request.GET)
            if searchform.is_valid():
                search_result = searchform.cleaned_data['search']
                search_list = Article.objects.filter(category__article__title__icontains=search_result)
                print(search_list)
                page_article_list = getPage(request, search_list)
                print(page_article_list)

    except Exception as e:
        logger.error(e)
    return render(request, 'search.html',
                  {'article_list': page_article_list, 'search_list': search_list,'search_result':search_result})
Beispiel #9
0
def post_search(request):
    form = SearchForm()
    if 'query' in request.GET:
        form = SearchForm(request.GET)
        if form.is_valid():
            cd = form.cleaned_data
            results = SearchQuerySet.models(Post).filter(
                content=cd['query']).load_all()
            # count total results
            total_results = results.count()
    return render(request, 'blog/post/search.html', {
        'form': form,
        'cd': cd,
        'results': results,
        'total_results': total_results
    })
Beispiel #10
0
def post_search(request):
    form = SearchForm()
    query = None
    results = []
    if 'query' in request.GET:
        form = SearchForm(request.GET)
        if form.is_valid():
            query = form.cleaned_data['query']
            results = Post.objects.annotate(similarity=TrigramSimilarity(
                'title',
                query), ).filter(similarity__gt=0.3).order_by('-similarity')
    return render(request, 'app/blog.html', {
        'form': form,
        'query': query,
        'results': results
    })
Beispiel #11
0
def search(request):
    search_form = SearchForm(request.GET)
    found_articles = []
    if search_form.is_valid() and (search_form.cleaned_data["phrase"]
                                   or search_form.cleaned_data["tags"]):
        found_articles = (Article.search_articles(
                          search_form.cleaned_data["phrase"],
                          search_form.cleaned_data["tags"]))
    return render_to_response(
        "search.html",
        {
            "page_title": ugettext("Search"),
            "found_articles": found_articles,
            "search_form": search_form,
        },
        context_instance=RequestContext(request),
    )
Beispiel #12
0
def post_search(request):
    form = SearchForm()
    query = None
    results = []
    if 'query' in request.GET:
        form = SearchForm(request.GET)
        if form.is_valid():
            query = form.cleaned_data['query']
            search_vector = SearchVector('title', 'body')
            search_query = SearchQuery(query)
            results = Post.published.annotate(
                search=search_vector,
                rank=SearchRank(search_vector, search_query),
            ).filter(search=search_query).order_by('-rank')
    return render(request, 'blog/post/search.html', {
        'form': form,
        'query': query,
        'results': results
    })
Beispiel #13
0
def post_search(req):
    form = SearchForm()
    data = None
    results = None
    total_results = None
    if 'query' in req.GET:
        form = SearchForm(req.GET)
        if form.is_valid():
            data = form.cleaned_data
            results = SearchQuerySet().models(Post).filter(
                content=data['query']).load_all()  #Todo
            total_results = results.count()
    return render(
        req, 'blog/post/search.html', {
            'form': form,
            'data': data,
            'results': results,
            'total_results': total_results
        })
Beispiel #14
0
def search_results(request):
    search_form = SearchForm()
    if 'query' in request.GET:
        form = SearchForm(request.GET)
        if form.is_valid():
            cd = form.cleaned_data
            results = SearchQuerySet().models(Post).filter(content=cd['query']).load_all()
            # count total results
            total_results = results.count()
            return render(request,
                          'blog/post/search_results.html',
                          {
                              'form': form,
                              'cd': cd,
                              'results': results,
                              'total_results': total_results,
                              'search_form': search_form
                          })
    return HttpResponse('Please submit a search term.')
Beispiel #15
0
def search_by_key_words(request):
    needed_posts = []
    posts = BlogPost.objects.all()
    search_form = SearchForm(request.POST)
    if search_form.is_valid():
        search_form.save()
        d = search_form.cleaned_data
        key_words = d['keywords']
        key_words =   key_words.split()
        for key_word in key_words:
            for post in posts:
                if key_word in post.title or key_word in post.article:
                    needed_posts.append(post)
        return render_to_response('post/posts.html',{'posts':needed_posts,'form':search_form},context_instance=RequestContext(request))
    else :
        categories = BlogPostCategory.objects.all()
        new_posts = BlogPost.objects.all()[:2]
        return  render_to_response('base.html', {'categories': categories, 'new_posts': new_posts, 'form': search_form},
                           context_instance=RequestContext(request))
Beispiel #16
0
def search(request):

    if request.method == 'POST':
        print(request.POST.get('q'))
        form = SearchForm(request.POST)
        if form.is_valid():

            queryset = Post.objects.all()
            query = form.cleaned_data.get('q')
            if query:
                queryset = queryset.filter(
                    Q(main_title__icontains=query)
                    | Q(short_description__icontains=query)).distinct()

            context = {
                'queryset': queryset,
            }
            return render(request,
                          template_name='blog/search_results.html',
                          context=context)
    return render(request, template_name='blog/search_results.html')
Beispiel #17
0
def post_search(request):
    form = SearchForm()
    context = dict()

    if 'query' in request.GET:
        form = SearchForm(request.GET)

        # form validation
        if form.is_valid():
            cd = form.cleaned_data
            results = SearchQuerySet().models(Post).filter(
                content=cd['query']).load_all()

            # count total results
            total_results = results.count()

            context['cd'] = cd
            context['results'] = results
            context['total_results'] = total_results

    context['form'] = form
    return render(request, 'blog/post/search.html', context)
Beispiel #18
0
def search(request, search_request=None, type_request=None):
    try:
        template = 'blog/search.html'
        args = {}

        if request.method == 'POST':
            form = SearchForm(request.POST)

            if form.is_valid():
                request_type = form.cleaned_data['request_type']
                request_value = form.cleaned_data['request']
                if request_type == 'tag':
                    existing_tags = [t.tag for t in Tag.objects.all()]
                    tags = [tag for tag in request_value.split() if tag in existing_tags]
                    list_post = []

                    for post in Post.objects.filter(visible=True):
                        post_tags = [t.tag for t in post.tag.all()]

                        if all(tag in post_tags for tag in tags):
                            list_post.append(post)

                    args.update({'posts': list_post})

                elif request_type == 'user':
                    args.update({'posts': Post.objects.filter(visible=True,
                                                              user=User.objects.get(username=request_value))})

                elif request_type == 'post':
                    args.update({'posts': Post.objects.filter(visible=True, title=request_value)})
        else:
            form = SearchForm()

        args.update({'user': request.user})
        args.update({'form': form})
    except:
        raise Http404()
    return render_to_response(template, args)
Beispiel #19
0
def rss(request):

    if request.method == 'GET':
        form = SearchForm(initial={'title_word': "."})
        return render(request, 'blog/rss.html', {
            'form': form,
            "lms" : LanMu.objects.all(),
            "right": common_content(),
        })

    if request.method == 'POST':
        form = SearchForm(request.POST)
        # 探究搜索关键词为空的内容// 搜素全部为 .
        if form.is_valid():

            tag = form.cleaned_data['tag']
            start_date = form.cleaned_data['serach_start']
            end_date = form.cleaned_data['serach_end']
            word = form.cleaned_data['title_word']
            temp_res = Article.objects.all()
            result1 = [x for x in temp_res if x.pub_date.date() > start_date and x.pub_date.date() <= end_date]
            result0 = [x for x in result1 if x.column == tag]
            result = []
            for x in result0:
                if re.match(".*" + word + ".*", x.title):
                    result.append(x)

            return render(request, "blog/rss.html", {
                'form': form,
                "blogs": result,
                "lms" : LanMu.objects.all(),
                "right": common_content(),
            })
        return render(request, 'blog/rss.html', {
            'form': form,
            "lms" : LanMu.objects.all(),
            "right": common_content(),
        })
Beispiel #20
0
def post_search(request):
    # Поиск постов по названию и тексту
    form = SearchForm()
    query = None
    results = []
    if 'query' in request.GET:
        form = SearchForm(request.GET)
        if form.is_valid():
            query = form.cleaned_data['query']
            # Установка большего веса вектора поиска для title для повышения релевантности
            search_vector = SearchVector('title', weight='A') + \
                SearchVector('body', weight='B')
            search_query = SearchQuery(query)
            results = Post.published.annotate(
                search=search_vector,
                rank=SearchRank(
                    search_vector,
                    search_query)).filter(rank__gte=0.3).order_by('-rank')
    return render(request, 'blog/post/search.html', {
        'form': form,
        'query': query,
        'results': results
    })
Beispiel #21
0
def api_call(request):
    endpoint = 'http://api.moemoe.tokyo/anime/v1/master'

    # リクエストがpostであることをチェック
    if request.method == 'POST':
        # フォームデータを取得
        form = SearchForm(request.POST)
        # フォームのデータが安全かチェック
        if form.is_valid():

            # データを受け取る
            year = form.cleaned_data['year']
            cours = form.cleaned_data['cours']

            if year:
                query = str(year)
                url = endpoint + "/" + query

            else:
                form = SearchForm()
                messages = ["放送年を選択してください"]
                context = {'messages': messages, 'form': form}

                return render(request, 'blog/anime_search.html', context)

            if cours:
                query = str(cours)
                url = url + "/" + query

            response = requests.get(url)
            anime_list = response.json()

            form = SearchForm()

            page_obj = blog_option_view.paginate_queryset(request, anime_list, 10)
            context = {
                'anime_list': page_obj.object_list,
                'form': form,
                'year': year,
                'cours': cours,
                'page_obj': page_obj,
            }

            return render(request, 'blog/anime_search.html', context)

        else:
            form = SearchForm()
            messages = ["放送年を選択してください"]

            context = {'messages': messages, 'form': form}

            return render(request, 'blog/anime_search.html', context)
    else:

        # 最初にブラウザから呼び出されるときに使用するフォームクラスを指定
        form = SearchForm()

        # ページネーションバーからGETで遷移したときの処理
        # ページネーションしてきたときはクエリにyear,coursがあるのでそれを判定して分岐に入る
        if 'year' in request.GET:
            year = request.GET.get('year')
            url = endpoint + "/" + year

            cours = request.GET.get('cours')

            if cours:
                cours = request.GET.get('cours')
                url = url + "/" + cours

            response = requests.get(url)
            anime_list = response.json()
            page_obj = blog_option_view.paginate_queryset(request, anime_list, 10)

            context = {
                'anime_list': page_obj.object_list,
                'form': form,
                'year': year,
                'cours': cours,
                'page_obj': page_obj,
            }

            return render(request, 'blog/anime_search.html', context)

    # 作成されたフォームオブジェクトをコンテキストへ格納
    context = {'form': form}
    # 最初にブラウザから呼び出されたときに指定テンプレートとコンテキストで描画する
    return render(request, 'blog/anime_search.html', context)
Beispiel #22
0
 def test_valid_search_form(self):
     form = SearchForm({
         'query': 'Django',
     })
     self.assertTrue(form.is_valid())
Beispiel #23
0
 def test_invalid_search_form_without_all_fields(self):
     form = SearchForm({})
     self.assertFalse(form.is_valid())
Beispiel #24
0
 def test_invalid_search_form_with_empty_query(self):
     form = SearchForm({
         'query': '',
     })
     self.assertFalse(form.is_valid())