def test_register_user_existed(self):
     logger.info("############test_register_user_existed############")
     username = '******' % random.randrange(100)
     resp = self.register_user(username, 'wulaoshi2019', '*****@*****.**')
     resp = self.register_user(username, 'wulaoshi2019', '*****@*****.**')
     logger.info("resp of test_register_user_existed: %s" % resp.json())
     self.assertEqual(200, resp.status_code)
     self.assertEqual("01", resp.json()['code'])
Esempio n. 2
0
def md5Hash(password):
    """md5 加密分为digest和hexdigest两种格式,前者是二进制,后者是十六进制格式,这里默认为十六进制"""
    try:
        m5 = hashlib.md5()
        m5.update(password.encode(encoding='utf-8'))
        pwd = m5.hexdigest()
        return pwd
    except Exception as e:
        logger.info("md5Hash error: %s" % e)
Esempio n. 3
0
def validateUsernameExistInDB(userName):
    try:
        if User.query.filter(
                User.username == userName).all():  # 查询数据库里是否存在userName
            return True
        else:
            return False
    except Exception as e:
        logger.info("error : %s" % e)
Esempio n. 4
0
def compareMd5Pwd(str1, str2):
    md51 = hashlib.md5()
    md51.update(str1)
    pwd1 = md51.hexdigest()
    logger.info("pwd1: %s" % pwd1)
    md52 = hashlib.md5()
    md52.update(str2)
    pwd2 = md52.hexdigest()
    logger.info("pwd2: %s" % pwd2)
    return True if (pwd1 == pwd2) else False
    def test_login_user_not_existed(self):
        logger.info("############test_login_user_not_existed############")
        username = '******' % random.randrange(1000)
        passwordToLogin = md5Hash("wulaoshi2019")

        # 登录用户
        resp = self.login_user(username,passwordToLogin)
        logger.info("resp of test_login_user_not_existed: %s" % resp.json())
        self.assertEqual(200, resp.status_code)
        # 登录的用户不存在,返回"03": 参数错误
        self.assertEqual("02", resp.json()['code'])
Esempio n. 6
0
    def post(self):
        try:
            logger.info("Login -> args.keys(): %s" % self.args.keys())
            userName = self.args['username']
            userPassword = self.args['password']
            neededParams = self.args.keys(
            )  # 记录self.reqparse.add_argument中添加的参数列表
            logger.info("neededParams: %s" % neededParams)
            requestParams = request.json.keys()  # 记录发送请求中携带的参数列表
            logger.info("requestParams: %s " % requestParams)

            # 判断参数是否都有传过来,都传过来了,并且没有多传或少传,继续做参数值的校验,否则返回“参数错误”
            if userName and userPassword and util.paramsNumResult(
                    neededParams, requestParams):
                #到表里查询,是否存在这个用户,如果存在则校验密码
                userToLogin = User.query.filter(
                    User.username == userName).first()
                logger.info("userToLogin: %s" % userToLogin)

                #判断用户是否存在db中
                if userToLogin:  #如果数据库中有这个user,则校验密码是否正确
                    passwordResult = util.validateMd5Password(
                        userPassword, userName)  # 验证发过来的密码是否和用户存在db里的密码加密后相等
                    if passwordResult:  # 如果密码正确,处理token和loginTime
                        #先把用户的token取出来
                        userTokenInDB = userToLogin.token
                        logger.info("userTokenInDB: %s" % userTokenInDB)
                        #userToken = generateUUID() if not userTokenInDB else generateUUID() #这样更简洁一些
                        # 登录的时候,把数据库里的loginTime和token都做更新
                        userToken = util.generateUUID()
                        userToLogin.token = userToken
                        timeStr = time.strftime("%Y-%m-%d %H:%M:%S")
                        userToLogin.loginTime = timeStr
                        db.session.commit()
                        return {
                            "token": "%s" % userToken,
                            "code": "00",
                            "userid": int(userToLogin.id),
                            "login_time": "%s" % timeStr
                        }
                    else:  #密码不正确
                        return {"code": "02", "message": u"参数值不合法,密码不正确"}
                else:
                    # 数据库中没有这个user
                    return {"code": "02", "message": u"参数值不合法,用户不存在"}

            else:
                return {"code": "03", "message": u"参数错误,可能原因:参数少传了、多传了、写错了"}

        except Exception as e:
            logger.error("error of login: %s" % e)
            return {"code": "999", "message": u"未知错误"}
Esempio n. 7
0
    def get(self, articleId):
        try:
            # 到UserBlog模型类中找articleId的博文
            blog = UserBlog.query.filter(UserBlog.articleId == articleId).first()
            logger.info("blog: %s" % blog)
            #如果找到了blog,则返回blog
            if blog:
                return  {"code": "00", "data": [{"update_time": blog.updateTime, "title": blog.blogTitle, "content": blog.blogContent, "articleId": articleId, "owner": blog.user_id, "posted_on": blog.createTime}]}
            # 没找到blog,提示参数值不合法,articleId不存在
            else:
                return {"code": "02", "message": u"参数值不合法,articleId不存在"}


        except Exception as e:
            logger.info("error of getBlogContent: %s" % e)
            return {"code": "999", "message": u"未知错误"}
Esempio n. 8
0
def calculateTimeDiff(userLoginTimeStr, timestamp):
    try:
        timestampNew = timestamp
        logger.info("timestampNew : time when post request: %s" % timestampNew)
        timeArray = time.strptime(userLoginTimeStr,
                                  "%Y-%m-%d %H:%M:%S")  # 把userLogin时间字符串转成时间元祖
        logger.info("timeArray after time.strptime func: %s" % str(timeArray))
        timestampOld = time.mktime(timeArray)  # 把时间元祖转换成时间戳
        logger.info("timestampOld format from timeArray: %s" % timestampOld)
        timeStampDiff = timestampNew - timestampOld  # 两个时间戳相减,得出时间差(单位:秒)
        logger.info("timeStampDiff: %s" % timeStampDiff)

        if timeStampDiff > 0:
            timeHourDiff = int(divmod(
                timeStampDiff, 3600)[0])  # 把时间差(秒)换算成小时,处理3600,得到一个元祖,第一个值为小时
            logger.info("the time difference is : %s hour" % timeHourDiff)
            return timeHourDiff
        else:
            logger.error("timestamp different is negative")
            return "wrong"
    except Exception as e:
        logger.error("calculate time difference error: %s" % e)
 def delete_blog(self, userid, token, articleIdList):
     #{"userid":1, "token": "2d406f40e9544b45a162289af15145b4", "articleId":[1]}
     url = "%s/delete/" % (self.host)
     logger.info("url for delete: %s" % url)
     logger.info("articleIdList: %s" % articleIdList)
     data = json.dumps({"userid": userid, "token": token, "articleId": articleIdList})
     logger.info("request data of delete_blog: %s" % data)
     return self.api_client.delete(url, data = data)
    def test_login_user_existed(self):
        logger.info("############test_create_blog############")
        username = '******' % random.randrange(100)
        passwordToRegister = "wulaoshi2019"

        # 注册新用户
        resp = self.register_user(username, passwordToRegister, '*****@*****.**')
        passwordToLogin = md5Hash(passwordToRegister)
        logger.info("username: %s" % username)
        logger.info("passwordToLogin: %s" % passwordToLogin)

        # 登录用户
        resp = self.login_user(username, passwordToLogin)
        logger.info("resp of test_login_user_existed: %s" % resp.json())
        self.assertEqual(200, resp.status_code)
        self.assertEqual("00", resp.json()['code'])
    def register_user(self, username, password, email):
        url = "%s/register/" % self.host
        logger.info("register_user->url: %s" % url)

        data = {"username": username, "password": password, "email": email}
        requestData = json.dumps(data)
        logger.info("requestData of register: %s" % requestData)
        resp = self.api_client.post(url, data = requestData)
        logger.info("resp of register: %s" % resp.json())
        return resp
    def get(self, articleIdString):
        try:
            logger.info("articleIdString: %s" % articleIdString)
            # 用正则匹配articleIds=1,2,3中等号后面的部分
            reMatchResult = re.match(r"articleIds=(.*)", articleIdString)
            # 如果匹配到了,说明传了articleIds=部分,继续取articleId
            if reMatchResult:
                articleIdResultString = reMatchResult.group(1)
                logger.info("articleIdResultString: %s" %
                            articleIdResultString)

                # 判断articleIds=后边的id是否有传,传了就把所有的id取出来
                if articleIdResultString:
                    articleIdList = articleIdResultString.split(',')
                    logger.info("articleIdList: %s" % articleIdList)
                    responseDict = {"code": "00", "data": []}
                    blogList = []  # 用于存查询到的blog

                    # 遍历articleIdList,判断每个id是否在db里存在
                    for id in articleIdList:
                        # 校验id值的类型,把字符型转为整形
                        try:
                            idValue = int(id)
                        # 如果不能专属数字,提示不是数字
                        except:
                            return {
                                "code": "02",
                                "message": u"参数值不合法,articleId: %s 不是数字" % id
                            }
                        blog = UserBlog.query.filter(
                            UserBlog.articleId == idValue).first()
                        # 如果这个id有,则把blog对象存到blogList里
                        if blog:
                            blogList.append(blog)
                        # 如果这个id没有,则提示参数值错误
                        else:
                            return {
                                "code": "02",
                                "message": u"参数值不合法,不存在articleId: %s " % id
                            }
                    # 获取到的blog都存到blogList后,把blog填充到responseDict
                    responseDictFilled = util.fillInResponseDict(
                        responseDict, blogList)
                    return responseDictFilled
                # 没有传后边的id,则提示articleId没有传articleIdResultString
                else:
                    return {"code": "02", "message": u"参数值不合法,articleId没有传"}
            # 没匹配到,提示articleIds=没有传值
            else:
                return {"code": "02", "message": u"参数值不合法,articleIds=没有传值"}

        except Exception as e:
            logger.error("error of getBlogContent: %s" % e)
            return {"code": "999", "message": u"未知错误"}
Esempio n. 13
0
    def post(self):
        try:
            logger.info("self.args.keys(): %s" % self.args.keys())
            userName = self.args['username']
            userPassword = self.args['password']
            email = self.args['email']
            neededParams = self.args.keys()
            logger.info("neededParams: %s" % neededParams)
            requestParams = request.json.keys()
            logger.info("requestParams: %s" % requestParams)

            # 判断参数是否都有传过来,是否多了,是否错了
            if userName and userPassword and email and util.paramsNumResult(
                    neededParams, requestParams):
                userNameResult = util.validateUsername(userName)
                emailResult = util.validateEmail(email)
                passwordResult = util.validatePassword(userPassword)

                #校验各个参数值是否合法
                if userNameResult and emailResult and passwordResult:
                    if not User.query.filter(User.username == userName).all(
                    ):  # 查询数据库里是否存在该username
                        userNew = User(username=userName,
                                       password=userPassword,
                                       email=email)
                        db.session.add(userNew)
                        db.session.commit()
                        return {
                            "code": "00",
                            "userid": userNew.id,
                            "message": u"成功"
                        }
                    else:
                        # 数据库里有重名的
                        return {"code": "01", "message": u"参数值不合法,用户名已存在"}
                else:
                    return {"code": "02", "message": u"参数值不合法,不符合约束条件"}
            else:
                return {
                    "code": "03",
                    "message": u"参数错误,可能原因:参数少传了、多传了、写错了、值为空"
                }

        except Exception as e:
            logger.error("error of register: %s" % e)
            return {"code": "999", "message": u"未知错误"}
Esempio n. 14
0
def fillInResponseDict(responseDict, blogs):
    # 遍历用户的所有博文,把博文的各字段赋值给博文字典的各个值(按照接口文档的格式)
    #blogDict = {}
    for blog in blogs:
        # 定义一个临时字典,组装博文的数据
        blogDict = {
        }  # 如果定义在for前面,由于append的是blogDict的引用,在填充完response后,存的blogDict最后都会替换为最后一次blogDict的值
        logger.info("----blog: %s" % blog)
        blogDict["update_time"] = blog.updateTime
        blogDict["title"] = blog.blogTitle
        blogDict["content"] = blog.blogContent
        blogDict["articleId"] = blog.articleId
        blogDict["owner"] = blog.user.id
        blogDict["posted_on"] = blog.createTime
        logger.info("blogDict: %s" % blogDict)
        #遍历完一个博文后,把blogDict添加到responseDict的"data"列表中
        responseDict["data"].append(blogDict)
        logger.info("responseDict: %s" % responseDict)
    #把blogs内容填充到responseDict后,把responseDict返回
    return responseDict
 def get_blogs_of_user(self, userid, token):
     #{"userid":"4", "token": "2d406f40e9544b45a162289af15145b4","offset": "1", "lines": "1"}
     url = "%s/getBlogsOfUser/" % (self.host)
     data = json.dumps({"userid":userid, "token": token})
     logger.info("request data of get_blogs_of_user: %s" % data)
     return self.api_client.post(url = url, data = data)
 def get_blogs_content(self,articleIds):
     # 'articleIds=' 后边传'1,2'这样的值
     url = "%s/getBlogsContent/articleIds=%s" % (self.host, articleIds)
     logger.info("url of get_blogs_content: %s" % url)
     return self.api_client.get(url)
 def create_blog(self, userid, token, title, content):
     #{"userid": "2", "token": "4282a87824884246aa0d8ef6974bbbf5", "title":"dddddd", "content":"HttpRunner is a api test interface"}
     url = "%s/create/" % self.host
     data = json.dumps({"userid": userid, "token": token, "title": title, "content": content})
     logger.info("request data of create_blog: %s" % data)
     return self.api_client.post(url, data = data)
 def login_user(self, username, password):
     url = "%s/login/" % self.host
     data = json.dumps({"username": username, "password": password})
     logger.info("request data of login_user: %s" % data)
     return self.api_client.post(url, data = data)
    def test_delete_blogs(self):
        logger.info("############test_delete_blogs############")
        passwordToRegister = "wulaoshi2019"
        logger.info("passwordToRegister")
        # 先注册用户
        username = '******' % random.randrange(1000)
        logger.info("username: %s" % username)
        passwordToRegister = "wulaoshi2019"
        logger.info("passwordToRegister: %s" % passwordToRegister)
        respOfRegister = self.register_user(username, passwordToRegister, '*****@*****.**')
        logger.info("respOfRegister: %s" % respOfRegister.json())

        # 记录password的md5加密串
        passwordOfUser = md5Hash(passwordToRegister)
        logger.info("passwordToLogin: %s" % passwordOfUser)

        # 然后登录,获取token和userid
        respOfLogin = self.login_user(username, passwordOfUser)
        logger.info("respOfLogin: %s" % respOfLogin.json())
        # 获取登录返回的userid
        useridOfUser = respOfLogin.json()['userid']
        logger.info("useridOfUser: %s" % useridOfUser)
        # 获取登录返回token
        tokenOfUser = respOfLogin.json()['token']
        logger.info("tokenOfUser: %s" % tokenOfUser)

        # 创建第一个博文
        respOfCreate1 = self.create_blog(useridOfUser, tokenOfUser, title="mysql", content="mysql learn")
        logger.info("resp of create_blog1: %s" % respOfCreate1.json())
        # 再创第二个博文
        respOfCreate2 = self.create_blog(useridOfUser, tokenOfUser, title="mysql", content="mysql learn")
        logger.info("resp of create_blog2: %s" % respOfCreate2.json())
        # 再创第三个博文
        respOfCreate3 = self.create_blog(useridOfUser, tokenOfUser, title="mysql", content="mysql learn")
        logger.info("resp of create_blog3: %s" % respOfCreate3.json())

        # 查询用户博文,获取articleIds,需要参数:userid、token
        respOfGetBlogsOfUser = self.get_blogs_of_user(useridOfUser, tokenOfUser)
        logger.info("respOfGetBlogsOfUser: %s" % respOfGetBlogsOfUser.json())
        logger.info("respOfGetBlogsOfUser.text: %s" % respOfGetBlogsOfUser.text)

        # 正则表达式获取响应结果中所有的articleId,拼成字符串,如"1,2,3"
        reFindArticleIdsRes = re.findall(r'"articleId": (\d+)', respOfGetBlogsOfUser.text)
        logger.info("reFindArticleIdsRes: %s" % reFindArticleIdsRes)
        articleIdsListStr = [int(articleId) for articleId in reFindArticleIdsRes]


        # 删除博文
        respOfDeleteBlogs = self.delete_blog(useridOfUser, tokenOfUser, articleIdsListStr)
        logger.info("respOfDeleteBlogs: %s" % respOfDeleteBlogs.json())
        self.assertEqual(200, respOfDeleteBlogs.status_code)
        self.assertEqual("00", respOfDeleteBlogs.json()['code'])
def initializeTables():
    # 尝试三次创建表,如果不成功则提示失败
    for i in range(3):
        logger.info("Try to initialize tables attempt times: %s" % int(i + 1))
        try:
            # 创建表,提交db会话
            db.create_all()
            time.sleep(0.1)
            db.session.commit()
            # 查询User表,如果报错说明查不到,则到except分支创建表
            logger.info("Try to find table User: %s" % User.query.first())
            logger.info("Try to find table UserBlog: %s" %
                        UserBlog.query.first())
            logger.info("User and UserBlog table existed !")
            # 表存在,则退出循环
            break

        except Exception as e:
            logger.info(
                "Error occurs when searching the tables : '%s', now trying to create again ... "
                % e)

    # 3次都没有执行break,说明没成功,则在这里提示表创建失败
    else:
        logger.info("Create tables failed")
 def test_register_user_not_existed(self):
     logger.info("############test_register_user_not_existed############")
     # 先注册,记录username和password(md5)
     passwordToRegister = "wulaoshi2019"
     logger.info("passwordToRegister")
     # 若已经存在,重试1次
     for i in range(2):
         logger.info("try times: %s" % int(i + 1))
         try:
             username = '******' % random.randrange(1000)
             logger.info("username: %s" % username)
             resp = self.register_user(username, passwordToRegister, '*****@*****.**')
             logger.info("resp of test_register_user_not_existed: %s" % resp.json())
             self.assertEqual(200, resp.status_code)
             self.assertEqual("00", resp.json()['code'])
             break
         except Exception as e:
             logger.info("error in test_register_user_not_existed: %s" % e)
Esempio n. 22
0
def paramsNumResult(neededParams, requestParams):
    for param in requestParams:
        if param not in neededParams:
            logger.info("param not in needed params: %s" % param)
            return False
    return True
        # 查询用户博文,获取articleIds,需要参数:userid、token
        respOfGetBlogsOfUser = self.get_blogs_of_user(useridOfUser, tokenOfUser)
        logger.info("respOfGetBlogsOfUser: %s" % respOfGetBlogsOfUser.json())
        logger.info("respOfGetBlogsOfUser.text: %s" % respOfGetBlogsOfUser.text)

        # 正则表达式获取响应结果中所有的articleId,拼成字符串,如"1,2,3"
        reFindArticleIdsRes = re.findall(r'"articleId": (\d+)', respOfGetBlogsOfUser.text)
        logger.info("reFindArticleIdsRes: %s" % reFindArticleIdsRes)
        articleIdsListStr = [int(articleId) for articleId in reFindArticleIdsRes]


        # 删除博文
        respOfDeleteBlogs = self.delete_blog(useridOfUser, tokenOfUser, articleIdsListStr)
        logger.info("respOfDeleteBlogs: %s" % respOfDeleteBlogs.json())
        self.assertEqual(200, respOfDeleteBlogs.status_code)
        self.assertEqual("00", respOfDeleteBlogs.json()['code'])


if __name__ == '__main__':
    logger.info("reportPath: %s" % reportPath)
    # 根据给定的测试类,获取其中的所有以“test”开头的测试方法,并返回一个测试套件
    suite1 = unittest.TestLoader().loadTestsFromTestCase(TestApiServer)
    # 将测试类加载到测试套件中
    suite = unittest.TestSuite([suite1])
    # 以二进制方式打开文件,准备写
    fp = open(reportPath, 'wb')
    # 使用HTMLTestRunner配置参数,输出报告路径、报告标题、描述,均可以配
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='Unittest Report', description='Report Description')
    # 运行测试集合
    runner.run(suite)
Esempio n. 24
0
def validateMd5Password(passwordFromPost, usernameFromPost):
    try:
        logger.info("passwordFromPost: %s" % passwordFromPost)
        logger.info("usernameFromPost: %s" % usernameFromPost)
        userInDb = User.query.filter(User.username == usernameFromPost).first()
        logger.info("userInDb: %s" % userInDb)
        if userInDb:
            passwordInDb = userInDb.password
            logger.info("passwordInDb: %s" % passwordInDb)
            passwordInDbMd5 = md5Hash(passwordInDb)
            logger.info("passwordInDbMd5: %s" % passwordInDbMd5)
        else:
            passwordInDbMd5 = None
            logger.info("passwordInDbMd5: %s" % passwordInDbMd5)

        if passwordFromPost == passwordInDbMd5:
            return True
        else:
            return False

    except Exception as e:
        logger.info("validateMd5Password Error: %s " % e)
 def update_blog(self, userid, token, articleId, title, content):
     url = "%s/update/" % (self.host)
     data = json.dumps({"userid": userid, "token": token, "articleId":articleId, "title": title, "content": content})
     logger.info("request data of update_blog: %s" % data)
     return self.api_client.put(url, data = data)
    def test_get_blog_content(self):
        logger.info("############test_get_blog_content############")
        # 先注册用户
        username = '******' % random.randrange(1000)
        logger.info("username: %s" % username)
        passwordToRegister = "wulaoshi2019"
        logger.info("passwordToRegister: %s" % passwordToRegister)
        respOfRegister = self.register_user(username, passwordToRegister, '*****@*****.**')
        logger.info("respOfRegister: %s" % respOfRegister.json())

        # 记录password的md5加密串
        passwordOfUser = md5Hash(passwordToRegister)
        logger.info("passwordToLogin: %s" % passwordOfUser)

        # 然后登录,获取token和userid
        respOfLogin = self.login_user(username, passwordOfUser)
        logger.info("respOfLogin: %s" % respOfLogin.json())
        # 获取登录返回的userid
        useridOfUser = respOfLogin.json()['userid']
        logger.info("useridOfUser: %s" % useridOfUser)
        # 获取登录返回token
        tokenOfUser = respOfLogin.json()['token']
        logger.info("tokenOfUser: %s" % tokenOfUser)

        # 创建博文
        respOfCreate = self.create_blog(useridOfUser, tokenOfUser, title="mysql", content="mysql learn")
        logger.info("resp of create_blog: %s" % respOfCreate.json())

        # 查询用户博文,获取articleId,需要参数:userid、token
        respOfGetBlogsOfUser = self.get_blogs_of_user(useridOfUser, tokenOfUser)
        logger.info("respOfGetBlogsOfUser: %s" % respOfGetBlogsOfUser.json())
        articleId = respOfGetBlogsOfUser.json()['data'][0]['articleId']
        logger.info("articleId: %s" % articleId)

        # 查询博文内容参数:articleId
        respOfGetBlogContent = self.get_blog_content(articleId)
        logger.info("respOfGetBlogContent: %s" % respOfGetBlogContent)
        self.assertEqual(200, respOfGetBlogContent.status_code)
        self.assertEqual("00", respOfGetBlogContent.json()['code'])
    def test_create_blog(self):
        logger.info("############test_create_blog############")
        username = '******' % random.randrange(1000)
        logger.info("username: %s" % username)
        passwordToRegister = "wulaoshi2019"
        logger.info("passwordToRegister")

        # 注册新用户,记录password(md5)
        respOfRegister = self.register_user(username, passwordToRegister, '*****@*****.**')
        logger.info("respOfRegister: %s" % respOfRegister.json())
        passwordToLogin = md5Hash(passwordToRegister)
        logger.info("passwordToLogin: %s" % passwordToLogin)

        # 登录用户,记录userid和token
        respOfLogin = self.login_user(username, passwordToLogin)
        logger.info("respOfLogin: %s" % respOfLogin.json())
        useridOfRegister = respOfLogin.json()['userid']
        logger.info("useridOfRegister: %s" % useridOfRegister)
        tokenOfLogin = respOfLogin.json()['token']
        logger.info("tokenOfLogin: %s" % tokenOfLogin)

        # 创建博文并断言
        respOfCreate = self.create_blog(useridOfRegister, tokenOfLogin, title = "mysql", content = "mysql learn")
        logger.info("resp of test_create_blog: %s" % respOfCreate.json())
        self.assertEqual(200, respOfCreate.status_code)
        self.assertEqual("00", respOfCreate.json()['code'])
Esempio n. 28
0
    def put(self):
        try:
            logger.info(
                "########################[Update]########################")
            logger.info("self.args.keys(): %s" % self.args.keys())
            json_data = request.get_json(force=True)
            logger.info("json_data: %s" % json_data)
            userid = json_data['userid'] if ('userid'
                                             in json_data.keys()) else ""
            logger.info("userid: %s" % userid)
            userToken = json_data['token'] if ('token'
                                               in json_data.keys()) else ""
            logger.info("userToken: %s" % userToken)
            articleId = json_data['articleId'] if ('articleId'
                                                   in json_data.keys()) else ""
            logger.info("articleId: %s" % articleId)
            blogTitle = json_data['title'] if ('title'
                                               in json_data.keys()) else ""
            logger.info("blogTitle: %s" % blogTitle)
            blogContent = json_data['content'] if ('content'
                                                   in json_data.keys()) else ""
            logger.info("blogContent: %s" % blogContent)
            neededParams = self.args.keys(
            )  # 记录self.reqparse.add_argument中添加的参数列表
            logger.info("neededParams: %s" % neededParams)
            requestParams = request.json.keys()  # 记录发送请求中携带的参数列表
            logger.info("requestParams: %s" % requestParams)
            requestTimestamp = time.time()

            # 校验是否参数都有传过来,不多不少
            if userid and userToken and blogTitle and blogContent and articleId and util.paramsNumResult(
                    neededParams, requestParams):
                getUserInDB = User.query.filter(User.id == userid).first()
                logger.info("getUserInDB: %s" % getUserInDB)
                # 如果用户存在,判断表中是否有登录时间和token
                if getUserInDB:
                    userLoginTimeInDB = getUserInDB.loginTime  #取出用户的登录时间
                    logger.info("userLoginTimeInDB: %s" % userLoginTimeInDB)
                    # 获取用户在DB中的token
                    userTokenInDB = getUserInDB.token
                    logger.info("userTokenInDB: %s" % userTokenInDB)
                    # 如果有登录时间和token,则继续校验token是否过期
                    if userLoginTimeInDB and userTokenInDB:
                        # 校验登录时间是否超过1小时
                        if util.calculateTimeDiff(userLoginTimeInDB,
                                                  requestTimestamp) >= 1:
                            return {
                                "code": "02",
                                "message": u"参数值不合法,token已过期,请重新登录"
                            }
                        # 登录时间没超过1小时,继续校验token是否和useid是否相匹配
                        else:
                            # 判断token和userid是否相匹配,匹配则继续检验articleId是否存在
                            if userToken == userTokenInDB:
                                # 判断artileId是否在DB中存在
                                getBlogInDB = UserBlog.query.filter(
                                    UserBlog.articleId == articleId).first()
                                logger.info("getBlogInDB: %s" % getBlogInDB)
                                # 如果用articleId能查到博文,存表(update_time,title, content),并返回
                                if getBlogInDB:
                                    # 先获取到更新博文的时间
                                    updateBlogTimeString = time.strftime(
                                        "%Y-%m-%d %H:%M:%S",
                                        time.localtime(requestTimestamp))
                                    logger.info("updateBlogTimeString: %s" %
                                                updateBlogTimeString)

                                    # 存表: blogTitle、blogContent、updateTime
                                    updateBlog = UserBlog.query.filter(
                                        UserBlog.articleId ==
                                        articleId).first()
                                    updateBlog.updateTime = updateBlogTimeString
                                    updateBlog.blogTitle = blogTitle
                                    updateBlog.blogContent = blogContent
                                    db.session.commit()
                                    # 返回成功
                                    return {
                                        "articleId": articleId,
                                        "update_time": updateBlogTimeString,
                                        "code": "00",
                                        "userid": userid
                                    }
                                # 如果用articleId查不到博文,则提示参数值不合法,articleId不存在
                                else:
                                    return {
                                        "code": "02",
                                        "message": u"参数值不合法,articleId不存在"
                                    }

                            # token和userid不匹配,说明token不正确,返回参数值不合法,token不正确
                            else:
                                return {
                                    "code": "02",
                                    "message": u"参数值不合法,token不正确"
                                }

                    # 如果没有登录时间和token,则提示token不正确,请登录并获取token
                    else:
                        return {
                            "code": "02",
                            "message": u"参数值不合法,token不正确,请登录并获取token"
                        }

                        # 如果用户不存在,提示参数值不合法,用户不存在
                else:
                    return {"code": "02", "message": u"参数值不合法,用户不存在"}
            # 参数没传全,或参数写错了,或参数多了
            else:
                return {
                    "code": "03",
                    "message": u"参数错误,可能原因:参数少传了、多传了、写错了、值为空"
                }

        except Exception as e:
            logger.error("error of update: %s" % e)
            return {"code": "999", "message": u"未知错误"}
    def delete(self):
        try:
            logger.info(
                "########################[delete]########################")
            logger.info("self.args.keys(): %s" % self.args.keys())
            json_data = request.get_json(force=True)
            userid = json_data['userid'] if ('userid'
                                             in json_data.keys()) else ""
            logger.info("userid: %s" % userid)
            userToken = json_data['token'] if ('token'
                                               in json_data.keys()) else ""
            logger.info("userToken: %s" % userToken)
            articleIdList = json_data['articleId'] if (
                'articleId' in json_data.keys()) else ""
            logger.info("articleIdList: %s" % articleIdList)
            neededParams = self.args.keys(
            )  # 记录self.reqparse.add_argument中添加的参数列表
            logger.info("neededParams: %s" % neededParams)
            requestParams = request.json.keys()  # 记录发送请求中携带的参数列表
            logger.info("requestParams: %s" % requestParams)
            requestTimestamp = time.time()

            # 校验是否参数都有传过来,不多不少
            if userid and userToken and articleIdList and util.paramsNumResult(
                    neededParams, requestParams):
                getUserInDB = User.query.filter(User.id == userid).first()
                logger.info("getUserInDB: %s" % getUserInDB)
                # 如果用户存在,继续判断是否有登陆时间和token
                if getUserInDB:
                    userLoginTimeInDB = getUserInDB.loginTime  #取出用户的登录时间
                    logger.info("userLoginTimeInDB: %s" % userLoginTimeInDB)
                    # 获取用户在DB中的token
                    userTokenInDB = getUserInDB.token
                    logger.info("userTokenInDB: %s" % userTokenInDB)
                    # 如果表中有登录时间和token,则继续判断token是否过期
                    if userLoginTimeInDB and userTokenInDB:
                        # 校验登录时间是否超过1小时
                        if util.calculateTimeDiff(userLoginTimeInDB,
                                                  requestTimestamp) >= 1:
                            return {
                                "code": "02",
                                "message": u"参数值不合法,token已过期,请重新登录"
                            }
                        # 登录时间没超过1小时,继续校验token是否和useid是否相匹配
                        else:
                            # 判断token和userid是否相匹配,匹配则处理articleIdList列表
                            if userToken == userTokenInDB:
                                # 判断articleIdList的值是否为列表,是的话,则遍历列表继续处理
                                if type(articleIdList) == list:
                                    logger.info("articleIdList: %s" %
                                                articleIdList)
                                    # 遍历articleId列表
                                    for id in articleIdList:
                                        # 用id去找blog
                                        blog = UserBlog.query.filter(
                                            UserBlog.articleId == id).first()
                                        # 能找到,说明id存在,进行删除动作
                                        if blog:
                                            # 先从db session中删掉,最后一起commit
                                            db.session.delete(blog)

                                        # 没找到,说明id不存在,提示参数值不合法
                                        else:
                                            return {
                                                "code":
                                                "02",
                                                "message":
                                                u"参数值不合法,articleId:%s 不存在" % id
                                            }
                                    # 遍历完articleIdList,id都存在,且都做了删除,则提交commit
                                    db.session.commit()
                                    # 数据库提交删除后,返回结果
                                    return {
                                        "articleId": articleIdList,
                                        "code": "00",
                                        "userid": userid
                                    }

                                # articleId的值不是列表,提示articleId传的不是列表
                                else:
                                    return {
                                        "code": "02",
                                        "message": u"参数值不合法,articleId传的不是列表"
                                    }

                            # token和userid不匹配,说明token不正确,返回参数值不合法,token不正确
                            else:
                                return {
                                    "code": "02",
                                    "message": u"参数值不合法,token不正确"
                                }
                    # 表中没有登录时间和token,提示token不正确,请登录并获取token
                    else:
                        return {
                            "code": "02",
                            "message": u"参数值不合法,token不正确,请登录并获取token"
                        }

                # 如果用户不存在,提示参数值不合法,用户不存在
                else:
                    return {"code": "02", "message": u"参数值不合法,用户不存在"}
            # 参数没传全,或参数写错了,或参数多了
            else:
                return {
                    "code": "03",
                    "message": u"参数错误,可能原因:参数少传了、多传了、写错了、参数值为空"
                }

        except Exception as e:
            logger.error("error of delete: %s" % e)
            return {"code": "999", "message": u"未知错误"}
Esempio n. 30
0
def generateUUID():
    try:
        uuidStr = uuid.uuid4().hex
        return uuidStr
    except Exception as e:
        logger.info("uuidGenerate Error :%s" % e)