flask传送post参数和token

原创 2016年08月29日 17:20:57

flask传送post参数和token

  1. server端代码
    gen_token(uid): 使用base64 进行编码,存储在users中,添加在list列表”123456”字符串后面
    vertify_token(token):将传进来的token进行base64的解码,解码后如果users.get(_token.split(‘:’)[0])[-1] == token获取users中的token与参数进行比对,如果不相等,返回-1.如果一致再进行token时间的比对后返回1,否则返回0
    login():登录函数。将headers传过来的参数users 进行拆分,拆分后解码分别赋值uid,pw, 判断uid对应的password与pw是否相同,相同则将token存储在users中
    test():解密后的token与当前参数token比对,验证token是否正确后返回data
import base64
import random
import time
from flask import Flask, request
import json

app = Flask(__name__)

users = {
    "magigo":["123456"]
}

def gen_token(uid):
    token = base64.b64encode(':'.join([str(uid), str(random.random()), str(time.time() + 7200)]))
    users[uid].append(token)
    return token

def vertify_token(token):
    _token = base64.b64decode(token)
    #print "_token:"+_token
    if not users.get(_token.split(':')[0])[-1] == token:
        print "users_token:" +users.get(_token.split(':')[0])[-1]
        print "users" + json.dumps(users)

        return -1
    if float(_token.split(':')[-1]) >= time.time():
        return 1
    else:
        return 0


@app.route('/index', methods=['POST','GET'])
def index():
    print request.headers
    return 'Hello'

@app.route('/login', methods=['POST','GET'])
def login():
    print request.headers
    uid, pw = base64.b64decode(request.headers['Authorization'].split(' ')[-1]).split(':')
    if users.get(uid)[0] == pw:
        return gen_token(uid)
    else:
        return 'error'

@app.route('/test', methods=['POST','GET'])
def test():
    token = request.args.get('token')
    #print "token:" +token
    if vertify_token(token) == 1:
        return 'data'
    else:
        print vertify_token(token)
        return 'error'


if __name__ == '__main__':
    app.run(debug=True)

app.run()函数中添加host参数后,可以外部访问192.168.0.88地址

client端代码如下:


import requests

#**第一段**获取token,将token加密后通过headers存储到users中
#r = requests.get('http://127.0.0.1:5000/login', auth=('magigo', '123456'))
#print r.text

#**第二段**验证token,获取token后,验证当前token与存储值是否相同。每次获取新的token都不同,#所以token值都不同
token ="bWFnaWdvOjAuNjMxNDU2NDIyNjMyOjE0NzI0NTA1MDAuMzQ="
r= requests.get('http://127.0.0.1:5000/test', params={'token':token})
print r.text

2.执行第一段代码,第二段代码进行注释,获取token,同时token也会添加到users中。
3.执行第二段代码,注释第一段代码时,需要更换token值,此时会返回token是否成功标识,若token成功则返回data,否则返回error

4.遇到的问题
4.1 哈哈,非常低级的问题,要先执行server.py开启服务后,再执行client.py才会有返回结果,如果提示有错误,先用浏览器打开,看能否get到信息
4.2 Authorization KeyError. 是因为headers中没有对应的字段。但是当时为什么会提示这个问题至今不懂,,俩个不同的环境,家里的操作环境提示KeyError,公司的办公环境就可以正确执行,所以应该是系统配置哪里出了问题
4.3 执行client.py的验证token后不能正确返回data值。如果有错可以一步一步打印信息查看每一步的返回值,当时返回error是因为没有先执行login函数,token未添加到users中,打印出日志便可以定位错误。

再接再厉

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Flask教程笔记-CSRF token保护验证

Flask教程笔记-CSRF token保护验证#! coding=utf8 from flask import Flask, render_template from flask_sqlalchem...
  • pyphrb
  • pyphrb
  • 2016年07月21日 13:40
  • 2150

【Flask】前端RSA加密后端Python解密示例

这一篇文章是前端用 RSA 的 publicKey 进行加密,然后后端用 Python 进行解密的示例。...

flask笔记:14:获取所有post或者get请求参数

目录结构: app |----static(空) |----templates(空) |----flaskapp.py flaskapp.py: # -*- coding: utf-8 -*- #...

flask 处理post方法遇到的一个问题

最近通过flask编写一个web程序,在通过requests模块对restful接口进行测试时,遇到了一个问题,在这里记录下。关键词: post提交方式1.问题描述 通过requests进行post...
  • fcxjluo
  • fcxjluo
  • 2017年01月08日 23:11
  • 747

Python base64模块详解

Python base64模块是用来作base64编码解码的。 最简单的加解密实例: import base64 str1 = 'djhui' str2 = base64.b64enc...

Flask之处理客户端通过POST方法传送的数据

作为一种HTTP请求方法,POST用于向指定的资源提交要被处理的数据。我们在某网站注册用户、写文章等时候,需要将数据保存在服务器中,这是一般使用POST方法。 本文使用Python的reques...

flask获取post数据

客户端发送的是   content={json}类型的shu

Faster RCNN代码理解(Python) ---训练过程

最近开始学习深度学习,看了下Faster RCNN的代码,在学习的过程中也查阅了很多其他人写的博客,得到了很大的帮助,所以也打算把自己一些粗浅的理解记录下来,一是记录下自己的菜鸟学习之路,方便自己过后...

flask接收post请求

最近接到一个任务: 写一个server来接收数据,请求方式为post,传输方式为https最终选定python轻量级框架flask 安装:sudo pip install Flask关于flask...

okhttp post提交参数完成登录功能 保存返回的token

作为一名android开发者,通过博客记录自己成长的道路,以下是小白在开发实践中的登录功能实现的一些步骤及功能,希望对做这一部分功能的伙伴有一定的帮助 1.登录的界面布局 2.登录的url、sp保...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:flask传送post参数和token
举报原因:
原因补充:

(最多只允许输入30个字)