day08

1、url编码.py

import urllib.parse
s='besttest 自动化测试'
print(urllib.parse.quote(s))
# print(urllib.parse.quote(s)) #url编码
# print(urllib.parse.quote_plus(s)) #url编码,quote的加强版,quote编码不了的用plus
#http://blog.csdn.net/sinat_34439107/article/details/78242584

src='https://www.baidu.com/s?wd=besttest%20%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95&rsv_spt=1&rsv_iqid=0x90f615640005e9b2&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&inputT=8129&rsv_t=0d22VbBsLUg6wkL0kNn1rPhfwhU%2F5UCRNiEBd5oqMzEh6ImgExR7fH65dNLwCf0ilzUT&rsv_sug3=36&rsv_sug1=9&rsv_sug7=100&oq=besttest&rsv_pq=f857c55a00063cfd&rsv_sug2=0&rsv_sug4=8623'
#把网址看不懂的符号串,进行解码,就能看懂
print(urllib.parse.unquote(src)) #url解码
# print(urllib.parse.unquote_plus(src)) #url解码
2、异常处理
import traceback--traceback.print_exc()#只是输出报错的详细信息而已

  import traceback

def calc(a,b):
res = a/b
return res

def main():
money = input('输入多少钱:')
months = input('还几个月:')
try:
res = calc(int(money),int(months))
except ZeroDivisionError as e: #try里面的代码如果出错了,走except里面的代码
traceback.print_exc()#只是输出报错的详细信息而已
print('还款的月数不能小于1',e)
except ValueError as e:
print('输入必须是整数,%s'%e)
except Exception as e: #捕获所有的异常
print('未知错误!%s'%e)
else:#没有出错的情况下走else
print('每个月应该还%s'%res)
print('hahahahahahah')

main()
#数据库抛出异常的情况
import pymysql
def main2(sql):
try:
conn=pymysql.connect(host='211.149.218.16',user='jxz',password='123456',db='jxz',charset='utf8')
except Exception as e:
print('数据库连接不了,%s'%e)
else:
cur = conn.cursor()
try:
cur.execute(sql)
except Exception as e:
print('sql语句有错误!%s。sql是"%s'%(e,sql))
else:
res = cur.fetchall()
return res
finally: #不管有没有捕捉到异常,都会走这里。
cur.close()
conn.close()
print(main2('select *from stu'))
***** except(有异常执行)、else(没有异常执行)、finally(最终都会执行)
try:
a = int(input('xx:'))
b = int(input('sss:'))
res = a/b
except Exception as e:
print(e)
else:
print(res)
finally:
print('什么时候到我这里呢')
*****接口异常,raise主动抛出异常:
import requests
def req():
r = requests.get('http://api.nnzhp.cn/api/user/all_stu', headers={'Referer': 'http://api.nnzhp.cn/'})
if len(r.json()['stu_info']) < 0:
pass
else:
raise Exception('接口没数据') # 主动抛出异常
req()
3.面向对象编程.py
class Car():
def run(self):
print('汽车再跑。。。')
bus = Car()
bus.run()
*****
class Car():#模型,模板
def __del__(self):
#析构函数,这个实例被销毁的执行的。
print('over..')

def my_self(self):
print(
'我是一个汽车 我的颜色是【%s】,我有【%s】个窗户'%(self.color,self.window)
)
self.price = 10002
def run(self):
print(self.color)
print(self.window)
print(self.price)
print('汽车在跑。。。')

def __init__(self,color,window):
#
#构造函数,是类在初始化的时候会执行它
#如果你的类在实例化的时候要传入一些参数,那么你就要在__init__这个函数里写参数了
self.color = color #绑定属性
self.window = window
print('执行我了。。')

#把模型做成实际的一个汽车,这个过程叫做实例化。
bus = Car('黄色','3开门') #实例化
bus.my_self()
bus.run()
# bus2 = Car('黑色','4开门') #实例化
# bus3 = Car('粉色','2开门') #实例化
# bus.my_self() #
# bus2.my_self()
# bus3.my_self()

#实例就是指具体造出来的东西,通过类实例化处理的东西,就是实例
#对象,就是实例
4、db_mysql.py
import pymysql
class OpMySql1: #经典类
pass

class OpMySql(object):#新式类
def __init__(self,host,user,password,db,port=3306,charset='utf8'):
schema = {
'user':user,
'host':host,
'password':password,
'db':db,
'port':port,
'charset':charset
}
try:
self.coon = pymysql.connect(**schema)
except Exception as e:
print('数据库连接异常!%s'%e)
quit('数据库连接异常!%s'%e)
else:#没有出异常的情况下,建立游标
self.cur = self.coon.cursor(cursor=pymysql.cursors.DictCursor)

def execute(self,sql):
try:
self.cur.execute(sql)
except Exception as e:
print('sql有错误%s'%e)
return e
if sql[:6].upper()=='SELECT':
return self.cur.fetchall()
else:#其他sql语句的话
self.coon.commit()
return 'ok'

def __del__(self):
self.cur.close()
self.coon.close()
ybq = OpMySql('211.149.218.16','jxz','123456',db='jxz') #实例化
print(ybq.execute('select * from stu;'))
5、self总结.py
class My():
def __init__(self,name):
self.name = name
self.cry()
def cry(self): #实例方法,必须得实例化后才可以调用
print('%s在哭。。。'%self.name)
def learn(self):
self.skill = ['开车']
def my_self(self):
print('我的名字【%s】 我会%s'%(self.name,self.skill))

wsl = My('王思磊') # self = wsl
wsl.skill = '浪'
wsl.learn()
wsl.skill.append('浪')
wsl.skill.append('骚')
wsl.skill.append('贱')
wsl.my_self()
wsl.learn()
wsl.my_self()

td = My('唐迪')
6、实例变量
class Person(object):
country = 'China' #类变量
def __init__(self,name,age,sex):
self.name = name #实例变量,必须实例化之后才能用,成员变量
self.age = age
self.sex = sex

def say_my_country(self):
print(self.country)

#print(Person.country)

# dsx = Person('大师兄',23,'男')
# print(dsx.name)
# print(dsx.age)
# print(dsx.sex)
# print(dsx.country)
# ybq = Person('原宝青',28,'男')
7、小练习.py
# 签名,作用为了作弊
# 82B20DE4-40C2-4859-9DBC-C93B0FBFD09C
#sign
#1、先去用户的设备号码,md5 加密一次
#2、再取加密之后前10位
#3、再加盐,再给他md5一次
#4、最后生成一个字符串

from hashlib import md5

class GetSign(object):
slat = 'SDF234_&#$_12'
def __init__(self,device_id):
self.device_id = device_id
def md5(self,str):
#md5加密的
s = str.encode()
m = md5(s)
return m.hexdigest()

@property #把这个函数变成一个属性方法 ,如果这个方法没有入参,那就可以给变成一个属性方法
def get_res(self):
first_md5 = self.md5(self.device_id)
tmp = first_md5[:10] #取前10位
after_salt = tmp+self.slat
self.sign = self.md5(after_salt)
return self.sign

res = GetSign('82B20DE4-40C2-4859-9DBC-C93B0FBFD09C')
print(res.device_id)
print(res.get_res)
8、私有.py 静态变量
import redis
class MyRedis():
xiaohei = '哈哈哈'
def __init__(self,host,password='',port=6379):
self.__host = host
self.passwd = password
self.port = port
self.__coon_redis()
def __coon_redis(self):
self.coon = redis.Redis(host=self.__host,password=self.passwd,port=self.port)
def get(self,k):
print('__host...',self.__host)
return self.coon.get(k).decode()

@staticmethod #静态方法
def other():
print('我是other')
@classmethod#类方法,也不需要实例化,直接就能用。它静态方法高级一点
#它可以使用类变量和类方法。
def class_fun(cls):
print(cls.xiaohei)
cls.class_fun2()
@classmethod
def class_fun2(cls):
print('我是类方法2')
# r = MyRedis('211.149.218.16','123456')
MyRedis.class_fun()
9、继承.py
class WslFather(object):
@property
def money(self):
return 10000000
def smoke(self):
self.yan = '玉溪'
print('抽烟')
def drink(self):
print('喝酒')
def tangtou(self):
print('烫头')

class Wsl(WslFather):
def driver(self):
print('开车')
yzf = Wsl()
yzf.drink()
yzf.smoke()
yzf.tangtou()
print(yzf.yan)
print(yzf.money)

class Animal(object):
def eat(self,name):
print('吃')


class Brid(Animal):
pass
10、发邮件

设置邮箱--设置--POP3/SMTP/IMAP--1、勾选POP3/SMTP/IMAP服务--有的邮箱用密码发送不了,必须获取授权码才可以

qq中邮箱的设置--设置--账户--开启服务POP3跟IMAP--保存修改,没有密保手机的,密保手机;qq的四个授权码: fszkguwhdkwobdci;eznzkkzglnucbfgd;wqoinpstgmoubgeg;lclyosrskhnzcaej

 *****不带附件的

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
username = 'yanzhifei124@163.com'
passwd='yanzhifei1124'
msg = MIMEText('你好,快过年了,新年快乐!')
msg['Subject']='新年快乐!'
msg['From']=username
msg['To']='173768626@qq.com'
# msg['Cc']='173768626@qq.com'
smtp = smtplib.SMTP('smtp.163.com',port=25)
smtp.login(username,passwd)
smtp.sendmail(username,'173768626@qq.com',msg.as_string())
smtp.quit()
print('发送成功')
*****带附件的
posted @ 2018-03-02 23:58  zfzhp  阅读(201)  评论(0编辑  收藏  举报