标签:back ror for style 文件 分享 ascii src 登录
一 、在day7中已经讲了单个接口的开发,今天讲有关系的接口开发,也就是依赖性,比如你要在博客园写文章就必须先登录,登陆之后才能发表文章,那么登陆和发表文章之间就有个依赖关系,要做的就是这种开发:
1.接口开发首先要导入flask,导入我们用的着的方法
截图:__name__这里有必要解释一下,name前后是两个_不要写错
导入方法:
1.如果不嫌麻烦完全可以一级一级目录点出来,
2.也可以手动添加环境变量
3.就是可以用pycharm自动帮我们添加环境变量,右键选择Mark Directory as-->source root,设置后这个new_api就会变色,倒入方法就可以直接from lib import xxx
PS:如果在这个项目中别的目录你设置了环境变量,只能取消设置后再设置你想要的那个目录才可以
4.在python中怎么区分方法和接口,就要用到@server了
解析:括号里第一个参数是路径,比如:127.0.0.1:8989/login,就是标红的这一部分,第二个参数截图中没有,是methods=[‘post‘,‘get‘],两个方法都写就是可以用post也可以用get
5.在server下写获取cookie的方法:
6.在获取cookie后,用户发表文章时,系统会拿浏览器中存的token进行对比,如果一致,就表示用户仍然处于登陆状态,可以发表文章,如果不一致,就要重新登陆了
@server.route(‘/posts‘) def posts(): # session = flask.request.values.get(‘session‘) print(flask.request.cookies) #打印cookiee cookies = flask.request.cookies # for cookie in cookies: #这个是循环cookies这个字典的key # if cookie.startswith(‘txz_session‘): # username = cookie # session = cookies.get(cookie) username = ‘‘ session = ‘‘ #定义这两个变量是为了在没有传cookie的时候用的 for key,value in cookies.items(): if key.startswith(‘txz_session‘): #判断session以‘txz_session’开头 username = key session = value #调用接口的时候用户传来的session redis_session = tools.op_redis(username) #从redis中获取到的cookie if redis_session==session: #判断传过来的session和redis中的一样 title = flask.request.values.get(‘title‘) content = flask.request.values.get(‘content‘) article_key = ‘article:%s‘%title tools.op_redis(article_key,content) #往redis写数据,把文章写入redis res = {‘msg‘:‘文章发表成功!‘,‘code‘:0} else: res = {‘msg‘:‘用户未登陆‘,‘code‘:401}
return json.dumps(res,ensure_ascii=False)
二、异常处理,拿最简单的例子来说:5/0 =?除数不能为0 ,
res = 5/0 print(res) 运行结果 除数不能为0 Traceback (most recent call last): File "G:/catherine/python/day8/异常处理.py", line 1, in <module> res = 5/0 ZeroDivisionError: division by zero
import random # guess = random.randint(10,20) # num = input(‘please enter a num:‘) # print(num+guess) #运行后,guess是int类型,num是string类型 # please enter a num:3 # Traceback (most recent call last): # File "/G:/catherine/python/day8/异常处理.py", line 11, in <module> # print(num+guess) # TypeError: Can‘t convert ‘int‘ object to str implicitly
这个时候我们可以对异常具体化, 就要用到try
first = input(‘请输入被除数‘) second = input(‘请输入除数‘) try: first = int(first) second = int(second) res = first/second # except ValueError as e: #e代表错误信息,把异常放入e,如果出错走except # print(e) # print(‘请输入整数‘) # except ZeroDivisionError as e: # print(e) # print(‘除数不能为0‘) except Exception as e: #捕捉任何异常 print(e) print(‘wrong‘) else:#不出错就走这里 print(‘sure‘) print(res) finally: #不管出错或者没有出错都会执行它,也不是必须写的 print(‘我是finally‘)
三、补充函数【zip,map.filter】
zip,就是把两个list,合并到一起,如果想同时循环n个list的时候,就可以用zip
eg:
# for a,b in zip(l1,l2): # print(a,b)
map 帮助循环调用函数
def my(num): return str(num) lis = [1,2,3,4,5,6,7] new_lis = [] for i in lis: new_lis.append(my(i)) #如果有map就可以不用这样写 res = map(my,lis) print(res) 运行后 <map object at 0x0000006F84D35C50> res = list(map(my,lis)) #需要强制转换为list才能看到结果 print(res)
filter 也是循环调用函数,不过是过滤,符合情况的留下,不符合的不会出现
def even(num): if num%2==0: return True return False res1 = list(map(even,lis)) #map帮助循环调用函数,函数返回什么就保存什么 运行 [False, True, False, True, False, True, False] res2 = list(filter(even,lis)) #filter只保留返回为真的数据 运行 [2, 4, 6] print(res1) print(res2)
三、网络编程 requests pip install requests
get 请求
def choujiang(userid,sign): url = ‘http://api.xxxxx.cn/api/product/choice‘ data = {} #请求数据 data[‘userid‘] =userid data[‘sign‘] = sign req =requests.get(url,params=data) #发请求 # print(req.json())#type:dic return req.json()
req.json() 类型是dict
req.text 类型是string
post请求
url = ‘http://api.xxxxx.cn/api/user/login‘ data = {} data[‘username‘]=username data[‘passwd‘] = pwd req = requests.post(url,data) # print(req.json()) try: s = req.json()[‘login_info‘][‘sign‘] #获取到sign的值 uId = req.json()[‘login_info‘][‘userId‘] # print(s) # print(uId) return s, uId except Exception as e: print(e)
3.添加cookie
添加cookie url = ‘http://api.xxxxx.cn/api/user/gold_add‘ data = {‘stu_id‘:468,‘gold‘:50} cookie = {‘niuhanyang‘:‘337ca4cc825302b3a8791ac7f9dc4bc6‘} req = requests.post(url,data,cookies =cookie) print(req.json())
4.添加header
添加header url = ‘http://api.xxxxx.cn/api/user/all_stu‘ header = { ‘Referer‘:‘http://api.xxx.cn/‘ } req = requests.get(url,headers = header) print(req.json())
5.上传文件
上传文件 url = ‘http://api.nnzhp.cn/api/file/file_upload‘ data = { ‘file‘:open(r‘C:\Users\Litsoft\Desktop\listitem.png‘,‘rb‘) # ‘file‘:open(‘note‘,encoding=‘utf-8‘) #文件中有中文要加encoding,如果是图片用‘rb } req = requests.post(url,files = data) print(req.json())
6.下载文件
下载文件 # url = ‘http://www.nnzhp.cn/wp-content/uploads/2018/01/soup.jpg‘ # url = ‘http://www.nnzhp.cn/archives/630‘ url = ‘http://up.mcyt.net/?down/46779.mp3‘ req = requests.get(url) # print(req.content) #图片是二进制,所以用content # fw = open(‘s.jpg‘,‘wb‘) #关于图片,rb是读,wb是写 # fw = open(‘py.html‘,‘wb‘) #关于html,rb是读,wb是写 fw = open(‘a.mp3‘,‘wb‘) #关于mp3,rb是读,wb是写 fw.write(req.content)
标签:back ror for style 文件 分享 ascii src 登录
原文地址:https://www.cnblogs.com/bzdfxx/p/9052402.html