예제 #1
0
파일: user.py 프로젝트: YinWC/FlaskBlog
def login():
    user = User()
    username = request.form.get('username').strip()
    password = request.form.get('password').strip()
    vcode = request.form.get('vcode').lower().strip()

    # 校验图像验证码是否正确,0000用来做测试
    if vcode != session.get('vcode') and vcode != '0000':
        return 'vcode-error'

    else:
        # 实现登录功能
        # 密码加密
        password = hashlib.md5(password.encode()).hexdigest()
        result = user.find_by_username(username)
        if len(result) == 1 and result[0].password == password:
            session['islogin'] = '******'
            session['userid'] = result[0].userid
            session['username'] = username
            session['nickname'] = result[0].nickname
            session['role'] = result[0].role
            # 更新积分详情表
            Credit().insert_detail(type='正常登录', target='0', credit=1)
            user.update_credit(1)
            # 将Cookie写入浏览器,持久化存储
            response = make_response('login-pass')
            response.set_cookie('username', username, max_age=30 * 24 * 3600)
            response.set_cookie('password', password, max_age=30 * 24 * 3600)
            return response
        else:
            return 'login-fail'
예제 #2
0
def register():
    user = User()
    username = request.form.get('username').strip()
    password = request.form.get('password').strip()
    code = request.form.get('code').strip()

    if code != session.get('ecode'):
        print(code, session.get('ecode'))
        return 'ecode-error'
    elif not re.match('.+@.+\..+', username) or len(password) < 5:
        return 'up-invalid'

    elif len(user.find_by_username(username)) > 0:
        return 'user-repeated'
    else:
        password = hashlib.md5(password.encode()).hexdigest()
        result = user.do_regisiter(username, password)
        print(result)
        session['islogin'] = '******'
        session['userid'] = result.userid
        session['username'] = username
        session['nickname'] = result.nickname
        session['role'] = result.role

        Credit().insert_detail(type='用户注册', target='0', credit=50)
        return 'reg-pass'
예제 #3
0
def register():
    user = User()
    username = str(request.form.get('username')).strip()
    nickname = str(request.form.get('nickname')).strip()
    password = str(request.form.get('password')).strip()
    ecode = str(request.form.get('ecode')).strip().lower()
    print("ecode=" + ecode)
    print("e_code=" + e_code)

    # 校验邮箱验证码
    if ecode != e_code and ecode != '0000':
        return 'ecode-error'

    # 验证邮箱地址的正确性和密码的有效性
    elif not re.match('.+@.+\..+', username) or len(password) < 6:
        return 'invalid'

    # 验证用户是否已被注册
    elif len(user.find_by_username(username)) > 0:
        return 'user-repeated'

    else:
        # 进行注册
        password = hashlib.md5(password.encode()).hexdigest()
        result = user.do_register(username, nickname, password)

        return 'reg-pass'
예제 #4
0
def login():
    user = User()
    username = request.form.get('username').strip()
    password = request.form.get('password').strip()
    vcode = request.form.get('logincode').strip().lower()
    print(vcode, session.get('vcode'))

    if vcode != session.get('vcode') or vcode == 0000:
        return 'vcode-error'
    else:
        password = hashlib.md5(password.encode()).hexdigest()
        result = user.find_by_username(username)
        if len(result) == 1 and result[0].password == password:
            session['islogin'] = '******'
            session['userid'] = result[0].userid
            session['username'] = username
            session['nickname'] = result[0].nickname
            session['role'] = result[0].role
            # 更新积分表
            Credit().insert_detail(type='正常登录', target='0', credit=1)
            user.update_credit(1)
            # 写入cookie
            response = make_response('login-pass')
            response.set_cookie('username', username, max_age=1 * 3600)
            response.set_cookie('password', password, max_age=1 * 3600)
            return response
        else:
            return 'login-fail'
예제 #5
0
파일: user.py 프로젝트: YinWC/FlaskBlog
def updatepwd():
    user = User()
    username = request.form.get('username').strip()
    password = request.form.get('password').strip()
    ecode = request.form.get('ecode').strip()

    # 校验邮箱验证码是否正确
    if ecode != session.get('ecode'):
        return 'ecode-error'

    # 验证邮箱地址的正确性和密码的有效性, 数据库中username是邮箱格式
    elif not re.match('.+@.+\..+', username) or len(password) < 5:
        return 'up-invalid'

    else:
        # 实现修改密码功能
        # 密码加密
        password = hashlib.md5(password.encode()).hexdigest()
        result = user.do_updatepwd(username, password)
        session['islogin'] = '******'
        session['userid'] = result.userid
        session['username'] = username
        session['nickname'] = result.nickname
        session['role'] = result.role
        return 'updatepwd-pass'
예제 #6
0
파일: user.py 프로젝트: YinWC/FlaskBlog
def register():
    user = User()
    username = request.form.get('username').strip()
    password = request.form.get('password').strip()
    ecode = request.form.get('ecode').strip()

    # 校验邮箱验证码是否正确
    if ecode != session.get('ecode'):
        return 'ecode-error'

    # 验证邮箱地址的正确性和密码的有效性, 数据库中username是邮箱格式
    elif not re.match('.+@.+\..+', username) or len(password) < 5:
        return 'up-invalid'

    # 验证用户是否已经注册
    elif len(user.find_by_username(username)) > 0:
        return 'user-repeated'

    else:
        # 实现注册功能
        # 密码加密
        password = hashlib.md5(password.encode()).hexdigest()
        result = user.do_register(username, password)
        session['islogin'] = '******'
        session['userid'] = result.userid
        session['username'] = username
        session['nickname'] = result.nickname
        session['role'] = result.role
        # 更新积分详情表
        Credit().insert_detail(type='用户注册', target='0', credit=50)
        return 'reg-pass'
예제 #7
0
파일: answer.py 프로젝트: wow3/Curious
def count_my_answer():
    answer = Answer()
    user = User()

    username = request.args.get('username')
    idu = user.find_by_username(username=username)[0].id

    data = {}

    c_answer = answer.count_by_idu(idu=idu)
    c_upvote = answer.count_upvote_by_idu(idu=idu)
    ratio = 0
    if c_answer != 0:
        ratio = round(c_upvote/c_answer, 2)


    data['c_answer'] = c_answer
    data['c_upvote'] = c_upvote
    data['ratio'] = ratio

    avg_answer = answer.count_avg()
    avg_upvote = answer.count_avg_upvote()
    avg_ratio = round(avg_upvote/avg_answer, 2)

    data['avg_answer'] = avg_answer
    data['avg_upvote'] = avg_upvote
    data['avg_ratio'] = avg_ratio

    return jsonify({'data': data})
예제 #8
0
파일: index.py 프로젝트: YinWC/FlaskBlog
def home():
    if session.get('islogin') is None:
        username = request.cookies.get('username')
        password = request.cookies.get('password')
        if username != None and password != None:
            user = User()
            result = user.find_by_username(username)
            if len(result) == 1 and result[0].password == password:
                session['islogin'] = '******'
                session['userid'] = result[0].userid
                session['username'] = username
                session['nickname'] = result[0].nickname
                session['role'] = result[0].role

    article = Article()
    result = article.find_limit_with_user(0, 10)
    # print(result, end='---------------\n')
    total = math.ceil(article.get_total_count() / 10)  # 向上取整

    # 以下是在首页添加侧边栏的内容,side-jinja2.html中使用到,但是这种方式有一个缺陷:
    # 需要在每个HTML页面中引用引用一下代码,重复率高,改良版在:side.html中
    last, most, recommended = article.find_most_recommended()
    return render_template('index-base.html',
                           result=result,
                           page=1,
                           total=total,
                           last=last,
                           most=most,
                           recommended=recommended)
예제 #9
0
파일: collection.py 프로젝트: wow3/Curious
def get_my_collection():
    collection = Collection()
    user = User()
    question = Question()

    username = request.args.get("username")
    idu = user.find_by_username(username)[0].id
    res = collection.find_by_idu(idu=idu)
    data = []
    for item in res:
        col = {}
        idq = item.idq
        q = question.find_by_id(id=idq)
        title = q.title
        category = q.category
        description = q.description
        view_count = q.view_count
        answer_count = q.answer_count
        collect_count = q.collect_count
        gmt_create = q.gmt_create
        col['idq'] = idq
        col['title'] = title
        col['category'] = category
        col['description'] = description
        col['view_count'] = view_count
        col['collect_count'] = collect_count
        col['answer_count'] = answer_count
        col['gmt_create'] = gmt_create

        data.append(col)
    return jsonify({'data': data})
예제 #10
0
파일: admin.py 프로젝트: wow3/Curious
def unban():
    user = User()
    username = request.form.get('username')
    flag = user.unban(username=username)
    if flag == 1:
        return 'success'
    else:
        return 'fail'
예제 #11
0
파일: admin.py 프로젝트: wow3/Curious
def get_user_list():
    user = User()
    res = user.find_all()
    data = []
    for item in res:
        u = {}
        u['id'] = item.id
        u['username'] = item.username
        u['nickname'] = item.nickname
        u['gmt_create'] = item.gmt_create
        u['banned'] = item.banned
        data.append(u)
    return jsonify({'data': data})
예제 #12
0
def get_user_info():
    user = User()

    username = request.args.get('username')
    res = user.find_by_username(username=username)[0]
    data = {}
    data['id'] = res.id
    data['nickname'] = res.nickname
    data['avatar_url'] = res.avatar_url
    start = res.gmt_create
    end = datetime.datetime.now()
    data['age'] = (end - start).days
    return jsonify({'data': data})
예제 #13
0
def new_upvote():
    user = User()
    answer = Answer()

    username = request.args.get('username')
    ida = request.args.get('ida')

    idu2 = user.find_by_username(username)[0].id
    idu1 = answer.find_by_id(ida).idu

    notification = Notification()
    notification.newupvote(ida=ida, idu1=idu1, idu2=idu2)
    return 'success'
예제 #14
0
파일: history.py 프로젝트: wow3/Curious
def add_history():
    history = History()
    user = User()
    question = Question()
    # 获取请求中的参数
    username = request.form.get("username")
    idq = request.form.get("idq")
    # 根据用户名获取id
    idu = user.find_by_username(username)[0].id
    # 更新表question和history
    question.add_view_count(idq=idq)
    history.add(idu=idu, idq=idq)
    return 'pass'
예제 #15
0
def get_notification_0():
    notification = Notification()
    user = User()
    username = request.args.get("username")
    idu = user.find_by_username(username)[0].id
    data = []
    res = notification.find_by_idu_0(idu=idu)
    for item in res:
        nt = {}
        nt['id'] = item.id
        nt['content'] = item.content
        nt['gmt_create'] = item.gmt_create

        data.append(nt)
    return jsonify({'data': data})
예제 #16
0
def add_upvote():
    upvote = Upvote()
    user = User()
    answer = Answer()

    username = request.form.get("username")
    ida = request.form.get("ida")
    idu = user.find_by_username(username)[0].id

    res = upvote.find_by_iduida(idu=idu, ida=ida)
    if len(res) > 0:
        return 'repeated'
    else:
        upvote.add(idu=idu, ida=ida)
        answer.add_upvote(id=ida)
        return 'success'
예제 #17
0
def bind_user(chat_id: str, username: str, password: str, session=DBSession):
    """bind a telegram user and miniflux account

    :param chat_id: telegram chat_id
    :param username: miniflux account username
    :param password: miniflux account password
    :param session:  database session class
    :type chat_id: Union[int, str]
    :type username: str
    :type password: str
    :raise UserOrPassError: username or password error
    """
    session = session()
    client = Client(SERBER_ADDR, username=username, password=password)
    try:
        client.me()
    except ClientError:
        raise UserOrPassError
    ret = client.get_categories()
    category_id = ret[0]['id']
    user = User(id=chat_id,
                username=username,
                password=password,
                category_id=category_id)
    session.merge(user)
    session.commit()
    session.close()
    return
예제 #18
0
파일: comment.py 프로젝트: YinWC/FlaskBlog
def reply():
    articleid = request.form.get('articleid')
    commentid = request.form.get('commentid')
    content = request.form.get('content').strip()
    ipaddr = request.remote_addr

    # 如果评论的字数低于5个或多于1000,视为不合法
    if len(content) < 5 or len(content) > 1000:
        return 'content-invalid'

    comment = Comment()
    # 没有超出限制才能发表评论
    if not comment.check_limit_per_5():
        try:
            comment.insert_reply(articleid=articleid,
                                 commentid=commentid,
                                 content=content,
                                 ipaddr=ipaddr)
            # 评论成功后,同步更新credit表明细,user表积分和article表回复数
            Credit().insert_detail(type='回复评论', target=articleid, credit=2)
            User().update_credit(2)
            Article().update_replycount(articleid)
            return 'reply-pass'
        except:
            return 'reply-fail'
    else:
        return 'reply-limit'
예제 #19
0
def add_user():
    data = request.get_json()
    new_user = User(**data)
    USERS_TABLE.add(new_user)
    return jsonify(
        USERS_TABLE.find_row(
            USERS_TABLE.rows[-1]._id).to_dict(dates_to_string=True)), 201
예제 #20
0
def matching_apply():
    print(request.form['cutlet'], file=sys.stderr)
    print(request.form['hamburger'], file=sys.stderr)
    print(request.form['noodle'], file=sys.stderr)
    print(request.form['korean_food'], file=sys.stderr)

    user_name = check_session()
    if user_name == None:
        flash('너무 오래 고민하셨네요. 다시 로그인해 주세요.')
        return redirect('/')
    user_data = User(config.MYSQL_CONFIG).get_userdata(user_name)
    print(user_data, file=sys.stderr)
    if user_data == None:
        flash('원인 불명의 에러입니다.')
        return redirect('/')

    user_data['cutlet'] = request.form['cutlet']
    user_data['hamburger'] = request.form['hamburger']
    user_data['noodle'] = request.form['noodle']
    user_data['korean_food'] = request.form['korean_food']

    matching_config = config.REDIS_MATCH_CONF
    matching_config.update(config.TWILLO_CONFIG)
    RedisMatching(matching_config).set_userdata(user_data)

    flash('신청 완료. 매칭 결과는 문자로 알려드릴 예정입니다.')
    return redirect('/matching')
예제 #21
0
def ban_user(user_list, ban=True):
    session = DBSession()
    for user_data in user_list:
        session.merge(
            User(id=user_data.id, isban=ban, username=user_data.username))
    session.commit()
    session.close()
예제 #22
0
def is_exist_phone_number():
    print(request.form['mobile'], file=sys.stderr)
    result = User(config.MYSQL_CONFIG).is_exist_phone_number(
        request.form['mobile'])

    if result == True: return 'true'
    elif result == False: return 'false'
    else: return result
예제 #23
0
    def newupvote(self, ida, idu1, idu2):
        answer = Answer()
        question = Question()
        user = User()

        nickname = user.find_by_id(idu2).nickname

        idq = answer.find_by_id(id=ida).idq

        title = question.find_by_id(id=idq).title

        content = nickname + "点赞了" + "您关于问题" + "'" + title + "'" + "的回答。"
        read = "n"

        notification = Notification(idu=idu1, read=read, content=content)
        dbsession.add(notification)
        dbsession.commit()
        return 1
예제 #24
0
파일: history.py 프로젝트: wow3/Curious
def get_history():
    history = History()
    user = User()
    question = Question()

    username = request.args.get("username")
    idu = user.find_by_username(username)[0].id
    res = history.find_by_idu(idu=idu)
    data = []
    for item in res:
        col = {}
        idq = item.idq
        title = question.find_by_id(id=idq).title
        col['idq'] = idq
        col['title'] = title

        data.append(col)
    return jsonify({'data': data})
예제 #25
0
파일: collection.py 프로젝트: wow3/Curious
def add_collection():
    collection = Collection()
    user = User()
    question = Question()
    # 获取请求中的参数
    username = request.form.get("username")
    idq = request.form.get("idq")
    # 获取用户id
    idu = user.find_by_username(username)[0].id

    res = collection.find_by_iduidq(idu=idu, idq=idq)
    if len(res) > 0:
        return 'repeated'
    else:
        # 更新两张表question和collection
        question.add_collect_count(idq=idq)  # 问题表收藏数+1
        collection.add(idu=idu, idq=idq)
        return 'success'
예제 #26
0
def get_list(keywords):
    position = []
    courses = []
    department = []
    for key in keywords:
        key = key.strip()
        label = keyword_classifier.predict_label(key)
        if (label == ''):
            pass
        elif(label == 'position'):
            results = csv_query.query(
                "select * from " + db_faculties + " where position like '%"+key.replace(' ', '%')+"%'")
            lines = results.split('\n')
            for line in lines:
                fields = line.split('\t')
                user = User(fields[0].strip(), fields[1].strip(
                ), fields[2].strip(), fields[3].strip(), fields[4].strip())
                position.append(user)
        elif(label == 'course'):
            results = csv_query.query(
                "select * from " + db_courses + " where courses like '%"+key.replace(' ', '%')+"%'")
            lines = results.split('\n')
            for line in lines:
                fields = line.split('\t')
                ids = fields[2].strip().split(',')
                for id in ids:
                    results = csv_query.query(
                        "select * from " + db_faculties + " where id = '"+id+"'")
                    fields = results.split('\t')
                    user = User(fields[0].strip(), fields[1].strip(
                    ), fields[2].strip(), fields[3].strip(), fields[4].strip())
                    courses.append(user)
        elif(label == 'department'):
            results = csv_query.query(
                "select * from " + db_faculties + " where department like '%"+key.replace(' ', '%')+"%'")
            lines = results.split('\n')
            for line in lines:
                fields = line.split('\t')
                user = User(fields[0].strip(), fields[1].strip(
                ), fields[2].strip(), fields[3].strip(), fields[4].strip())
                department.append(user)
        else:
            pass
    return position, courses, department
예제 #27
0
 def post(self):
     book_id = self.parse_body('bookId', '')
     user_id = self.current_user_my
     user = User.objects(index=user_id['userId']).first()
     print 'iss: ', user.collections, book_id
     user.collections.append(int(book_id))
     print user.collections
     user.save()
     user_info_redis(0)
     self.write({'errorCode': 10000})
예제 #28
0
def delete():
    result = User(config.MYSQL_CONFIG).delete(request.form['mobile'])

    if result == None:
        if 'session_key' in session:
            del session['session_key']
        flash('회원탈퇴 성공')
        return redirect('/')
    else:
        return redirect('/matching', error=result)
예제 #29
0
파일: answer.py 프로젝트: wow3/Curious
def add():
    answer = Answer()
    user = User()
    question = Question()
    username = request.form.get('username').strip()
    print(username)
    print(user.find_by_username(username))
    idu = user.find_by_username(username)[0].id     # 根据用户名获取idu

    idq = request.form.get('idq').strip()
    content = request.form.get('content').strip()

    question.add_answer_count(idq)                  # 问题回答数+1

    res = answer.add_answer(idq, idu, content)
    if res == 1:
        return 'add-success'
    else:
        return 'add-error'
예제 #30
0
def start(bot, update):
    """
    send start info
    """
    bot.send_message(chat_id=update.message.chat_id, text=START_MSG)
    session = DBSession()
    user = session.query(User).filter_by(
        id=update.message.from_user['id']).first()
    if user is None:
        session.add(User(id=update.message.from_user['id']))
    session.commit()
    session.close()
예제 #31
0
파일: answer.py 프로젝트: wow3/Curious
def get_answers():
    answer = Answer()
    idq = request.args.get("idq")
    data = []

    res = answer.find_by_idq(idq)
    for item in res:
        a = {}
        idu = item.idu
        user = User()
        username = user.find_by_id(idu).username
        avatar_url = user.find_by_id(idu).avatar_url
        a['id'] = item.id
        a['username'] = username
        a['avatar_url'] = '../assets/avatar/'+avatar_url
        a['content'] = item.content
        a['upvote'] = item.upvote
        a['gmt_create'] = item.gmt_create

        data.append(a)
    return jsonify({'data': data})
예제 #32
0
def user_info_redis(user_type, redis_cli=None):
    if redis_cli is None:
        redis_cli = tornadoredis.Client()
       
    ino_type_ = 'follows.' if user_type else 'collections.'
    all_user = User.objects().all()
    with redis_cli.pipeline() as pipe:
        for i in all_user:
            if user_type == 1:
                for k in i.follows:
                    print i.index, k
                    pipe.sadd('follows.'+ str(i.index),  int(k))
            else:
                for k in i.collections:
                    pipe.sadd('collections.'+ str(i.index),  int(k))
        pipe.execute()
    print '\ninit redis complated\n'
예제 #33
0
    def post(self):
        import datetime
        author = self.parse_body('author', '')
        com_time = datetime.datetime.now()
        theme = self.parse_body('theme', '')
        comment = self.parse_body('comment', '')
        book_id = self.parse_body('bookId', '')
        nickname = User.objects(index=int(author)).first().nickname
        com = Comments(author=author, nickname=nickname, com_time=com_time, theme=theme,\
                 comment=comment)
        com.save()
        print 'book_Id: ', book_id

        print 'debug: ',
        t= Books.objects(index=int(book_id)).first()
        t.comments.append(com)
        t.save()
        self.write({'errorCode': 10000})
예제 #34
0
    def post(self):
        nickname = self.parse_body('username', '')
        user = User.objects(nickname=nickname).first()
        email = self.parse_body('email', '')
        kw = {}
        new_pass = self.parse_body('newPass')
        if new_pass:
            kw.update({'password': new_pass})
        note = self.parse_body('note', '')
        if note:
            kw.update({'note': note})
        level = self.parse_body('level')
        telnec = self.parse_body('telnec')
        res = ""
        for i in telnec:
            res = res + str(i) + str(level) + ':'
        if res:
            kw.update({'tags': res[0: -1]})

        user.update_info(**kw)

        self.write({'errorCode': 10000})
예제 #35
0
 def get(self):
     url = self.request.path
     import re
     nickname = re.search(r'/\w{1,32}/', url).group(0)[1:-1]
     user = User.objects(nickname=nickname).first()
     self.render('index/user_info.html', user=user, username='******')
예제 #36
0
 def get_user(cls, user_id=None, account=None):
     if user_id is not None and not isinstance(user_id, ObjectId):
         user_id = ObjectId(user_id)
     match = dict(id=user_id) if user_id else dict(account=account)
     user = User.objects(match).first()
     return user