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)
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)