def reset(stub=None): forget = get_forget_by_stub(stub=stub) if get_current_user(): if forget: _delete_forget(forget) db.session.commit() return redirect(url_for('index')) if not forget: raise abort(404) if request.method == 'GET': if (datetime.now() - forget.created).total_seconds() > config.FORGET_STUB_EXPIRE: _delete_forget(forget) db.session.commit() return render_template('account.reset.html', expired=1, \ error='stub expired') return render_template('account.reset.html', stub=stub) password = request.form.get('password', None) status = check_password(password) if status: return render_template('account.reset.html', stub=stub, \ error=status[1]) user = get_user(forget.uid) _change_password(user, password) backend.delete('account:%s' % forget.stub) _delete_forget(forget) db.session.commit() clear_user_cache(user) return render_template('account.reset.html', ok=1)
def my_interest_list(): page = request.args.get('p', '1') if not page.isdigit(): raise abort(404) page = int(page) user = get_current_user() if not user: return redirect(url_for('event.index')) list_page = get_user_interest(user.id, page) #cache items total num total_events_num = get_user_interest_topic_count(user.id) if total_events_num != list_page.total: backend.delete('event:interest:list:%d:%d' % (user.id, page)) list_page = get_user_interest(user.id, page) if not list_page: raise abort(404) events = (get_topic(c.topic_id) for c in list_page.items) list_page.items = events events = gen_eventlist(list_page, 'from_uid') return render_template('event.list.html', events = events, \ list_page = list_page, url = url_for('event.my_interest_list'))
def post(self, tid): tid = request.form.get("tid") content = request.form.get("content") topic = get_topic(tid) sender, receiver = get_topic_users(g.current_user.id, topic.id) if not topic or not sender or not receiver: return redirect(url_for("topic.index")) make_reply(sender, receiver, topic, content) # clean cache clean_cache(g.current_user.id, receiver.uid, topic.id) backend.delete("topic:user_topic:%d:%d" % (g.current_user.id, topic.id)) backend.delete("topic:user_topic:%d:%d" % (receiver.uid, topic.id)) return redirect(url_for("topic.view", tid=tid))
def view(mail_id): box = request.headers.get('Referer', '') box = urlparse(box) query = parse_qs(box.query) if url_for('mail.index') == box.path or \ url_for('mail.inbox') == box.path: box = 'inbox' elif url_for('mail.outbox') == box.path: box = 'outbox' else: box = None if not box: return redirect(url_for('mail.index')) user = get_current_user() if not user: return redirect(url_for('account.login')) mail = get_mail(mail_id) #TODO ugly if not mail: raise abort(404) if not check_mail_access(user.id, mail): return redirect(url_for('mail.index')) if not mail.is_read and mail.to_uid == user.id: page = query.get('p', []) if not page: page = 1 else: page = int(page[0]) Mail.mark_as_read(mail) backend.delete('mail:unread:%d' % user.id) backend.delete('mail:inbox:%d:%d' % (user.id, page)) mobj = Obj() mobj.id = mail_id mobj.delete = '%s/%s' %(box, str(mail_id)) from_user = get_user(mail.from_uid) mobj.from_uid = from_user.name mobj.from_uid_url = from_user.domain or from_user.id mobj.title = mail.title mobj.content = mail.content if box == 'inbox': return render_template('mail.read.html', mail = mobj, reply=1) else: return render_template('mail.read.html', mail = mobj)
def get(self): page = request.args.get('p', '1') if not page.isdigit(): raise abort(404) page = int(page) msg = request.args.get('msg', None) list_page = get_user_topics(g.current_user.id, page) if page >1: page_1 = get_user_topics(g.current_user.id, 1) if list_page.total != page_1 or list_page.last_time != page_1.last_time: backend.delete('topic:list:%d:%d' % (g.current_user.id, page)) list_page = get_user_topics(g.current_user.id, page) return render_template('topic.index.html', msg=msg, \ topics=format_topic_list(list_page.items), list_page=list_page)
def gen_event(topic): eobj = Obj() eobj.id = topic.id from_user = get_user(topic.from_uid) eobj.from_uid = from_user.name eobj.from_uid_url = from_user.domain or from_user.id eobj.title = topic.title eobj.content = topic.content eobj.start_date = topic.start_date is_finished = topic.is_finished() if is_finished: backend.delete('event:view:%d' % eobj.id) eobj.finished = topic.finished return eobj
def event_list(): page = request.args.get('p', '1') if not page.isdigit(): raise abort(404) list_page = get_event_page(page) #cache items total num total_events_num = get_topic_count() if total_events_num != list_page.total: backend.delete('event:list:%d' % page) list_page = get_event_page(page) events = gen_eventlist(list_page, 'from_uid') return render_template('event.list.html', events = events, \ list_page = list_page)
def write(): user = get_current_user() if not user: return redirect(url_for('account.login')) if request.method == 'GET': to_uid = request.args.get('to') reply_mid = request.args.get('reply') title = '' content = '' if reply_mid: mail = get_mail(reply_mid) if user.id != mail.to_uid: return redirect(url_for('mail.index')) to_uid = mail.from_uid title = reply_mail_title(mail.title) content = '--------\n%s\n--------\n' % mail.content who = get_user(to_uid) if not to_uid or not who: return redirect(url_for('mail.index')) return render_template('mail.write.html', who=who, \ title=title, content=content) to_uid = request.form.get('to_uid') title = request.form.get('title') content = request.form.get('content') who = get_user(to_uid) error = check_mail(who, title, content) if error is not None: return render_template('mail.write.html', who=who, \ title=title, content=content, error=error) Mail.create(from_uid = user.id, to_uid = who.id, title = title, content = content) #clean cache backend.delete('mail:outbox:%d:1' % user.id) backend.delete('mail:outbox:count:%d' % user.id) backend.delete('mail:inbox:%d:1' % who.id) backend.delete('mail:inbox:count:%d' % who.id) backend.delete('mail:unread:%d' % who.id) return redirect(url_for('mail.index'))
def outbox(): user = get_current_user() page = request.args.get('p', '1') if not user: return redirect(url_for('account.login')) if not page.isdigit(): raise abort(404) list_page = get_outbox_mail(user.id, page) #check modify total_mail_num = get_outbox_count(user.id) if total_mail_num != list_page.total: backend.delete('mail:outbox:%d:%d' % (user.id, int(page))) list_page = get_outbox_mail(user.id, page) mails = gen_maillist(list_page, 'to_uid', -1) return render_template('mail.outbox.html', mails = mails, \ list_page = list_page)
def write(): user = get_current_user() if not user: return redirect(url_for('account.login')) if request.method == 'GET': return render_template('event.new.html') title = request.form.get('title') content = request.form.get('content') start_date = request.form.get('start_date') error = check_new_event(title, content, start_date) if error is not None: return render_template('event.new.html', \ content = content, error=error, \ title = title, start_date = start_date) Topic.create(from_uid = user.id, title = title, content = content, start_date = start_date) #clean cache backend.delete('event:list:1') backend.delete('event:topic:count') backend.delete('event:topic:%d:count' % user.id) return redirect(url_for('event.index'))
def reply(tid): user = get_current_user() if not user: return redirect(url_for(event.index)) topic = get_topic(tid) if not topic or topic.finished: raise abort(404) content = request.form.get('content') visit_user_id = request.form.get('_visit_user') error = check_new_reply(content, visit_user_id) visit_user = get_user(visit_user_id) if not visit_user: error = u'查无此人' if error is not None: eobj = gen_event(topic) session['reply'] = (error, content) return redirect(url_for('event.view', tid=eobj.id)) Reply.create(topic_id = topic.id, content = content, from_uid = visit_user.id) #clean cache backend.delete('event:%d:reply:count' % topic.id) mod = get_reply_count(topic.id) % PAGE_NUM last_page = get_reply_count(topic.id) / PAGE_NUM + int(bool(mod)) backend.delete('event:%d:reply:%d' % (topic.id, last_page)) if mod: backend.delete('event:%d:reply:%d' % (topic.id, last_page - 1)) return redirect(url_for('event.view', tid=tid) + '?p=%d' % last_page)
def post(self, stub): forget = get_forget_by_stub(stub=stub) if g.current_user: if forget: forget.delete() return redirect(url_for('index')) if not forget: raise abort(404) password = request.form.get('password', None) status = check_password(password) if status: return render_template('account.reset.html', stub=stub, \ error=status[1]) user = get_user(forget.uid) user.change_password(password) account_login(user) forget.delete() clear_user_cache(user) backend.delete('account:%s' % forget.stub) return render_template('account.reset.html', ok=1)
def get(self, tid): user_topic = get_user_topic(g.current_user.id, tid=tid) if user_topic: delete_topic(user_topic) backend.delete('topic:meta:%d' % g.current_user.id) backend.delete('topic:list:%d:1' % g.current_user.id) backend.delete('topic:user_topic:%d:%d' % (g.current_user.id, tid)) return redirect(url_for('topic.index'))
def _mark_status(method, tid, cobj): if method == 'select' and cobj.is_interest(): Choice.select(cobj) elif method == 'unselect' and cobj.is_select(): Choice.unselect(cobj) else: raise abort(404) backend.delete('event:select:%d' % tid) backend.delete('event:interest:%d' % tid) backend.delete('event:%d:interest:%d' % (cobj.from_uid, tid))
def get(self, tid): page = request.args.get('p', '1') topic = get_topic(tid) if not topic or not page.isdigit(): raise abort(404) page = int(page) if mark_read(g.current_user.id, tid): backend.delete('topic:user_topic:%d:%d' % (g.current_user.id, tid)) backend.delete('topic:notify:%d' % g.current_user.id) backend.delete('topic:list:%d:1' % g.current_user.id) list_page = get_user_replies(tid, page) if page > 1 and list_page.total != get_user_replies(tid, 1): backend.delete('topic:replies:%d:%d' % (tid, page)) list_page = get_user_replies(tid, page) #TODO check reply count!!! return render_template('topic.view.html', \ replies=format_reply_list(list_page.items), \ topic=topic, list_page=list_page)
def _user_control_interest(interest, topic, user, is_interest): if topic.finished: return False if interest == 'want' and user and not is_interest: Choice.create_interest(topic.id, user.id) elif interest == 'cancel' and user and is_interest: is_interest.cancel() else: return False backend.delete('event:topic:interest:%d:count' % user.id) backend.delete('event:%d:interest:%d' % (user.id, topic.id)) backend.delete('event:interest:%d' % topic.id) return True
def delete(box, mail_id): user = get_current_user() if not user: return redirect(url_for('account.login')) mail = get_mail(mail_id) if not mail or box not in ['inbox', 'outbox'] or \ not check_mail_access(user.id, mail): return redirect(url_for('mail.index')) if box == 'inbox': Mail.delete_inbox(mail) backend.delete('mail:inbox:%d:1' % user.id) backend.delete('mail:inbox:count:%d' % user.id) elif box == 'outbox': Mail.delete_outbox(mail) backend.delete('mail:outbox:%d:1' % user.id) backend.delete('mail:outbox:count:%d' % user.id) return redirect(url_for('mail.index'))
def _flush_comment(id): backend.delete(_ANTONIDAS_COMMENT_KEY % id)
def _flush_user_comment(type, user_id, target_id): backend.delete(_ANTONIDAS_USER_C_KEY % (type, user_id, target_id))
def _flush_food(id): backend.delete(_FOOD_KEY % id)
def clean_cache(uid, to_uid, tid): backend.delete('topic:topic:%d' % tid) backend.delete('topic:replies:%d:1' % tid) backend.delete('topic:list:%d:1' % uid) backend.delete('topic:list:%d:1' % to_uid) backend.delete('topic:notify:%d' % to_uid) backend.delete('topic:meta:%d' % uid) backend.delete('topic:meta:%d' % to_uid) cross_cache.delete('open:account:unread:{0}'.format(to_uid))
def delete(self): backend.delete(_JOB_FAV_KEY % (self.uid, self.aid)) db.session.delete(self) db.session.commit() _flush_favorite(self.uid, self.aid)
def _flush_dislike_num(target, kind): backend.delete(_DISLIKE_NUM_TARGET % (target, kind))
def _flush_restaurant(id): backend.delete(_RESTAURANT_KEY % id)
def _flush_article_content(aid): backend.delete(_JOB_ARTICLE_C_KEY % aid)
def _flush_mapping(app): backend.delete(_ANTONIDAS_MAPPING_KEY % app)
def _flush_favorite_page(uid): backend.delete(_JOB_FAV_ARTICLE % uid)
def _flush_topic(id): backend.delete(_TOPIC_KEY % id)
def _flush_article_page(fid): backend.delete(_JOB_SHOW_ARTICLES) backend.delete(_JOB_NONE_INTERN_ARTICLES) backend.delete(_JOB_FEED_ARTICLES % fid) # TODO 这样写真的很奇怪...但是这货的is_published属性是在数据库直接set的... # 刚刚create的时候都没得, 删除的时候也不一定有, 所以都flush掉 # 这样很挫, 应该想个什么策略... backend.delete(_JOB_ALL_ARTICLES % (fid, True)) backend.delete(_JOB_ALL_ARTICLES % (fid, False)) backend.delete(_JOB_FEED_COUNT % fid)
def _flush_app_comment(type, target_id): backend.delete(_ANTONIDAS_APP_C_KEY % (type, target_id))
def _flush_favorite(uid, aid): backend.delete(_JOB_FAV_KEY % (uid, aid))