def reply(request, forum, thread): """ If a thread isn't closed, and the user is logged in, post a reply to a thread. Note we don't have "nested" replies at this stage. """ f = get_object_or_404(Forum, slug=forum) t = get_object_or_404(Thread, pk=thread) p = t.post_set.all().order_by('-time')[:1] if t.closed: return HttpResponseRedirect('/accounts/login?next=%s' % request.path) if request.method == 'POST': form = create_newpostform(request) if form.is_valid(): if request.user.is_authenticated() or form.login(request): p = Post( thread=t, author=request.user, body=form.cleaned_data['body'], time=datetime.now(), ) if form.data.has_key(u'post'): p.save() return HttpResponseRedirect(p.get_absolute_url()) else: return render_to_response( 'community/thread.html', RequestContext( request, { 'forum': f, 'form': form, 'thread': t, 'posting': p, 'form_action': '' })) else: form = create_newpostform(request) return list_detail.object_list(request, paginate_by=10, queryset=p, template_name='community/thread.html', extra_context={ 'forum': f, 'form': form, 'thread': t, 'form_action': '' })
def newthread(request, forum): """ Rudimentary post function. Only allows a user to post if they're logged in. """ f = get_object_or_404(Forum, slug=forum) t = f.thread_set.all().order_by('thread_latest_post')[:1] if request.method == 'POST': form = create_newthreadform(request) if form.is_valid(): if request.user.is_authenticated() or form.login(request): t = Thread( forum=f, title=form.cleaned_data['title'], ) if form.data.has_key(u'post'): t.save() p = Post( thread=t, author=request.user, body=form.cleaned_data['body'], time=datetime.now(), ) if form.data.has_key(u'post'): p.save() return HttpResponseRedirect(t.get_absolute_url()) else: return render_to_response( 'community/thread_list.html', RequestContext( request, { 'posting': p, 'forum': f, 'form': form, 'form_action': '', 'thread': t })) else: form = create_newthreadform(request) return render_to_response( 'community/thread_list.html', RequestContext(request, { 'forum': f, 'form': form, 'form_action': '', 'threads': t }))
def new_post(): form = Newpostform() if form.validate_on_submit(): post = Post(title=form.title.data, content=form.content.data, author=current_user) db.session.add(post) db.session.commit() flash('Your post has been created!', 'success') return redirect(url_for('Home')) return render_template('newpost.html', title='New Post', form=form, legend='New Post')
def get_queryset(self, **kwargs): forum = self.kwargs['forum'] thread = self.kwargs['thread'] f = get_object_or_404(Forum, slug=forum) t = get_object_or_404(Thread, pk=thread) p = t.post_set.all().order_by('-time')[:1] if t.closed: return HttpResponseRedirect('/accounts/login?next=%s' % request.path) if request.method == 'POST': form = create_newpostform(request) if form.is_valid(): if request.user.is_authenticated() or form.login(request): p = Post( thread=t, author=request.user, body=form.cleaned_data['body'], time=datetime.now(), ) if form.data.has_key(u'post'): p.save() return HttpResponseRedirect(p.get_absolute_url()) else: return render( request, 'community/thread.html', { 'forum': f, 'form': form, 'thread': t, 'posting': p, 'form_action': '' }) else: form = create_newpostform(request) return p
def publish_post(): """ 用户发表帖子 :param { image || content || category} :return: data """ user = g.current_user images = request.files.getlist('file') category_id = request.form.get('category_id') content = request.form.get('content') print('*' * 20) print(images) print(category_id) print(content) print('*' * 20) # 用户发帖子时有6种情况 # 1. 在选择话题分类的情况下 # 1) 只发文字 # 2) 只发图片 # 3) 两者都发 # 2. 在没有选择话题分类的情况下 # 1) 只发文字 # 2) 只发图片 # 3) 文字和图片都发 # 判断前端是否传送image过来 has_image = True for img in images: if not img.filename: has_image = False # 如果都没发送content or image, 直接返回 # 实际上这是由前端来判断的, 我懒得写了. if not any([content, has_image]): return jsonify(errno=RET.PARAMERR, errmsg='请填写内容再发送过来', data='') if category_id: try: category = Category.query.filter_by(id=category_id).first() except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DATAERR, errmsg='查询该分类失败', data='') if category is None: return jsonify(errno=RET.DATAEXIST, errmsg='该分类不存在!', data='') if content and has_image: image_url = [] try: for image in images: key = storage(image.read()) image_url.append(key) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg='第三方上传异常', data='') try: post = Post(user_id=user.id, content=content, category_id=category_id) db.session.add(post) db.session.commit() print('post_id: %s' % post.id) for url in image_url: images = Images(post_id=post.id, url=url) db.session.add(images) db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DATAERR, errmsg='保存数据失败!', data='') return jsonify(errno=RET.OK, errmsg='发表成功!') elif content and (not has_image): try: post = Post(user_id=user.id, content=content, category_id=category_id) db.session.add(post) db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DATAERR, errmsg='保存数据失败!', data='') return jsonify(errno=RET.OK, errmsg='发表成功!') else: image_url = [] try: for image in images: key = storage(image.read()) image_url.append(key) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg='第三方上传异常', data='') try: post = Post(user_id=user.id, category_id=category_id) db.session.add(post) db.session.commit() for url in image_url: images = Images(post_id=post.id, url=url) db.session.add(images) db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DATAERR, errmsg='保存数据失败!', data='') return jsonify(errno=RET.OK, errmsg='发表成功!') else: if content and has_image: image_url = [] try: for image in images: key = storage(image.read()) image_url.append(key) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg='第三方上传异常', data='') try: post = Post(user_id=user.id, content=content) db.session.add(post) db.session.commit() for url in image_url: images = Images(post_id=post.id, url=url) db.session.add(images) db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DATAERR, errmsg='保存数据失败!', data='') return jsonify(errno=RET.OK, errmsg='发表成功!') elif content and (not has_image): try: post = Post(user_id=user.id, content=content) db.session.add(post) db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DATAERR, errmsg='保存数据失败!', data='') return jsonify(errno=RET.OK, errmsg='发表成功!') else: image_url = [] try: for image in images: key = storage(image.read()) image_url.append(key) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.THIRDERR, errmsg='第三方上传异常', data='') try: post = Post(user_id=user.id) db.session.add(post) db.session.commit() for url in image_url: images = Images(post_id=post.id, url=url) db.session.add(images) db.session.commit() except Exception as e: current_app.logger.error(e) db.session.rollback() return jsonify(errno=RET.DATAERR, errmsg='保存数据失败!', data='') return jsonify(errno=RET.OK, errmsg='发表成功!')