コード例 #1
0
ファイル: views.py プロジェクト: fgirault/smeuhsocial
def post_tweet(request, form_class=TweetForm, success_url=None):
    if request.method == "POST":
        form = form_class(request.user, request.POST)
        if form.is_valid():
            text = form.cleaned_data['text']
            tweet = form.save()
            parse_tagged_text(text, tweet.id, 'tweet')
            if request.is_ajax():
                return render_to_response('microblogging/_tweet.html', {
                    'tweet': tweet,
                    'prefix_sender': True ,
                    'extra_classes':  "fisrt odd"})
        else:
            data = json.dumps(dict([(k, [unicode(e) for e in v]) for k,v in form.errors.items()]))
            return HttpResponseBadRequest(data, content_type='application/json')
    if success_url is None:
        success_url = reverse('timeline.views.home')
    return HttpResponseRedirect(success_url)
コード例 #2
0
ファイル: views.py プロジェクト: amarandon/smeuhsocial
def free_comment(request, content_type=None, object_id=None, edit_id=None,
                 parent_id=None, add_messages=False, ajax=False,
                 model=FreeThreadedComment, form_class=FreeThreadedCommentForm,
                 context_processors=[], extra_context={}):
    """
    Receives POST data and either creates a new ``ThreadedComment`` or
    ``FreeThreadedComment``, or edits an old one based upon the specified
    parameters.

    If there is a 'preview' key in the POST request, a preview will be forced
    and the comment will not be saved until a 'preview' key is no longer in the
    POST request.

    If it is an *AJAX* request (either XML or JSON), it will return a
    serialized version of the last created ``ThreadedComment`` and there will
    be no redirect.

    If invalid POST data is submitted, this will go to the comment preview page
    where the comment may be edited until it does not contain errors.
    """
    if not edit_id and not (content_type and object_id):
        # Must specify either content_type and object_id or edit_id
        raise Http404
    if "preview" in request.POST:
        return _preview(request, context_processors, extra_context,
                        form_class=form_class)
    if edit_id:
        instance = get_object_or_404(model, id=edit_id)
    else:
        instance = None
    _adjust_max_comment_length(form_class)
    form = form_class(request.POST, instance=instance)
    if form.is_valid():
        new_comment = form.save(commit=False)
        if not edit_id:
            new_comment.ip_address = request.META.get('REMOTE_ADDR', None)
            new_comment.content_type = get_object_or_404(
                ContentType, id=int(content_type))
            new_comment.object_id = int(object_id)
        if model == ThreadedComment:
            new_comment.user = request.user
        if parent_id:
            new_comment.parent = get_object_or_404(model, id=int(parent_id))
        new_comment.save()
        parse_tagged_text(
            new_comment.comment, new_comment.id, 'threadedcomment')
        if model == ThreadedComment:
            if add_messages:
                request.user.message_set.create(
                    message="Your message has been posted successfully.")
        else:
            request.session['successful_data'] = {
                'name': form.cleaned_data['name'],
                'website': form.cleaned_data['website'],
                'email': form.cleaned_data['email'],
            }

        if ajax == 'json':
            return JSONResponse([new_comment, ])
        elif ajax == 'xml':
            return XMLResponse([new_comment, ])
        else:
            return HttpResponseRedirect(_get_next(request) + "#comment_%d" %
                                        new_comment.id)
    elif ajax == "json":
        return JSONResponse({'errors': form.errors}, is_iterable=False)
    elif ajax == "xml":
        template_str = """
<errorlist>
    {% for error,name in errors %}
    <field name="{{ name }}">
        {% for suberror in error %}<error>{{ suberror }}</error>{% endfor %}
    </field>
    {% endfor %}
</errorlist>
        """
        response_str = Template(template_str).render(
            Context({'errors': zip(form.errors.values(), form.errors.keys())}))
        return XMLResponse(response_str, is_iterable=False)
    else:
        return _preview(request, context_processors, extra_context,
                        form_class=form_class)