def hello_world(): user_id = request.args.get('user_id') if request.method == 'POST': profile = dict(parse.parse_qsl(request.form.get('profile'))) condition = dict(parse.parse_qsl(request.form.get('condition'))) profile['images'] = request.form.getlist('images') fs = request.files.getlist('files') for f in fs: u = uuid.uuid1().hex f.save('static/pictures/' + u + '.jpg') profile['images'].append(u) users.update_one({ '_id': user_id }, { '$set': { 'profile': profile, 'condition': condition } }, upsert=True) return json.dumps({ 'res': 0 }) else: user = users.find_one({ '_id': user_id }) or {} profile = user.get('profile', {}) condition = user.get('condition', {}) return render_template('edit.html', profile=profile, condition=condition)
def index(): upcoming = followups.aggregate([ {'$match': {'dtof': {'$gt': datetime.today()}} }, {'$lookup': { 'from': 'patient_info', 'let': {'hkid': "$HKID"}, 'pipeline': [{ '$match': { '$expr': { '$eq': ["$HKID", "$$hkid"]}}}, {'$project': {'name': 1, 'mobile': 1, 'wts': 1}}], 'as': 'info' } }, {'$sort': {'dtof': -1}} ]) todo = request.form.get('todo') if todo and todo is not None: todolist.insert(0, todo) if len(todolist) > 6: todolist.pop(-1) role = users.find_one({'username': current_user.get_id()})['role'] Role = {'ADMIN': "Administrator", 'RA': "Research assistant", 'PI': "Principle investigator", 'COI': "Co-investigator", 'RO': "Research Office"}[role] return render_template('index.html', role=Role, form=SearchPatients(), todolist=todolist, upcoming=upcoming)
def list_user_file(): _id = ObjectId(session['user_id']) r = users.find_one({ '_id': _id}) r = files.find({ '_id': { '$in': r['files']}}, { 'filename': 1}) return tojson(True, '', list(r))
def check_auth(username, password): """This function is called to check if a username / password combination is valid. """ result = users.find_one({'person_name': username}) if result: return password == 'wootwoot' else: return False
def info(): if request.method == 'POST': pass else: user_id = request.args.get('user_id') user = users.find_one({ '_id': user_id }) or {} profile = user.get('profile', {}) condition = user.get('condition', {}) return render_template('info.html', profile=profile, condition=condition)
def login(): """Log in a registered user by adding the user id to the session.""" name = request.args.get('name') passwd = request.args.get('passwd') user = users.find_one({'name': name, 'passwd': passwd}) if user: session.clear() session['user_id'] = user['_id'].binary.hex() return tojson(True, 'ok') else: return tojson(False, 'password or account is wrong!')
def changepassword(): form = ChangePassword() user = users.find_one({'username': current_user.get_id()}) if form.validate_on_submit(): users.update_one(user, { '$set': { 'password': generate_password_hash(form.password.data) } }) flash('Password Changed', 'info') return redirect(url_for('index')) return render_template('changepassword.html', title="Change Password", form=form)
def register(): if users.find_one({"username": current_user.get_id() })['role'] != 'ADMIN': flash('Admin function! Please login as administrator', 'warning') logout_user() return redirect(url_for('admin.login')) form = RegNewUser() if form.validate_on_submit(): users.insert({ 'username': form.username.data, 'email': form.email.data, 'password': generate_password_hash(form.password.data), 'role': form.role.data }) flash('New user registered', 'info') return render_template('register.html', title='Register', form=form)
def login(): form = Login() if current_user.is_authenticated: return redirect(url_for('index')) if form.validate_on_submit(): valid_user = users.find_one({'username': form.username.data}) if valid_user and User.check_password(valid_user['password'], form.password.data): user_obj = User(username=valid_user['username']) login_user(user_obj) next_page = request.args.get('next') if not next_page or url_parse(next_page).netloc != '': return redirect(url_for('index')) else: flash("Invalid username or password", 'info') return render_template('login.html', form=form)
def mate(): filename = request.args.get('filename') file_hash = request.args.get('file_hash') if files.find_one({ '_id': file_hash}): return tojson(1, 'success') elif users.find_one({ 'files': { '$all': [file_hash]}}): return tojson(2, 'file exist') else: files.insert_one({ '_id': file_hash, 'filename': filename, 'chunks': []}) # {chunk_hash: '', nodes: []} users.update_one({ '_id': ObjectId(session['user_id'])}, { '$push': { 'files': file_hash}}) return tojson(0, '')
def check_admin(self): if users.find_one({"username": current_user.get_id() })['role'] != 'ADMIN': flash('Admin function! Please login as administrator', 'warning') logout_user() return redirect(url_for('admin.login'))
def validate_email(self, email): email = users.find_one({'email': email.data}) if email is not None: raise ValidationError('Please use a different Email address')
def validate_username(self, username): user = users.find_one({'username': username.data}) if user is not None: raise ValidationError('Please use another username')
def validate_opw(Flaskform, opw): global inputopw inputopw = opw.data hashedpw = users.find_one({'username': current_user.get_id()})['password'] if not check_password_hash(hashedpw, inputopw): raise ValidationError('Invalid old password')
def recommend(user_id, idx): today = datetime.date.today() recommended = list(users.aggregate( [{ "$match": { "_id": user_id } }, { "$unwind": "$likes" }, { "$match": { 'likes.date': { '$gte': datetime.datetime(today.year, today.month, today.day) } } }, { "$lookup": { "from": "users", "localField": "likes.user_id", "foreignField": "_id", "as": "nodes" } }, { "$project": { "_id": 0, "gender": '$profile.gender', "likes": 1, "nodes": { '$arrayElemAt': ["$nodes", 0]} } }, { '$skip': idx }, { '$limit': 1 }])) if not recommended: user = users.find_one({ '_id': user_id }) gender = user['profile'].get('gender', '女') == '男' and '女' or '男' charm = user.get('charm', 0.5) expect = user.get('expect', 0.5) recommend_user = users.find_one({ 'profile.gender': gender }) # recommend arithmetic. uu = base64.b64encode(uuid.uuid1().bytes).decode() like = { 'user_id': recommend_user['_id'], 'uuid': uu, 'date': datetime.datetime.now(), 'like': False, 'store': False } users.update_one({ '_id': user_id }, { '$push': { 'likes': like } }, upsert=True) else: recommend_user = recommended[0]['nodes'] like = recommended[0]['likes'] return recommend_user, like
def msg_hendle(self): user = users.find_one({ '_id': self.msg.source }) if not user: user = { "_id": self.msg.source, "profile": {}, "condition": {} } users.insert_one(user) if self.msg.type == 'event': if self.msg.event == 'subscribe': return self.text_reply( '感谢你关注本订阅号,我们承诺不泄露隐私信息,你的信息将会在取消关注本订阅号后自动删除,回复“资料”启动智能小客服采集资料,也可以点击\n%s\n通过网页进行填写。由于公众号的限制我们不能主动给你发消息,只能被动恢复消息,所以并不是我们不理你。有事儿没事儿多回复“在吗”,将会有不一样的惊喜等着你哦。' % self.edit_url) elif self.msg.event == "unsubscribe": pass else: pass if user.get('answering'): # 用户正在回答问题, 调用anwser函数处理答案。 return self.answer(user['answering']['question_id'], user['answering']['question_index']) else: # 用户发了段新信息,判断是否为key if self.msg.type != 'text': return self.text_reply('额,看不是很懂耶。') question = questions.find_one({ 'key': self.msg.content }, { '_id': 1 }) if question: if user.get(question['_id']): return self.text_reply('已经回答过该问题, 查看资料请访问') users.update_one({ '_id': self.msg.source }, { '$set': { 'answering': { "question_time": self.msg.create_time, "question_id": question['_id'], "question_index": 0 } } }) first_qu = questions.find_one({ '_id': question['_id'] }, { 'content': { '$slice': [0, 1] } })['content'][0] return self.text_reply(first_qu['question']) elif self.msg.content == 'test': return self.text_reply(self.get_url('test', '测试')) if not user.get('profile'): return self.text_reply('你好,是不是有点无聊了,你好像还没上传基本资料,你可以点击\n%s\n或回复“资料”启动智能小客服采集资料?' % self.edit_url) if not user.get('condition'): return self.text_reply('你好,是不是有点无聊了,你好像还没上传心动条件,你可以点击\n%s\n或回复“条件”启动智能小客服采集资料?' % self.edit_url) return self.text_reply( '你好,欢迎来到小红娘公众号,快来看看小红娘都有哪些功能吧:\n\n%s\n\n%s\n\n%s\n\n%s' % (self.recommend_url, self.info_url, self.edit_url, self.achievement_url))
def current_user(): session = request.environ.get('beaker.session') twitter_id = session.get('twitter_id', None) user = users.find_one(twitter_id=twitter_id) return user
def load_user(userid): result = users.find_one({'_id': ObjectId(userid)}) if result: user = User(result) return user
def load_user(login_user): usr = users.find_one({"username": login_user}) if not usr: return render_template('login.html') return User(username=usr["username"])