def rebuild_comment(comment, replyee_id): replyee_name = User.get_name_by_id(replyee_id) replyee_abbr = User.get_abbr_by_id(replyee_id) comment = "@" + "<a href=" + url_for( 'user', user_abbr=replyee_abbr ) + ">" + replyee_name + "</a>" + " " + comment.split(' ')[1] return comment
def get_comment_replyee_id(comment): replyee_id = -1 header = comment.split(' ')[0] if header.find('@') == 0: if User.check_exist_by_name(header.lstrip('@')): replyee_name = header.lstrip('@') replyee_id = User.get_id_by_name(replyee_name) return replyee_id
def verify_email(user_id, verify_code): user_name = User.get_name(user_id) if verify_code == hashlib.sha1(user_name).hexdigest(): User.active_user(user_id) session['user_id'] = user_id session['user_name'] = user_name return redirect(url_for('verify_email_callback', state='active_succ')) else: return redirect(url_for('verify_email_callback', state='active_failed'))
def auth(): code = request.args['code'] # get access token and userID url = "https://www.douban.com/service/auth2/token" data = { 'client_id': '0cf909cba46ce67526eb1d62ed46b35f', 'client_secret': '4c87a8ef33e6c6be', 'redirect_uri': 'http://localhost:5000/login/douban', 'grant_type': 'authorization_code', 'code': code } data = urllib.urlencode(data) req = urllib2.Request(url, data) response = urllib2.urlopen(req) info = eval(response.read()) user_id = int(info['douban_user_id']) # if user exist if User.check_user_exist(user_id): # if user unactive if not User.check_user_active(user_id): return redirect( url_for('verify_email_callback', state='unactive', user_id=user_id)) else: # set session session['user_id'] = user_id session['user_name'] = User.get_name(user_id) return redirect(url_for('index')) # if not exist else: # get user info url = "https://api.douban.com/v2/user/" + str(user_id) req = urllib2.Request(url) response = urllib2.urlopen(req) user_info = eval(response.read().replace( '\\', '')) # remove '\' and convert str to dict # add user user_id = int(user_info['id']) user_name = user_info['name'] avatar = user_info['avatar'] signature = user_info['signature'] desc = user_info['desc'] location_id = int(user_info['loc_id']) location = user_info['loc_name'] User.add_user(user_id, user_name, avatar, signature, desc, location_id, location) # go to the verify email page return redirect(url_for('send_verify_email', user_id=user_id))
def auth(): code = request.args['code'] # get access token and userID url = "https://www.douban.com/service/auth2/token" data = { 'client_id': '0cf909cba46ce67526eb1d62ed46b35f', 'client_secret': '4c87a8ef33e6c6be', 'redirect_uri': 'http://localhost:5000/login/douban', 'grant_type': 'authorization_code', 'code': code } data = urllib.urlencode(data) req = urllib2.Request(url, data) response = urllib2.urlopen(req) info = eval(response.read()) user_id = int(info['douban_user_id']) # if user exist if User.check_user_exist(user_id): # if user unactive if not User.check_user_active(user_id): return redirect(url_for('verify_email_callback', state='unactive', user_id=user_id)) else: # set session session['user_id'] = user_id session['user_name'] = User.get_name(user_id) return redirect(url_for('index')) # if not exist else: # get user info url = "https://api.douban.com/v2/user/" + str(user_id) req = urllib2.Request(url) response = urllib2.urlopen(req) user_info = eval(response.read().replace('\\', '')) # remove '\' and convert str to dict # add user user_id = int(user_info['id']) user_name = user_info['name'] avatar = user_info['avatar'] signature = user_info['signature'] desc = user_info['desc'] location_id = int(user_info['loc_id']) location = user_info['loc_name'] User.add_user(user_id, user_name, avatar, signature, desc, location_id, location) # go to the verify email page return redirect(url_for('send_verify_email', user_id=user_id))
def send_verify_email(): if request.method == 'GET': user_id = int(request.args['user_id']) form = EmailForm(user_id=user_id) user_name = User.get_name_by_id(user_id) return render_template('sign/send_verify_email.html', user_name=user_name, form=form) else: form = EmailForm(request.form) if form.validate(): # email t_addr = form.email.data # user info user_id = int(form.user_id.data) user_name = User.get_name_by_id(user_id) # add this email to user User.add_email(user_id, t_addr) # gene verify url verify_code = hashlib.sha1(user_name).hexdigest() verify_url = config.SITE_DOMAIN + "verify_email/douban/" + str( user_id) + "/" + verify_code # prepare email content msgText = '''<h3>点 <a href='%s'>这里</a>,激活你在西窗烛的帐号。</h3>''' % verify_url msg = MIMEText(msgText, 'html', 'utf-8') msg['From'] = "西窗烛 <" + config.SMTP_FROM + ">" msg['To'] = user_name + "<" + t_addr + ">" msg['Subject'] = "欢迎来到西窗烛!" # send email s = smtplib.SMTP(config.SMTP_SERVER, config.SMTP_PORT) s.login(config.SMTP_USER, config.SMTP_PASSWORD) s.sendmail(config.SMTP_FROM, t_addr, msg.as_string()) return redirect(url_for('verify_email_callback', state='send_succ')) else: user_id = int(form.user_id.data) user_name = User.get_name_by_id(user_id) return render_template('sign/send_verify_email.html', user_name=user_name, form=form)
def people_topics(user_abbr): people = User.get_user_by_abbr(user_abbr) user_name = '我' if "user_id" in session and session['user_id'] == people['UserID'] else people['Name'] # pagination num_per_page = 10 page = int(request.args['page'] if 'page' in request.args else 1) topics = Topic.get_topics_by_user(people['UserID'], page, num_per_page) for t in topics: t['Time'] = time_diff(t['Time']) topics_num = Topic.get_topics_num_by_user(people['UserID']) # page paras total_page = int(math.ceil(topics_num / num_per_page)) pre_page = (page - 1) if page > 1 else 1 if total_page == 0: next_page = 1 elif page < total_page: next_page = page + 1 else: next_page = total_page return render_template('people_topics.html', people=people, topics=topics, user_name=user_name, page=page, total_page=total_page, pre_page=pre_page, next_page=next_page)
def people_love_works(user_abbr): people = User.get_user_by_abbr(user_abbr) user_name = '我' if "user_id" in session and session['user_id'] == people['UserID'] else people['Name'] # pagination num_per_page = 10 page = int(request.args['page'] if 'page' in request.args else 1) works = Love_work.get_works_by_user(people['UserID'], page, num_per_page) for work in works: work['Content'] = content_clean(work['Content']) works_num = Love_work.get_works_num_by_user(people['UserID']) # page paras total_page = int(math.ceil(works_num / num_per_page)) pre_page = (page - 1) if page > 1 else 1 if total_page == 0: next_page = 1 elif page < total_page: next_page = page + 1 else: next_page = total_page return render_template('people_love_works.html', people=people, works=works, user_name=user_name, page=page, total_page=total_page, pre_page=pre_page, next_page=next_page)
def user(user_abbr): user = User.get_user_by_abbr(user_abbr) is_me = True if "user_id" in session and session['user_id'] == user[ 'UserID'] else False # works works = Collect.get_works_by_user(user['UserID'], 1, 3) for work in works: work['Content'] = content_clean(work['Content']) works_num = Collect.get_works_num_by_user(user['UserID']) # reivews reviews = Review.get_reviews_by_user(user['UserID'], 1, 3, is_me) for r in reviews: r['Time'] = time_diff(r['Time']) reviews_num = Review.get_reviews_num_by_user(user['UserID'], is_me) # topics topics = Topic.get_topics_by_user(user['UserID'], 1, 3) for t in topics: t['Time'] = time_diff(t['Time']) topics_num = Topic.get_topics_num_by_user(user['UserID']) return render_template('user/user.html', user=user, works=works, works_num=works_num, reviews=reviews, reviews_num=reviews_num, topics=topics, topics_num=topics_num)
def user_reviews(user_abbr): user = User.get_user_by_abbr(user_abbr) is_me = True if "user_id" in session and session['user_id'] == user['UserID'] else False user_name = '我' if is_me else user['Name'] # pagination num_per_page = 10 page = int(request.args['page'] if 'page' in request.args else 1) reviews = Review.get_reviews_by_user(user['UserID'], page, num_per_page, is_me) for r in reviews: r['Time'] = time_diff(r['Time']) reviews_num = Review.get_reviews_num_by_user(user['UserID'], is_me) # page paras total_page = int(math.ceil(reviews_num / num_per_page)) pre_page = (page - 1) if page > 1 else 1 if total_page == 0: next_page = 1 elif page < total_page: next_page = page + 1 else: next_page = total_page return render_template('user/user_reviews.html', user=user, reviews=reviews, reviews_num=reviews_num, user_name=user_name, page=page, total_page=total_page, pre_page=pre_page, next_page=next_page)
def people(user_id): people = User.get_people(user_id) works = Love.get_works_by_user_love(user_id) for work in works: work['Content'] = re.sub(r'<([^<]+)>', '', work['Content']) reviews = Review.get_reviews_by_user(user_id) return render_template('people.html', people=people, works=works, reviews=reviews)
def send_verify_email(): if request.method == 'GET': user_id = int(request.args['user_id']) form = EmailForm(user_id=user_id) user_name = User.get_name_by_id(user_id) return render_template('sign/send_verify_email.html', user_name=user_name, form=form) else: form = EmailForm(request.form) if form.validate(): # email t_addr = form.email.data # user info user_id = int(form.user_id.data) user_name = User.get_name_by_id(user_id) # add this email to user User.add_email(user_id, t_addr) # gene verify url verify_code = hashlib.sha1(user_name).hexdigest() verify_url = config.SITE_DOMAIN + "verify_email/douban/" + str(user_id) + "/" + verify_code # prepare email content msgText = '''<html> <h1>点击下面的链接,激活你在西窗烛的帐号:</h1> <a href='%s'>%s</a> </html>''' % (verify_url, verify_url) msg = MIMEText(msgText, 'html', 'utf-8') msg['From'] = "西窗烛 <" + config.SMTP_FROM + ">" msg['To'] = user_name + "<" + t_addr + ">" msg['Subject'] = "欢迎来到西窗烛!" # send email s = smtplib.SMTP(config.SMTP_SERVER, config.SMTP_PORT) s.login(config.SMTP_USER, config.SMTP_PASSWORD) s.sendmail(config.SMTP_FROM, t_addr, msg.as_string()) return redirect(url_for('verify_email_callback', state='send_succ')) else: user_id = int(form.user_id.data) user_name = User.get_name_by_id(user_id) return render_template('sign/send_verify_email.html', user_name=user_name, form=form)
def build_topic_inform_title(replyer_id, topic_id): replyer = User.get_user_by_id(replyer_id) topic = Topic.get_topic(topic_id) inform_title = "<a href=" + url_for( 'user', user_abbr=replyer['Abbr']) + ">" + replyer[ 'Name'] + "</a> 在话题 " + "<a href=" + url_for( 'single_topic', topic_id=topic_id ) + ">" + topic['Title'] + "</a>" + " 中回复了你" return inform_title
def build_review_inform_title(replyer_id, review_id): replyer = User.get_user_by_id(replyer_id) review = Review.get_review(review_id) inform_title = "<a href=" + url_for( 'user', user_abbr=replyer['Abbr']) + ">" + replyer[ 'Name'] + "</a> 在评论 " + "<a href=" + url_for( 'single_review', review_id=review_id ) + ">" + review['Title'] + "</a>" + " 中回复了你" return inform_title
def send_verify_email(): if request.method == 'GET': user_id = int(request.args['user_id']) user_name = User.get_name(user_id) return render_template('send_verify_email.html', user_id=user_id, user_name=user_name) elif request.method == 'POST': # email f_addr = "*****@*****.**" t_addr = request.form['email'] # user info user_id = int(request.form['user_id']) user_name = User.get_name(user_id) # add this email to user User.add_email(user_id, t_addr) # gene verify url verify_code = hashlib.sha1(user_name).hexdigest() verify_url = "http://*****:*****@qq.com', 'xiaowang2013qqzi') s.sendmail('*****@*****.**', t_addr, msg.as_string()) return redirect(url_for('verify_email_callback', state='send_succ'))
def auth(): code = request.args['code'] # get access token and userID url = "https://www.douban.com/service/auth2/token" data = { 'client_id': config.DOUBAN_CLIENT_ID, 'client_secret': config.DOUBAN_SECRET, 'redirect_uri': config.DOUBAN_REDIRECT_URI, 'grant_type': 'authorization_code', 'code': code } data = urllib.urlencode(data) req = urllib2.Request(url, data) response = urllib2.urlopen(req) info = eval(response.read()) user_id = int(info['douban_user_id']) # if user exist if User.check_exist_by_id(user_id): # if user unactive if not User.check_active(user_id): return redirect(url_for('verify_email_callback', state='unactive', user_id=user_id)) else: # set session session.permanent = True session['user_id'] = user_id session['user_name'] = User.get_name_by_id(user_id) session['user_abbr'] = User.get_abbr_by_id(user_id) return redirect(url_for('index')) # if not exist else: # get user info url = "https://api.douban.com/v2/user/" + str(user_id) req = urllib2.Request(url) response = urllib2.urlopen(req) user_info = eval(response.read().replace('\\', '')) # remove '\' and convert str to dict # add user user_id = int(user_info['id']) user_name = user_info['name'] abbr = user_info['uid'] avatar = user_info['avatar'] signature = user_info['signature'] desc = user_info['desc'] location_id = int(user_info['loc_id']) if 'loc_id' in user_info else 0 location = user_info['loc_name'] User.add_user(user_id, user_name, abbr, avatar, signature, desc, location_id, location) # go to the verify email page return redirect(url_for('send_verify_email', user_id=user_id))
def people(user_abbr): people = User.get_user_by_abbr(user_abbr) user_name = '我' if "user_id" in session and session['user_id'] == people['UserID'] else people['Name'] works = Love_work.get_works_by_user(people['UserID'], 1, 3) for work in works: work['Content'] = content_clean(work['Content']) works_num = Love_work.get_works_num_by_user(people['UserID']) reviews = Review.get_reviews_by_user(people['UserID'], 1, 3) for r in reviews: r['Time'] = time_diff(r['Time']) reviews_num = Review.get_reviews_num_by_user(people['UserID']) topics = Topic.get_topics_by_user(people['UserID'], 1, 3) for t in topics: t['Time'] = time_diff(t['Time']) topics_num = Topic.get_topics_num_by_user(people['UserID']) return render_template('people.html', people=people, works=works, works_num=works_num, reviews=reviews, reviews_num=reviews_num, topics=topics, topics_num=topics_num, user_name=user_name)
def auth(): # get current authed userID code = request.args['code'] url = "https://www.douban.com/service/auth2/token" data = { 'client_id': config.DOUBAN_CLIENT_ID, 'client_secret': config.DOUBAN_SECRET, 'redirect_uri': config.DOUBAN_REDIRECT_URI, 'grant_type': 'authorization_code', 'code': code } r = requests.post(url, data=data).json() user_id = int(r['douban_user_id']) # if user exist if User.check_exist_by_id(user_id): # if user unactive if not User.check_active(user_id): return redirect( url_for('verify_email_callback', state='unactive', user_id=user_id)) else: # set session session.permanent = True session['user_id'] = user_id session['user_name'] = User.get_name_by_id(user_id) session['user_abbr'] = User.get_abbr_by_id(user_id) return redirect(url_for('index')) # if not exist else: # get user info url = "https://api.douban.com/v2/user/" + str(user_id) user_info = requests.get(url).json() # add user user_id = int(user_info['id']) user_name = user_info['name'] abbr = user_info['uid'] avatar = user_info['avatar'] signature = user_info['signature'] desc = user_info['desc'] location_id = int(user_info['loc_id']) if 'loc_id' in user_info else 0 location = user_info['loc_name'] User.add_user(user_id, user_name, abbr, avatar, signature, desc, location_id, location) # go to the verify email page return redirect(url_for('send_verify_email', user_id=user_id))
def user(user_abbr): user = User.get_user_by_abbr(user_abbr) is_me = True if "user_id" in session and session['user_id'] == user['UserID'] else False # works works = Collect.get_works_by_user(user['UserID'], 1, 3) for work in works: work['Content'] = content_clean(work['Content']) works_num = Collect.get_works_num_by_user(user['UserID']) # reivews reviews = Review.get_reviews_by_user(user['UserID'], 1, 3, is_me) for r in reviews: r['Time'] = time_diff(r['Time']) reviews_num = Review.get_reviews_num_by_user(user['UserID'], is_me) # topics topics = Topic.get_topics_by_user(user['UserID'], 1, 3) for t in topics: t['Time'] = time_diff(t['Time']) topics_num = Topic.get_topics_num_by_user(user['UserID']) return render_template('user/user.html', user=user, works=works, works_num=works_num, reviews=reviews, reviews_num=reviews_num, topics=topics, topics_num=topics_num)
def auth(): # get current authed userID code = request.args['code'] url = "https://www.douban.com/service/auth2/token" data = { 'client_id': config.DOUBAN_CLIENT_ID, 'client_secret': config.DOUBAN_SECRET, 'redirect_uri': config.DOUBAN_REDIRECT_URI, 'grant_type': 'authorization_code', 'code': code } r = requests.post(url, data=data).json() user_id = int(r['douban_user_id']) # if user exist if User.check_exist_by_id(user_id): # if user unactive if not User.check_active(user_id): return redirect(url_for('verify_email_callback', state='unactive', user_id=user_id)) else: # set session session.permanent = True session['user_id'] = user_id session['user_name'] = User.get_name_by_id(user_id) session['user_abbr'] = User.get_abbr_by_id(user_id) return redirect(url_for('index')) # if not exist else: # get user info url = "https://api.douban.com/v2/user/" + str(user_id) user_info = requests.get(url).json() # add user user_id = int(user_info['id']) user_name = user_info['name'] abbr = user_info['uid'] avatar = user_info['avatar'] signature = user_info['signature'] desc = user_info['desc'] location_id = int(user_info['loc_id']) if 'loc_id' in user_info else 0 location = user_info['loc_name'] User.add_user(user_id, user_name, abbr, avatar, signature, desc, location_id, location) # go to the verify email page return redirect(url_for('send_verify_email', user_id=user_id))
def signin(): # get current authed userID code = request.args['code'] url = "https://www.douban.com/service/auth2/token" data = { 'client_id': config.DOUBAN_CLIENT_ID, 'client_secret': config.DOUBAN_SECRET, 'redirect_uri': config.DOUBAN_REDIRECT_URI, 'grant_type': 'authorization_code', 'code': code } r = requests.post(url, data=data).json() user_id = int(r['douban_user_id']) # if user exist if User.query.get(user_id): # if user unactive if User.query.filter(User.is_active==False).filter(User.id==user_id).first(): return redirect(url_for('active_state', state='unactive', user_id=user_id)) else: # set session session.permanent = True user = User.query.get_or_404(user_id) session['user_id'] = user_id session['user_name'] = user.name session['user_abbr'] = user.abbr return redirect(url_for('index')) # if not exist else: # get user info url = "https://api.douban.com/v2/user/" + str(user_id) user_info = requests.get(url).json() user = User(id=user_id, name=user_info['name'], abbr=user_info['uid'], avatar=user_info['avatar'], signature=user_info['signature']) db.session.add(user) db.session.commit() return redirect(url_for('send_active_email', user_id=user_id))
def user_reviews(user_abbr): user = User.get_user_by_abbr(user_abbr) is_me = True if "user_id" in session and session['user_id'] == user[ 'UserID'] else False user_name = '我' if is_me else user['Name'] # pagination num_per_page = 10 page = int(request.args['page'] if 'page' in request.args else 1) reviews = Review.get_reviews_by_user(user['UserID'], page, num_per_page, is_me) for r in reviews: r['Time'] = time_diff(r['Time']) reviews_num = Review.get_reviews_num_by_user(user['UserID'], is_me) # page paras total_page = int(math.ceil(reviews_num / num_per_page)) pre_page = (page - 1) if page > 1 else 1 if total_page == 0: next_page = 1 elif page < total_page: next_page = page + 1 else: next_page = total_page return render_template('user/user_reviews.html', user=user, reviews=reviews, reviews_num=reviews_num, user_name=user_name, page=page, total_page=total_page, pre_page=pre_page, next_page=next_page)
def rebuild_comment(comment, replyee_id): replyee_name = User.get_name_by_id(replyee_id) replyee_abbr = User.get_abbr_by_id(replyee_id) comment = "@" + "<a href=" + url_for('people', user_abbr=replyee_abbr) + ">" + replyee_name + "</a>" + " " + comment.split(' ')[1] return comment
def build_topic_inform_title(replyer_id, topic_id): replyer = User.get_user_by_id(replyer_id) topic = Topic.get_topic(topic_id) inform_title = "<a href=" + url_for('people', user_abbr=replyer['Abbr']) + ">" + replyer['Name'] + "</a> 在话题 " + "<a href=" + url_for('single_topic', topic_id=topic_id) + ">" + topic['Title'] + "</a>" + " 中回复了你" return inform_title
def build_review_inform_title(replyer_id, review_id): replyer = User.get_user_by_id(replyer_id) review = Review.get_review(review_id) inform_title = "<a href=" + url_for('people', user_abbr=replyer['Abbr']) + ">" + replyer['Name'] + "</a> 在评论 " + "<a href=" + url_for('single_review', review_id=review_id) + ">" + review['Title'] + "</a>" + " 中回复了你" return inform_title