一、字符串操作包

string_helper.py是字符串操作包,主要对字符串进行检查、过滤和截取等处理。

#!/usr/bin/evn python

# coding=utf-8

import re

def check_string(text, pattern):

"""

检查字符串是否符合指定规则

:param text: 需要检查的字符串

:param pattern: 正式表达式,如:'^[a-zA-Z]+$'

:return: 含有指定字符时返回真,否则为假

"""

match = re.search(pattern, text)

if match:

return True

else:

return False

def is_email(text):

"""

验证字符串是否是email

:param text: 需要检查的字符串

:return: 符合返回True,不符合返回False

"""

return check_string(text, '[^\._-][\w\.-]+@(?:[A-Za-z0-9]+\.)+[A-Za-z]+$')

def is_phone(text):

"""

验证字符串是否是固定电话

:param text: 需要检查的字符串

:return: 符合返回True,不符合返回False

"""

return check_string(text, '\(?0\d{2,3}[) -]?\d{7,8}$')

def is_mobile(text):

"""

验证字符串是否是手机号码

:param text: 需要检查的字符串

:return: 符合返回True,不符合返回False

"""

return check_string(text, '^1[3578]\d{9}$|^147\d{8}$')

def is_letters(text):

"""

验证字符串是否全是字母

:param text: 需要检查的字符串

:return: 符合返回True,不符合返回False

"""

return check_string(text, '^[a-zA-Z]+$')

def is_idcard(text):

"""

验证字符串是否是身份证号码

:param text: 需要检查的字符串

:return: 格式正确返回True,错误返回False

"""

ic = IdentityCard()

return ic.check(text.upper())

def filter_str(text, filter='\|||&|%|~|\^|;|\''):

"""

滤掉字符串

:param text: 需要过滤的字符串

:param filter: 过滤内容(正则表达式)

:return: 去除特殊字符后的字符串

"""

if text:

return re.subn(filter, '', text)[0]

else:

return ''

def filter_tags(htmlstr):

"""

过滤HTML中的标签

:param htmlstr: 要过滤的内容

:return:

"""

re_cdata=re.compile('//]*//\]\]>',re.I) #匹配CDATA

re_script=re.compile(']*>[^',re.I)#Script

re_style=re.compile(']*>[^',re.I)#style

re_br=re.compile('
')#处理换行

re_h=re.compile('?\w+[^>]*>')#HTML标签

re_comment=re.compile('')#HTML注释

s=re_cdata.sub('',htmlstr)#去掉CDATA

s=re_script.sub('',s) #去掉SCRIPT

s=re_style.sub('',s)#去掉style

s=re_br.sub('\n',s)#将br转换为换行

s=re_h.sub('',s) #去掉HTML 标签

s=re_comment.sub('',s)#去掉HTML注释

#去掉多余的空行

blank_line=re.compile('\n+')

s=blank_line.sub('\n',s)

s=replaceCharEntity(s)#替换实体

return s

def replaceCharEntity(htmlstr):

"""

替换常用HTML字符

:param htmlstr: 要替换的字符

:return:

"""

CHAR_ENTITIES={'nbsp':' ','160':' ',

'lt':'

'gt':'>','62':'>',

'amp':'&','38':'&',

'quot':'"','34':'"',}

re_charEntity=re.compile(r'?(?P\w+);')

sz=re_charEntity.search(htmlstr)

while sz:

entity=sz.group()#entity全称,如>

key=sz.group('name')#去除&;后entity,如>为gt

try:

htmlstr=re_charEntity.sub(CHAR_ENTITIES[key],htmlstr,1)

sz=re_charEntity.search(htmlstr)

except KeyError:

#以空串代替

htmlstr=re_charEntity.sub('',htmlstr,1)

sz=re_charEntity.search(htmlstr)

return htmlstr

def string(text, is_return_null=False):

"""

sql字符串拼接专用函数

会在字符串两边添加'单撇号,用于生成数据库sql语句

:param text: 需要添加'的字符串

:param is_return_null: 是否返回null,是的话在字符串为空时返回null,否则返回''

:return:

"""

if not text is None and text != '':

return "'" + str(text) + "'"

elif not is_return_null:

return "''"

else:

return "null"

def cut_str(text, length):

"""

将字符串截取指定长度

:param text: 需要进行截取的字符串

:param length: 字符串保留的长度

:return:

"""

if not text or not isinstance(text, str):

return text

tem = ''

try:

tem = text.decode('utf8')

except:

pass

if not tem or tem == '':

try:

tem = text[0:length]

except:

tem = text

return tem[0:length]

class IdentityCard:

"""身份证号码验证类"""

def __init__(self):

self.__Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]

self.__Ti = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']

def calculate(self, code):

"""计算校验位"""

sum = 0

for i in range(17):

sum += int(code[i]) * self.__Wi[i]

return self.__Ti[sum % 11]

def check(self, code):

"""检查输入的号码是否正确"""

if (len(code) != 18):

return False

if self.calculate(code) != code[17]:

return False

return True

check_string()函数主要是用来检查字符串是否符合指定规则用的,它被is_开头的各个函数所调用。is_开头的几个函数怎么使用,请看测试用例。

#!/usr/bin/evn python

# coding=utf-8

import unittest

from common import string_helper

class StringHelperTest(unittest.TestCase):

"""字符串操作包测试类"""

def setUp(self):

"""初始化测试环境"""

print('------ini------')

def tearDown(self):

"""清理测试环境"""

print('------clear------')

def test_is_email(self):

self.assertEqual(string_helper.is_email('aaaaa'), False)

self.assertEqual(string_helper.is_email('aaaa@xxx.com'), True)

self.assertEqual(string_helper.is_email('xxx@xxx.com.xx'), True)

def test_is_phone(self):

self.assertEqual(string_helper.is_phone('aaaaa'), False)

self.assertEqual(string_helper.is_phone('12345678'), False)

self.assertEqual(string_helper.is_phone('01012345678'), True)

self.assertEqual(string_helper.is_phone('010-123456'), False)

self.assertEqual(string_helper.is_phone('010-12345678'), True)

self.assertEqual(string_helper.is_phone('010 12345678'), True)

self.assertEqual(string_helper.is_phone('0757 12345678'), True)

def test_is_mobile(self):

self.assertEqual(string_helper.is_mobile('aaaaa'), False)

self.assertEqual(string_helper.is_mobile('123456789'), False)

self.assertEqual(string_helper.is_mobile('13012345678'), True)

self.assertEqual(string_helper.is_mobile('14012345678'), False)

def test_is_letters(self):

self.assertEqual(string_helper.is_letters('123456'), False)

self.assertEqual(string_helper.is_letters('1ds2f12sdf'), False)

self.assertEqual(string_helper.is_letters('absbdsf'), True)

self.assertEqual(string_helper.is_letters('ADdfFSds'), True)

def test_is_idcard(self):

self.assertEqual(string_helper.is_idcard('123456789'), False)

self.assertEqual(string_helper.is_idcard('aaaaaaaaa'), False)

self.assertEqual(string_helper.is_idcard('340223190008210470'), False)

self.assertEqual(string_helper.is_idcard('34022319000821047X'), True)

if __name__ == '__main__':

unittest.main()

filter_str()函数用来将指定的特殊字符全部过滤掉

def test_filter_str(self):

print(string_helper.filter_str('aaa'))

print(string_helper.filter_str('aaa<>&\''))

print(string_helper.filter_str('aaa|&|%|~|^|;|\''))

执行结果:

-----ini------

aaa

aaa

aaa

------clear------

filter_tags函数将代码上的全部html标签过滤掉(网上找到来的代码)

def test_filter_tags(self):

print(string_helper.filter_tags('

aaa'))

执行结果:

------ini------

aaa

------clear------

string()函数主要用于拼接sql语句用的,用于在字符串的两边添加 ' 这个单撇号,如果is_return_null这个参数为True时,输入内容为空则返回null字符

def test_string(self):

print(string_helper.string(-1))

print(string_helper.string({'test': 'abc'}))

print(string_helper.string(''))

print(string_helper.string('aaa'))

print(string_helper.string('', True))

执行结果:(使用print打印到控制台的结果,字符串不输出""双引号,实际上存储到变量中时,下面内容都会加上双引号)

------ini------

'-1'

'{'test': 'abc'}'

''

'aaa'

null

------clear------

cut_str()函数会将输入的字符串按指定长度截取

def test_cut_str(self):

print(string_helper.cut_str('', 5))

print(string_helper.cut_str('aaa', 5))

print(string_helper.cut_str('将字符串截取指定长度', 5))

print(string_helper.cut_str('aa将字符串截取指定长度', 5))

执行结果:

-----ini------

aaa

将字符串截

aa将字符

------clear------

二、验证码生成包

verify_helper.py是验证码生成包,调用比较简单,这里就不再详细说明,到后面章节会有详细例子。

三、web操作包

web_helper.py是web操作包,主要是对web服务进行相关处理。它需要启动web服务后基于web服务下才行进行测试操作,不能直接运行测试用例进行测试。

#!/usr/bin/evn python

# coding=utf-8

import json

import re

import urllib.parse

from bottle import response, HTTPResponse, request

from common import json_helper

def get_ip():

"""获取当前客户端ip"""

try:

ip = request.remote_addr

except:

ip = ''

if not ip:

try:

ip = request.environ.get('REMOTE_ADDR')

except:

pass

return ip

def get_session():

"""获取当前用户session"""

return request.environ.get('beaker.session')

def return_msg(state, msg, data={}):

"""

接口输出数据到客户端

:param state: 状态码(公共参数,-1=出错,0=正常)

:param msg: 说明信息(公共参数)

:param data: 数据字典

:return: 返回组合后的json字符串

"""

msg = {

"state": state,

"msg": msg,

"data": data

}

# 将字典转为字符串输出

message = json.dumps(msg, cls=json_helper.CJsonEncoder)

return message

def return_raise(msg=''):

"""

直接终止程序,返回结果给客户端

修改bottle的异常状态码和异常返回body内容

:param msg: 输出内容

:return: 输出字符串

"""

res = response.copy(cls=HTTPResponse)

res.status = 200

res.body = str(msg)

raise res

def get_form(args_name, msg, is_strip=True, lenght=0, is_check_null=True, notify_msg='', is_check_special_char=True):

"""

获取客户端Form方式提交的参数值

:param args_name: 参数名

:param msg: 参数中文名称

:param is_strip: 字符串两端是否自动去除空格

:param lenght: 参数长度最大限制,0为不限制

:param is_check_null: 是否要求进行非空检测,True:当参数值为空时,返回错误提示客户端不能为空

:param notify_msg: 非必填项,当参数值为空时,默认返回“xxx 不允许为空”这个提示,如果这个变量有值,则直接返回这个变量值,即定制好的错误提示

:param is_check_special_char: 判断参数值是否含有特殊字符,True=默认会对特殊字符进行判断,False=不做判断处理,需要手动对接收参数值进行过滤处理,去除危险字符

:return: 返回处理后的参数

"""

args_value = ''

if request.method.upper() in ('POST', 'PUT', 'DELETE'):

try:

if request.json:

args_value = str(request.json.get(args_name, '')).strip()

else:

args_value = str(request.forms.get(args_name, '')).strip()

except:

args_value = str(request.forms.get(args_name, '')).strip()

if not args_value:

args_value = str(request.POST.get(args_name, '')).strip()

return __request_handle(args_value, msg, is_strip, lenght, is_check_null, notify_msg, is_check_special_char)

def get_query(args_name, msg, is_strip=True, lenght=0, is_check_null=True, notify_msg='', is_check_special_char=True):

"""

获取客户端Get方式提交的参数值

:param args_name: 参数名

:param msg: 参数中文名称

:param is_strip: 字符串两端是否自动去除空格

:param lenght: 参数长度最大限制,0为不限制

:param is_check_null: 是否要求进行非空检测,True:当参数值为空时,返回错误提示客户端不能为空

:param notify_msg: 非必填项,当参数值为空时,默认返回“xxx 不允许为空”这个提示,如果这个变量有值,则直接返回这个变量值,即定制好的错误提示

:param is_check_special_char: 判断参数值是否含有特殊字符,True=默认会对特殊字符进行判断,False=不做判断处理,需要手动对接收参数值进行过滤处理,去除危险字符

:return: 返回处理后的参数

"""

return __request_handle(__get(args_name), msg, is_strip, lenght, is_check_null, notify_msg, is_check_special_char)

def __get(args_name):

"""

从get请求中提取请求值(直接使用python的GET获取参数时,有时转换编码时会出现乱码,所以还是直接采用截取后直接转码比较好)

例如:http://127.0.0.1:81/manage/manager/?page=0&rows=20&sidx=id&sord=desc&name=%E5%BC%A0%E4%B8%89

:param args_name: 要取值的参数名:name

:return: 截取的编码值:%E5%BC%A0%E4%B8%89

"""

get = '?' + request.query_string

start_index = get.find('&' + args_name + '=')

if start_index == -1:

start_index = get.find('?' + args_name + '=')

if start_index == -1:

return ''

end_index = get.find('&', start_index + 1)

if end_index == -1:

return get[start_index + len(args_name + '=') + 1:]

else:

return get[start_index + len(args_name + '=') + 1:end_index]

def __request_handle(args_value, msg, is_strip, lenght, is_check_null, notify_msg, is_check_special_char):

"""

对客户端提交的参数进行各种判断与处理

:param args_value: 参数值

:param msg: 参数中文名称

:param is_strip: 字符串两端是否自动去除空格

:param lenght: 参数长度最大限制,0为不限制

:param is_check_null: 是否要求进行非空检测,True:当参数值为空时,返回错误提示客户端不能为空

:param notify_msg: 非必填项,当参数值为空时,默认返回“xxx 不允许为空”这个提示,如果这个变量有值,则直接返回这个变量值,即定制好的错误提示

:param is_check_special_char: 判断参数值是否含有特殊字符,True=默认会对特殊字符进行判断,False=不做判断处理,需要手动对接收参数值进行过滤处理,去除危险字符

:return: 返回处理后的参数

"""

# 如果参数为空,则返回该参数不允许为空的json串给前端

if is_check_null and not args_value:

if notify_msg:

return_raise(return_msg(-1, notify_msg))

else:

return_raise(return_msg(-1, "%s 不允许为空" % msg))

elif not args_value:

return args_value

# 把utf-8的url编码解码成中文字符

try:

args_value = urllib.parse.unquote(args_value)

except:

pass

# 替换特殊的空字符

args_value = args_value.replace(u'\xa0', u'')

# 是否字符串两端去空格

if is_strip:

args_value = args_value.strip()

# 判断是否超出指定长度

if lenght > 0 and len(args_value) > lenght:

return_raise(return_msg(-1, "%s 超出 %s 个字符" % (msg, lenght)))

# 如果参数含有特殊字符,则返回该参数不允许有特殊字符的json串给前端

if is_check_special_char:

re_result = re.search('\|||&|%|~|\^|;|\'', args_value)

if re_result:

return_raise(return_msg(-1, "%s 含有特殊字符,请重新输入" % msg))

return args_value

get_ip():获取当前客户端ip地址

get_session():获取当前客户的session

return_msg():生成统一的返回给客户端的内容(json格式)。输出内容有state:状态码,一般使用-1表示出现错误,0表示正常,可以根据需要进行修改或添加更多的状态码;msg:状态文说明,出错时返回出错内容提示;data:需要返回的其他内容全部会放在这里。

return_raise():当调用这个函数时,会直接终于代码的执行,直接将结果输出到客户端。

get_form():获取客户端Form方式提交的参数值

get_query():获取客户端Get方式提交的参数值

python cut函数_一天学会Python Web框架(七)工具函数相关推荐

  1. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  2. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  3. python初始化函数_当你学会了Python爬虫,网上的图片素材就免费了

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 加入作者的python学习圈子:1156465813 即可免费获取,资料全 ...

  4. python初始化函数_当你学会了Python爬虫,网上的图片素材就开始免费了

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 加企鹅群695185429即可免费获取,资料全在群文件里.资料可以领取包括 ...

  5. python 用if判断一个数是不是整数_五天学会Python基础02(下)

    函数和模块的使用 在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解. 事实上,上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案.想到这一点问题的答案就呼之 ...

  6. append函数_连载|想用Python做自动化测试?函数的参数传递机制及变量作用域

    " 这一节有点难.看不懂没关系.继续往后学,回头再来看." 10.6 函数参数传递的机制 10.6.1 值传递与引用传递 编程语言的参数传递机制通常有两种: 值传递 拷贝参数的值, ...

  7. exit函数_全面深入了解 Python 魔法函数

    (点击上方公众号,可快速关注一起学Python) 作者:浪子燕青       链接: http://www.langzi.fun/Python魔法函数.html 魔法函数概念 魔法函数是以双下划线开头 ...

  8. vue函数如何调用其他函数?_好程序员Python教程系列之递归函数与匿名函数调用...

    好程序员Python教程系列递归函数与匿名函数调用,函数是Python技术学习中重要的一个环节,深入掌握该阶段的知识内容,对于Python技术能力的提升非常有帮助,这里就针对递归函数与匿名函数两种函数 ...

  9. astype函数_从Excel到Python:最常用的36个Pandas函数!最完整的Pandas教程!

    本文涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入.数据清洗.预处理,以及最常见的数据分类,数据筛选,分类汇总,透视等最常见的操作. 生成数据表 常见的生成数据表的方法有两 ...

最新文章

  1. Python 函数不定长参数
  2. 11家车企联手高通、大唐,加速V2X在华商用部署
  3. 静态配置_Linux网络配置之NAT静态ip配置
  4. OpenSSL使用3(基本原理及生成过程)(转)
  5. SAP UI5应用Opportunity S5 formatter issue
  6. Apache Spark RDD和Java流
  7. FPGA转正总结(标准版)
  8. 3.3 Zend_Db_Table
  9. [HCNA] 静态路由配置实例
  10. TCN机器之心的转载,后面需要实现
  11. 利用stm32串口中断进行数码管显示
  12. 张正友标定法的非opencv库函数实现
  13. docker安装常用命令docker网络
  14. 基于SSM的美容院管理系统
  15. 小P的故事——神奇的换零钱 背包
  16. 2013总结——告别页游,迎接手游
  17. 震动环境如何使用称重传感器
  18. chart.js画图
  19. wifi芯片行业信息汇总
  20. 小米手机刷android one,别羡慕小米用户了!一加8Pro成功刷入MIUI 12,附简易步骤...

热门文章

  1. html5 dom storage,Client-side data storing,DOM storage or HTML5 Local Storage?
  2. growup怎么读_growup..是什么意思
  3. 前端学习与“IT界大佬告诉你,程序员接私活的7大平台利器”
  4. 企业级实际性能测试案例与经验分享
  5. java数据类型的转换函数_JAVA中常用数据类型转换函数
  6. ajax跨越html,ajax跨域的解决方案
  7. 海岸鸿蒙高锰酸盐指数浓度,水中高锰酸盐指数的检测步骤
  8. php排序算法面试题,PHP面试:尽可能多的说出你知道的排序算法
  9. PDE14 heat equation intuition
  10. DE26 Continuation: Repeated Real Eigenvalues