def find_setting(): user = g.user look = Looking.query.filter_by(user_id=user.id).first() form = LookingForm(obj=look) conf.ACCESS_KEY = app.config["QINIU_ACCESS_KEY"] conf.SECRET_KEY = app.config["QINIU_SECRET_KEY"] policy = rs.PutPolicy("bearwave") qiniutoken = policy.token() if form.validate_on_submit(): if not look: look = Looking(**form.data) look.user = g.user look.server_active = True look.active_time = datetime.now() db.session.add(look) db.session.commit() return redirect("/member/"+str(user.id)+"#looking-info") else: form.populate_obj(look) look.server_active = True look.active_time = datetime.now() db.session.commit() return redirect("/member/"+str(user.id)+"#looking-info") return render('/looking/setting.jade',locals())
def topic_add(slug): form = TopicForm() node = Node.query.filter_by(slug=slug).first(); node.topic_count = Topic.query.filter_by(node_id=node.id).count() if form.validate_on_submit(): topic = Topic(**form.data) topic.content = topic.content.strip() topic.node = node topic.user = g.user topic.ip = request.remote_addr db.session.add(topic) db.session.commit() #Notification users = notiuser(topic.content) #print users if len(users) > 0 : for u in users: n = Notification(user_id= u.id, action=g.user, n_type=3, title=topic.title, topic_id=topic.id, content=topic.content) notify.incr("notify:user%s" % u.id) db.session.add(n) db.session.commit() return redirect('/topic/'+str(topic.id)) return render('/node/new.jade',locals())
def recent_topic(page=1): try: topics = Topic.query.order_by(Topic.update_time.desc())\ .paginate(page,per_page=30) except: topics = None return render('/recent.jade',locals())
def recent_treehole(page=1): try: topics = TreeHole.query.order_by(TreeHole.update_time.desc())\ .paginate(page,per_page=30) except: topics = None return render('/treehole/list.jade',locals())
def topic_detail(topic_id): topic = Topic.query.get_or_404(topic_id) if not g.user and topic.node.node_type == 2: flash(u"当前话题属于私密节点,需要登陆后才可以访问","warning") return redirect("/login") node = Node.query.filter_by(id= topic.node_id).first() topic.hits += 1 db.session.commit() comments = Comment.query.filter_by(topic_id=topic_id)\ .order_by(Comment.create_time) form = None isFav = None if g.user: mid = str(g.user.id) tid = str(topic_id) isFav = FavTopic.query.filter_by(user_id=mid, topic_id=tid).first() form = CommentForm() if form.validate_on_submit(): comment = Comment(**form.data) comment.content = comment.content.strip() comment.topic = topic comment.user = g.user comment.ip = request.remote_addr topic.update_time = datetime.now() topic.comment_count += 1 #Notification if g.user.id != topic.user_id: n = Notification( user_id= topic.user_id, action_id = g.user.id, n_type = 1, title = topic.title, topic_id= topic.id, content = comment.content ) db.session.add(n) notify.incr("notify:user%s" % topic.user_id) users = notiuser(comment.content) if len(users) > 0: for user in users: noti = Notification( user_id= user.id, action_id = g.user.id, n_type = 2, title = topic.title, topic_id = topic.id, content = comment.content ) db.session.add(noti) notify.incr("notify:user%s" % user.id) db.session.add(comment) db.session.commit() count = comments.count() return redirect('/topic/'+str(topic.id)+'#comment-'+str(count)) return render('/node/topic.jade',locals())
def index(): topics = Topic.query.order_by(Topic.update_time.desc()).limit(6).all() treehole = TreeHole.query.order_by(TreeHole.create_time.desc())\ .limit(6).all() interviews = Interview.query\ .order_by(Interview.create_time.desc()).limit(4).all() nodelist = [1,2,3,4,5,8] node = Node.query.filter(Node.id.in_(nodelist)) return render('/index.jade',locals())
def setting(): user = g.user form = SettingForm(obj=user) if form.validate_on_submit(): form.populate_obj(user) db.session.commit() flash(u'设置成功','success') return redirect('/member/'+str(g.user.id)) return render('/setting.jade',locals())
def test(): namefield = k() if request.method == "POST": csrf_check() namefield.text = request.form["name"] if not namefield.text or len(namefield.text) > 20: namefield.error = u"not empty" return render('test.jade',locals())
def forgetpassword(): form = ForgetForm() if form.validate_on_submit(): email = form.data['email'].lower() name = form.data['username'].lower() try: user = User.query.filter_by(email = email).first() except: user = None if user and user.username == name: result = r.get("resetuser:%s" % email) if result: finished = k() finished.title = u"重新设置密码" finished.content = u"重新设置密码的功能在24小时只能使用一次" return render('finished.jade',locals()) uuid = uuid4() pipe = r.pipeline() pipe.set("reset:%s" % uuid,email) pipe.expire("reset:%s" % uuid,60*60*24) pipe.set("resetuser:%s" % email,"1") pipe.expire("resetuser:%s" % email,60*60*24) pipe.execute() subject = u"重新设置密码-BEARWAVE" reseturl = "http://www.bearwave.com/resetpassword/"+str(uuid) text = ''' 这是一封系统自动发送的邮件,不能直接回复。 如果当前操作不是您本人的所为,请忽略这个邮件,但这类操作意味着可能有人对您的隐私有兴趣。 修改密码可以访问下面的连接 ''' msg = text+reseturl send_email(email,subject,msg) finished = k() finished.title = u"重新设置密码" finished.content = u"邮件已发送,请注意垃圾邮件箱" return render('finished.jade',locals()) else: error = u"邮箱与用户名不匹配" return render('/forgetpassword.jade',locals())
def memberinfo(id): user = User.query.filter_by(id=id).first_or_404() looking = Looking.query.filter_by(user=user).first() if g.user: mid = str(g.user.id) tid = str(id) isFav = FavUser.query.filter_by(user_id=mid, target_id=tid).first() else: ifFav = None return render('/member/member.jade',locals())
def treehole_add(): form = TreeHoleForm() if form.validate_on_submit(): th = TreeHole(**form.data) th.content = th.content.strip() th.ip = request.remote_addr db.session.add(th) db.session.commit() return redirect('/treehole/'+str(th.id)) return render('/treehole/new.jade',locals())
def membertopic(id): user = User.query.filter_by(id=id).first_or_404() topics = Topic.query.filter_by(user_id=id).order_by(Topic.create_time.desc()).limit(20) if g.user: mid = str(g.user.id) tid = str(id) isFav = FavUser.query.filter_by(user_id=mid, target_id=tid).first() else: ifFav = None return render('/member/topic.jade',locals())
def memberreply(id): user = User.query.filter_by(id=id).first_or_404() comments = Comment.query.filter_by(user_id=user.id)\ .order_by(Comment.create_time.desc()).limit(20) if g.user: mid = str(g.user.id) tid = str(id) isFav = FavUser.query.filter_by(user_id=mid, target_id=tid).first() else: ifFav = None return render('/member/reply.jade',locals())
def topic_atom(): xml = r.get("feed:topic") if not xml: topics = Topic.query\ .order_by(Topic.create_time.desc()).limit(10).all() site = k() site.title= u"bearwave 话题" site.subtitle = u"最近的话题" site.url = u"http://www.bearwave.com" site.atomurl = u"http://www.bearwave.com/atom.xml" site.topics = topics site.time = datetime.now() xml = render('/feed/topic.xml',locals()) r.setex("feed:topic",xml,60*60) return Response(xml, mimetype='text/xml')
def interview_atom(): xml = r.get("feed:interview") if not xml: interviews = Interview.query\ .order_by(Interview.create_time.desc()).limit(10).all() site = k() site.title= u"bearwave 访谈" site.subtitle = u"不同的生活经历,得到不同的生活经验,把他们留给年轻人是一件非常有意义的事情" site.url = u"http://www.bearwave.com/interview" site.atomurl = u"http://www.bearwave.com/interview/atom.xml" site.topics = interviews site.time = datetime.now() xml = render('/feed/interview.xml',locals()) r.setex("feed:interview",xml,60*60) return Response(xml, mimetype='text/xml')
def login(): if g.user: flash(u'登陆成功','success') return redirect('/setting') form = SigninForm() if form.validate_on_submit(): if not form.user: return none else: session.permanent = True session['id'] = form.user.id session['token'] = form.user.token flash(u'登陆成功','success') return redirect('/setting') return render('/login.jade',locals())
def resetpassword(uuid): uid = str(uuid) mail = r.get("reset:%s" % uuid) if mail: form = ResetPasswordForm(); if form.validate_on_submit(): user = User.query.filter_by(email=mail).first_or_404() user.change_password(form.password.data) db.session.commit() flash(u"密码修改成功",'success') return redirect("/login") return render('resetpassword.jade',locals()) else: return u"您的链接已经过期,发送后24小时内使用才有效"
def topic_list(slug,page=1): try: node = Node.query.filter_by(slug=slug).first_or_404() if not g.user and node.node_type == 2: flash(u"当前节点是私密的节点,需要登陆后才可以访问","warning") return redirect("/login") node.topic_count = Topic.query.filter_by(node_id=node.id).count() if g.user: mid = str(g.user.id) tid = str(node.id) isFav = FavNode.query.filter_by(user_id=mid, node_id=tid).first() topics = Topic.query.filter_by(node_id=node.id)\ .order_by(Topic.update_time.desc()).paginate(page,per_page=30) except: isFav = None topics = None node = None return render('/node/node.jade',locals())
def register(): if g.user: logout() return redirect('/register') form = SignupForm() if form.validate_on_submit(): user = User(**form.data) imgurl = Gravatar(user.email, secure=False, size=100, rating='x')\ .thumb+'&d=404' req = requests.get(imgurl) #print "qqqqq" #print req.status_code if req.status_code == 200: user.avatar = "gravatar" db.session.add(user) db.session.commit() session['id'] = user.id session['token'] = user.token flash(u'注册成功','success') return redirect('/member/'+str(user.id)) return render('/register.jade',locals())
def treehole_detail(id): th = TreeHole.query.get_or_404(id) th.hits += 1 db.session.commit() comments = TreeComment.query.filter_by(treehole_id=id)\ .order_by(TreeComment.create_time).all() form = None if g.user: form = TreeCommentForm() if form.validate_on_submit(): comment = TreeComment(**form.data) comment.content = comment.content.strip() comment.treehole_id = id comment.ip = request.remote_addr th.update_time = datetime.now() th.comment_count += 1 db.session.add(comment) db.session.commit() count = th.comment_count return redirect('/treehole/'+str(th.id)+'#comment-'+str(count)) return render('/treehole/detail.jade',locals())
def memberfavmember(): user = g.user favs = FavUser.query.filter_by(user_id=user.id).limit(30) tid = [x.target_id for x in favs] favuser = User.query.filter(User.id.in_(tid)).limit(30) return render('/my/fav-member.jade',locals())
def memberfavnode(): user = g.user favs = FavNode.query.filter_by(user_id=user.id).limit(30) tid = [x.node_id for x in favs] favnode = Node.query.filter(Node.id.in_(tid)).all() return render('/my/fav-node.jade',locals())
def memberfavtopic(): user = g.user favs = FavTopic.query.filter_by(user_id=user.id).limit(30) tid = [x.topic_id for x in favs] favtopic = Topic.query.filter(Topic.id.in_(tid)).all() return render('/my/fav-topic.jade',locals())
def interview(page=1): interviews = Interview.query\ .order_by(Interview.create_time.desc())\ .paginate(page,per_page=10) return render('/interview.jade',locals())
def page_details(url): interview = Page.query.filter_by(absurl=url).first_or_404() return render('/page.jade',locals())
def avatar(): conf.ACCESS_KEY = app.config["QINIU_ACCESS_KEY"] conf.SECRET_KEY = app.config["QINIU_SECRET_KEY"] policy = rs.PutPolicy("bearwave") qiniutoken = policy.token() return render('/avatar.jade',locals())
def find_twitter(page=1): members = User.query.filter(User.twitter!="")\ .order_by(User.create_time.desc())\ .paginate(page,per_page=20) return render('/looking/twitter.jade',locals())
def find_all(page=1): looking = Looking.query.filter_by(server_active="1",find_active="1")\ .order_by(Looking.active_time.desc())\ .paginate(page,per_page=20) return render('/looking/index.jade',locals())
def find_instagram(page=1): members = User.query.filter(User.instagram!="")\ .order_by(User.create_time.desc())\ .paginate(page,per_page=20) return render('/looking/instagram.jade',locals())
def interview_details(url): interview = Interview.query.filter_by(absurl=url).first_or_404() interview.hits += 1 db.session.commit() return render('/interview-details.jade',locals())