コード例 #1
0
def logout(request,
           next_page=None,
           template_name='registration/logged_out.html',
           redirect_field_name=REDIRECT_FIELD_NAME,
           current_app=None,
           extra_context=None):
    """
    Logs out the user and displays 'You are logged out' message.
    """
    auth_logout(request)
    redirect_to = request.REQUEST.get(redirect_field_name, '')
    if redirect_to:
        netloc = urlparse.urlparse(redirect_to)[1]
        # Security check -- don't allow redirection to a different host.
        if not (netloc and netloc != request.get_host()):
            return HttpResponseRedirect(redirect_to)

    if next_page is None:
        current_site = get_current_site(request)
        context = {
            'site': current_site,
            'site_name': current_site.name,
            'title': _('Logged out')
        }
        if extra_context is not None:
            context.update(extra_context)
        return TemplateResponse(request,
                                template_name,
                                context,
                                current_app=current_app)
    else:
        # Redirect to this page until the session has been cleared.
        return HttpResponseRedirect(next_page or request.path)
コード例 #2
0
def update_settings(request, *args, **kwargs):
    data = request.POST
    owners = data['perm_owners']
    readers = data['perm_readers']
    writers = data['perm_writers']

    repo_url = data['repo_url']  # or
    repo_name = kwargs['repo']
    try:
        from cicero.models import Profile

        repo_obj = Repo.objects.get(name=repo_name)

        profile = request.user.cicero_profile

        is_banned = profile.is_banned
        if is_banned:
            return HttpResponseRedirect(post_redirect(request))

        is_superuser = profile.user.is_superuser
        is_moderator = profile.moderator

        uowners = repo_obj.users_owner.split('\n')

        if is_superuser or is_moderator or (user in uowners):
            repo_obj.users_owner = owners
            repo_obj.users_read = readers
            repo_obj.users_write = writers
            repo_obj.save()

    except:
        pass
    #return HttpResponse('ok')
    return HttpResponseRedirect(post_redirect(request))
コード例 #3
0
def article_delete(request, id):
    article = get_object_or_404(Article, pk=id)
    if not request.user.cicero_profile.can_change_article(article):
        return HttpResponseForbidden('Нет прав для удаления')
    article.deleted = datetime.now()
    article.save()
    caching.invalidate_by_article(article.topic.forum.slug, article.topic.id)
    if article.topic.article_set.count():
        return HttpResponseRedirect(
            reverse(topic, args=(article.topic.forum.slug, article.topic.id)))
    else:
        article.topic.deleted = datetime.now()
        article.topic.save()
        return HttpResponseRedirect(
            reverse(forum, args=(article.topic.forum.slug, )))
コード例 #4
0
def password_change(request,
                    template_name='registration/password_change_form.html',
                    post_change_redirect=None,
                    password_change_form=PasswordChangeForm,
                    current_app=None,
                    extra_context=None):
    if post_change_redirect is None:
        post_change_redirect = reverse(
            'my_django.contrib.auth.views.password_change_done')
    if request.method == "POST":
        form = password_change_form(user=request.user, data=request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(post_change_redirect)
    else:
        form = password_change_form(user=request.user)
    context = {
        'form': form,
    }
    if extra_context is not None:
        context.update(extra_context)
    return TemplateResponse(request,
                            template_name,
                            context,
                            current_app=current_app)
コード例 #5
0
def add_template_response(request, message_type):
    for msg in request.POST.getlist('messages'):
        getattr(messages, message_type)(request, msg)

    show_url = reverse(
        'my_django.contrib.messages.tests.urls.show_template_response')
    return HttpResponseRedirect(show_url)
コード例 #6
0
 def inner(request, *args, **kwargs):
     if not self.has_permission(request):
         if request.path == reverse('admin:logout',
                                    current_app=self.name):
             index_path = reverse('admin:index', current_app=self.name)
             return HttpResponseRedirect(index_path)
         return self.login(request)
     return view(request, *args, **kwargs)
コード例 #7
0
def change_openid(request):
    forms = _profile_forms(request)
    form = forms['openid'].__class__(request.session, request.POST)
    forms['openid'] = form
    if form.is_valid():
        after_auth_redirect = form.auth_redirect(post_redirect(request),
                                                 {'op': 'change_openid'})
        return HttpResponseRedirect(after_auth_redirect)
    return _profile_page(request, forms)
コード例 #8
0
def mark_read(request, slug=None):
    qs = Article.objects.all()
    if slug:
        qs = qs.filter(topic__forum__slug=slug)
    if request.user.is_authenticated():
        profile = request.user.cicero_profile
        profile.add_read_articles(qs)
        profile.save()
        caching.invalidate_by_user(request)
    return HttpResponseRedirect(request.META.get('HTTP_REFERER') or '../')
コード例 #9
0
def __log(request, repo, rev, path):
    """
    display the file log
    ``repo``
        the repository
    ``rev``
        the revision in the changesets history
    ``path``
        the file for which we want the log
    """
    ctx = repo.get_context().repository[rev]
    fctx = ctx.filectx(path)
    filelog = []

    for fl in fctx.filelog():
        l = fctx.filectx(fl)
        filelog.append({
            'user': l.user(),
            "time": datetime.fromtimestamp(l.date()[0]).time(),
            "date": date.fromtimestamp(l.date()[0]),
            'description': l.description(),
            'branch': l.branch(),
            'hash': str(l)[str(l).rfind('@') + 1:],
            'filesize': l.size(),
            'rev': l.rev(),
            'files_count': len(ctx.files())
        })
    filelog.reverse()

    from_rev = request.GET.get('from_rev', '')
    to_rev = request.GET.get('to_rev', '')
    form = HgDiffForm(filelog, {'from_rev': from_rev, 'to_rev': to_rev})
    if '' != from_rev and '' != to_rev and form.is_valid():
        return HttpResponseRedirect(
            reverse('hg-repo-action-rev-path',
                    kwargs={
                        'name': repo.name,
                        'action': 'changesets',
                        'rev': from_rev,
                        'path': path
                    }) + '?from_rev=' + str(from_rev) + '&to_rev=' +
            str(to_rev))

    return render_to_response('django_hg/log.html', {
        'file': path,
        'filelog': filelog,
        'form': form,
        'from_rev': from_rev,
        'path': path,
        'repo': repo,
        'rev': rev,
        'to_rev': to_rev,
        'groups': _get_left_side_cont(),
    },
                              context_instance=RequestContext(request))
コード例 #10
0
def article_spam(request, id):
    if not request.user.cicero_profile.moderator:
        return HttpResponseForbidden('Нет прав определять спам')
    article = get_object_or_404(Article, pk=id)
    if not article.from_guest():
        pass


#        scipio_profile = article.author.user.scipio_profile
#        if scipio_profile.spamer is None:
#            scipio_profile.spamer = True
#            scipio_profile.save()
#antispam.conveyor.submit_spam(article=article)
    slug, topic_id = article.topic.forum.slug, article.topic.id
    article.delete()
    caching.invalidate_by_article(slug, topic_id)
    if Topic.objects.filter(pk=topic_id).count():
        return HttpResponseRedirect(reverse(topic, args=(slug, topic_id)))
    else:
        return HttpResponseRedirect(reverse(forum, args=(slug, )))
コード例 #11
0
def _process_new_article(request, article, is_new_topic, check_login):
    #spam_status = antispam.conveyor.validate(request, article=article)

    # Detected spam is deleted independant on check_login because
    # an OpenID server may not return from a check and the spam will hang forever
    #if spam_status == 'spam':
    #    forum = article.topic.forum
    #    article.delete()
    #    return render_to_response(request, 'cicero/spam.html', {
    #        'forum': forum,
    #        'text': article.text,
    #        'admins': [e for n, e in settings.ADMINS],
    #    })

    spam_status = 'clean'

    if check_login and not request.user.is_authenticated():
        form = AuthenticationForm(request,
                                  {'openid_identity': request.POST['name']})
        #form = AuthForm(request.session, {'openid_identity': request.POST['name']})
        if form.is_valid():
            article.set_spam_status(spam_status)
            url = form.auth_redirect(post_redirect(request),
                                     data={
                                         'op': 'login',
                                         'acquire': str(article.pk)
                                     })
            return HttpResponseRedirect(url)
    if spam_status == 'clean':
        slug = article.topic.forum.slug
        _publish_article(slug, article)
        url = reverse(topic, args=[slug, article.topic_id])
        if not is_new_topic:
            url += '?page=last'
        url += '#%s' % article.id
        return HttpResponseRedirect(url)
    # Любой не-clean и не-spam статус -- разного рода подозрения
    article.set_spam_status(spam_status)
    return render_to_response(request, 'cicero/spam_suspect.html', {
        'article': article,
    })
コード例 #12
0
def post_profile(request, form_name):
    forms = _profile_forms(request)
    profile = {
        #        'settings': request.user.cicero_profile,
        #        'personal': request.user.scipio_profile,
    }[form_name]
    form = forms[form_name].__class__(request.POST, instance=profile)
    forms[form_name] = form
    if form.is_valid():
        form.save()
        return HttpResponseRedirect('../')
    return _profile_page(request, forms)
コード例 #13
0
def login(request,
          template_name='registration/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=AuthenticationForm,
          current_app=None,
          extra_context=None):
    """
    Displays the login form and handles the login action.
    """
    redirect_to = request.REQUEST.get(redirect_field_name, '')

    if request.method == "POST":
        form = authentication_form(data=request.POST)
        if form.is_valid():
            netloc = urlparse.urlparse(redirect_to)[1]

            # Use default setting if redirect_to is empty
            if not redirect_to:
                redirect_to = settings.LOGIN_REDIRECT_URL

            # Heavier security check -- don't allow redirection to a different
            # host.
            elif netloc and netloc != request.get_host():
                redirect_to = settings.LOGIN_REDIRECT_URL

            # Okay, security checks complete. Log the user in.
            auth_login(request, form.get_user())

            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()

            return HttpResponseRedirect(redirect_to)
    else:
        form = authentication_form(request)

    request.session.set_test_cookie()

    current_site = get_current_site(request)

    context = {
        'form': form,
        redirect_field_name: redirect_to,
        'site': current_site,
        'site_name': current_site.name,
    }
    if extra_context is not None:
        context.update(extra_context)
    return TemplateResponse(request,
                            template_name,
                            context,
                            current_app=current_app)
コード例 #14
0
def serve(request, path, document_root=None, show_indexes=False):
    """
    Serve static files below a given point in the directory structure.

    To use, put a URL pattern such as::

        (r'^(?P<path>.*)$', 'django.views.static.serve', {'document_root' : '/path/to/my/files/'})

    in your URLconf. You must provide the ``document_root`` param. You may
    also set ``show_indexes`` to ``True`` if you'd like to serve a basic index
    of the directory.  This index view will use the template hardcoded below,
    but if you'd like to override it, you can create a template called
    ``static/directory_index.html``.
    """
    path = posixpath.normpath(urllib.unquote(path))
    path = path.lstrip('/')
    newpath = ''
    for part in path.split('/'):
        if not part:
            # Strip empty path components.
            continue
        drive, part = os.path.splitdrive(part)
        head, part = os.path.split(part)
        if part in (os.curdir, os.pardir):
            # Strip '.' and '..' in path.
            continue
        newpath = os.path.join(newpath, part).replace('\\', '/')
    if newpath and path != newpath:
        return HttpResponseRedirect(newpath)
    fullpath = os.path.join(document_root, newpath)
    if os.path.isdir(fullpath):
        if show_indexes:
            return directory_index(newpath, fullpath)
        raise Http404(_(u"Directory indexes are not allowed here."))
    if not os.path.exists(fullpath):
        raise Http404(_(u'"%(path)s" does not exist') % {'path': fullpath})
    # Respect the If-Modified-Since header.
    statobj = os.stat(fullpath)
    mimetype, encoding = mimetypes.guess_type(fullpath)
    mimetype = mimetype or 'application/octet-stream'
    if not was_modified_since(request.META.get('HTTP_IF_MODIFIED_SINCE'),
                              statobj.st_mtime, statobj.st_size):
        return HttpResponseNotModified(mimetype=mimetype)
    with open(fullpath, 'rb') as f:
        response = HttpResponse(f.read(), mimetype=mimetype)
    response["Last-Modified"] = http_date(statobj.st_mtime)
    if stat.S_ISREG(statobj.st_mode):
        response["Content-Length"] = statobj.st_size
    if encoding:
        response["Content-Encoding"] = encoding
    return response
コード例 #15
0
def add(request, message_type):
    # don't default to False here, because we want to test that it defaults
    # to False if unspecified
    fail_silently = request.POST.get('fail_silently', None)
    for msg in request.POST.getlist('messages'):
        if fail_silently is not None:
            getattr(messages, message_type)(request,
                                            msg,
                                            fail_silently=fail_silently)
        else:
            getattr(messages, message_type)(request, msg)

    show_url = reverse('my_django.contrib.messages.tests.urls.show')
    return HttpResponseRedirect(show_url)
コード例 #16
0
def redirect(post_save_redirect, obj):
    """
    Returns a HttpResponseRedirect to ``post_save_redirect``.

    ``post_save_redirect`` should be a string, and can contain named string-
    substitution place holders of ``obj`` field names.

    If ``post_save_redirect`` is None, then redirect to ``obj``'s URL returned
    by ``get_absolute_url()``.  If ``obj`` has no ``get_absolute_url`` method,
    then raise ImproperlyConfigured.

    This function is meant to handle the post_save_redirect parameter to the
    ``create_object`` and ``update_object`` views.
    """
    if post_save_redirect:
        return HttpResponseRedirect(post_save_redirect % obj.__dict__)
    elif hasattr(obj, 'get_absolute_url'):
        return HttpResponseRedirect(obj.get_absolute_url())
    else:
        raise ImproperlyConfigured(
            "No URL to redirect to.  Either pass a post_save_redirect"
            " parameter to the generic view or define a get_absolute_url"
            " method on the Model.")
コード例 #17
0
def delete_object(request,
                  model,
                  post_delete_redirect,
                  object_id=None,
                  slug=None,
                  slug_field='slug',
                  template_name=None,
                  template_loader=loader,
                  extra_context=None,
                  login_required=False,
                  context_processors=None,
                  template_object_name='object'):
    """
    Generic object-delete function.

    The given template will be used to confirm deletetion if this view is
    fetched using GET; for safty, deletion will only be performed if this
    view is POSTed.

    Templates: ``<app_label>/<model_name>_confirm_delete.html``
    Context:
        object
            the original object being deleted
    """
    if extra_context is None: extra_context = {}
    if login_required and not request.user.is_authenticated():
        return redirect_to_login(request.path)

    obj = lookup_object(model, object_id, slug, slug_field)

    if request.method == 'POST':
        obj.delete()
        msg = ugettext("The %(verbose_name)s was deleted.") %\
                                    {"verbose_name": model._meta.verbose_name}
        messages.success(request, msg, fail_silently=True)
        return HttpResponseRedirect(post_delete_redirect)
    else:
        if not template_name:
            template_name = "%s/%s_confirm_delete.html" % (
                model._meta.app_label, model._meta.object_name.lower())
        t = template_loader.get_template(template_name)
        c = RequestContext(request, {
            template_object_name: obj,
        }, context_processors)
        apply_extra_context(extra_context, c)
        response = HttpResponse(t.render(c))
        populate_xheaders(request, response, model,
                          getattr(obj, obj._meta.pk.attname))
        return response
コード例 #18
0
def logout(request, *args, **kwargs):
    from my_django.contrib.auth import logout
    logout(request)
    try:
        del request.session['member_id']
    except KeyError:
        pass
    #return HttpResponse("You're logged out.")


#    url = '%s#%s' % (reverse(topic, args=(article.topic.forum.slug, article.topic.id)), article.id)
#    print url

#    return HttpResponseRedirect(request.META.get('HTTP_REFERER') or '../')
    return HttpResponseRedirect(post_redirect(request))
コード例 #19
0
def post_comment(request):
    data = request.POST
    path = data['path']
    repo_url = data['repo_url']
    repo = Repo.objects.get(url=repo_url)
    line = data['line']
    text = data['text']
    rev = data['rev']
    Comment.objects.create(repo=repo,
                           file_path=path,
                           rev=rev,
                           line=line,
                           content=text)
    #return HttpResponse('ok')
    return HttpResponseRedirect(post_redirect(request))
コード例 #20
0
def clone_repo(request):
    data = request.POST
    repo_url = data['repo_url']
    repo_home = settings.REPO_HOME
    sh.cd(repo_home)
    try:
        git.clone(repo_url)
    except:
        sh.mkdir(repo_url)
        sh.cd(repo_url)
        git.init()
    fresh_repo_list()
    repo_name = repo_url.split('/')[-1][:-4]
    Repo.objects.create(name=repo_name, url=repo_url)
    #return HttpResponse('ok')
    return HttpResponseRedirect(post_redirect(request))
コード例 #21
0
def redirect_to_login(next,
                      login_url=None,
                      redirect_field_name=REDIRECT_FIELD_NAME):
    """
    Redirects the user to the login page, passing the given 'next' page
    """
    if not login_url:
        login_url = settings.LOGIN_URL

    login_url_parts = list(urlparse.urlparse(login_url))
    if redirect_field_name:
        querystring = QueryDict(login_url_parts[4], mutable=True)
        querystring[redirect_field_name] = next
        login_url_parts[4] = querystring.urlencode(safe='/')

    return HttpResponseRedirect(urlparse.urlunparse(login_url_parts))
コード例 #22
0
def topic_to_article(request, article_id):
    if not request.user.cicero_profile.moderator:
        return HttpResponseForbidden('Нет прав отщеплять топики')
    article = get_object_or_404(Article, pk=article_id)
    if request.method == 'POST':
        form = forms.ToArticleForm(article, request.POST)
        if form.is_valid():
            new_topic = form.save()
            return HttpResponseRedirect(
                reverse(topic, args=(new_topic.forum.slug, new_topic.id)))
    else:
        form = forms.ToArticleForm(article)
    return render_to_response(request, 'cicero/topic_to_article.html', {
        'form': form,
        'article': article,
    })
コード例 #23
0
def article_publish(request, id):
    if not request.user.cicero_profile.moderator:
        return HttpResponseForbidden('Нет прав публиковать спам')
    article = get_object_or_404(Article, pk=id)
    #antispam.conveyor.submit_ham(article.spam_status, article=article)
    article.set_spam_status('clean')
    if not article.from_guest():
        pass


#        scipio_profile = article.author.user.scipio_profile
#        if scipio_profile.spamer is None:
#            scipio_profile.spamer = False
#            scipio_profile.save()
    caching.invalidate_by_article(article.topic.forum.slug, article.topic.id)
    return HttpResponseRedirect(reverse(spam_queue))
コード例 #24
0
def article_undelete(request, id):
    try:
        article = Article.deleted_objects.get(pk=id)
    except Article.DoesNotExist:
        raise Http404
    if not request.user.cicero_profile.can_change_article(article):
        return HttpResponseForbidden('Нет прав для восстановления')
    Article.deleted_objects.filter(pk=id).update(deleted=None)
    try:
        article_topic = Topic.deleted_objects.get(pk=article.topic_id)
        Topic.deleted_objects.filter(pk=article.topic_id).update(deleted=None)
    except Topic.DoesNotExist:
        article_topic = article.topic
    caching.invalidate_by_article(article_topic.forum.slug, article_topic.id)
    return HttpResponseRedirect(
        reverse(topic, args=(article_topic.forum.slug, article_topic.id)))
コード例 #25
0
def topic_edit(request, topic_id):
    t = get_object_or_404(Topic, pk=topic_id)
    if not request.user.cicero_profile.can_change_topic(t):
        return HttpResponseForbidden('Нет прав редактировать топик')
    if request.method == 'POST':
        form = forms.TopicEditForm(request.POST, instance=t)
        if form.is_valid():
            form.save()
            caching.invalidate_by_article(t.forum.slug, t.id)
            return HttpResponseRedirect(
                reverse(topic, args=[t.forum.slug, t.id]))
    else:
        form = forms.TopicEditForm(instance=t)
    return render_to_response(request, 'cicero/topic_edit.html', {
        'form': form,
        'topic': t,
    })
コード例 #26
0
def password_reset_confirm(
        request,
        uidb36=None,
        token=None,
        template_name='registration/password_reset_confirm.html',
        token_generator=default_token_generator,
        set_password_form=SetPasswordForm,
        post_reset_redirect=None,
        current_app=None,
        extra_context=None):
    """
    View that checks the hash in a password reset link and presents a
    form for entering a new password.
    """
    assert uidb36 is not None and token is not None  # checked by URLconf
    if post_reset_redirect is None:
        post_reset_redirect = reverse(
            'my_django.contrib.auth.views.password_reset_complete')
    try:
        uid_int = base36_to_int(uidb36)
        user = User.objects.get(id=uid_int)
    except (ValueError, User.DoesNotExist):
        user = None

    if user is not None and token_generator.check_token(user, token):
        validlink = True
        if request.method == 'POST':
            form = set_password_form(user, request.POST)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect(post_reset_redirect)
        else:
            form = set_password_form(None)
    else:
        validlink = False
        form = None
    context = {
        'form': form,
        'validlink': validlink,
    }
    if extra_context is not None:
        context.update(extra_context)
    return TemplateResponse(request,
                            template_name,
                            context,
                            current_app=current_app)
コード例 #27
0
def article_edit(request, id):
    article = get_object_or_404(Article, pk=id)
    if not request.user.cicero_profile.can_change_article(article):
        return HttpResponseForbidden('Нет прав для редактирования')
    if request.method == 'POST':
        form = forms.ArticleEditForm(request.POST, instance=article)
        if form.is_valid():
            form.save()
            caching.invalidate_by_article(article.topic.forum.slug,
                                          article.topic.id)
            url = '%s#%s' % (reverse(
                topic,
                args=(article.topic.forum.slug, article.topic.id)), article.id)
            return HttpResponseRedirect(url)
    else:
        form = forms.ArticleEditForm(instance=article)
    return render_to_response(request, 'cicero/article_edit.html', {
        'form': form,
        'article': article,
    })
コード例 #28
0
def password_reset(
        request,
        is_admin_site=False,
        template_name='registration/password_reset_form.html',
        email_template_name='registration/password_reset_email.html',
        subject_template_name='registration/password_reset_subject.txt',
        password_reset_form=PasswordResetForm,
        token_generator=default_token_generator,
        post_reset_redirect=None,
        from_email=None,
        current_app=None,
        extra_context=None):
    if post_reset_redirect is None:
        post_reset_redirect = reverse(
            'my_django.contrib.auth.views.password_reset_done')
    if request.method == "POST":
        form = password_reset_form(request.POST)
        if form.is_valid():
            opts = {
                'use_https': request.is_secure(),
                'token_generator': token_generator,
                'from_email': from_email,
                'email_template_name': email_template_name,
                'subject_template_name': subject_template_name,
                'request': request,
            }
            if is_admin_site:
                opts = dict(opts, domain_override=request.META['HTTP_HOST'])
            form.save(**opts)
            return HttpResponseRedirect(post_reset_redirect)
    else:
        form = password_reset_form()
    context = {
        'form': form,
    }
    if extra_context is not None:
        context.update(extra_context)
    return TemplateResponse(request,
                            template_name,
                            context,
                            current_app=current_app)
コード例 #29
0
    def process_response(self, request, response):
        language = translation.get_language()
        if (response.status_code == 404
                and not translation.get_language_from_path(request.path_info)
                and self.is_language_prefix_patterns_used()):
            urlconf = getattr(request, 'urlconf', None)
            language_path = '/%s%s' % (language, request.path_info)
            if settings.APPEND_SLASH and not language_path.endswith('/'):
                language_path = language_path + '/'

            if is_valid_path(language_path, urlconf):
                language_url = "%s://%s/%s%s" % (
                    request.is_secure() and 'https' or 'http',
                    request.get_host(), language, request.get_full_path())
                return HttpResponseRedirect(language_url)
        translation.deactivate()

        patch_vary_headers(response, ('Accept-Language', ))
        if 'Content-Language' not in response:
            response['Content-Language'] = language
        return response
コード例 #30
0
def carma(request, tgt_user, inc_dec, **kwargs):
    #print tgt_user
    u = '%s' % (request.user, )
    #print u
    if request.user.is_authenticated() and tgt_user != u and (
            inc_dec == "inc" or inc_dec == "dec"):
        profile = request.user.cicero_profile
        is_can_change_carmas = profile.today_change_carmas < profile.max_change_carmas
        #print is_can_change_carmas
        if is_can_change_carmas:
            profile.today_change_carmas += 1
            profile.save()

            from my_django.contrib.auth.models import User
            try:
                u = User.objects.get(username__exact=tgt_user)
                profile = Profile.objects.filter(user=u).get()
                if inc_dec == "inc":
                    profile.carma += 1
                else:
                    profile.carma -= 1
                profile.save()
            except User.DoesNotExist:
                pass

            caching.invalidate_by_user(request)
    else:
        is_can_change_carmas = False

    #kwargs['queryset'] = topic.article_set.filter(spam_status='clean', is_forum=True).select_related()
    #kwargs['extra_context'] = {'topic': topic, 'form': form, 'page_id': 'topic', 'show_last_link': True,
    #                           'groups': _get_left_side_cont(),
    #                           'is_user_can_add_topic_or_article': is_user_can_add_topic_or_article(request)}
    #return object_list(request, **kwargs)
    if is_can_change_carmas:
        return HttpResponseRedirect(
            post_redirect(request)
        )  #HttpResponse(u"carma of %s succesfully changed" % (tgt_user,))
    else:
        return HttpResponse(u"you can not change this carma")