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-Login实现token验证和超时失效使用体会

使用Flask-Login实现token验证和超时失效
  • chenchong_88
  • chenchong_88
  • 2017年09月17日 20:56
  • 853

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

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

Flask Python以二进制六存储图片数据库并读取

一般都会存储路径,担忧少数的要求存储图片到数据库。下面的例子介绍了如何在Flask项目里存储图片到数据库以二进制流的方式。并从数据库读取 app\models.py class D...
  • ying847782627
  • ying847782627
  • 2016年05月13日 11:25
  • 1921

Python flask post接口

from flask import Flask,render_template,request app = Flask(__name__) @app.route("/login",methods = ...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2017年11月13日 10:05
  • 128

web接口Flask测试之GET与POST请求

关于HTTP协议,我考虑了一下觉得没必要再花一节内容来介绍,因为网上关于HTTP协议的介绍非常详细。本着以尽量避免介绍一空洞了概念与理论来介绍接口测试,我这里仍然会给出具体实例。   在此之前先简单的...
  • qq_20711445
  • qq_20711445
  • 2016年06月13日 16:05
  • 7005

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

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

Flask在不同页面间传递参数

在flask开发中经常遇到要在不同页面间传递消息的情况,对于这种问题,我自己认为使用url_for()和将url的一部分标记为变量的方法是比较有效的下面通过例子说明# coding:utf-8from...
  • u013042248
  • u013042248
  • 2017年07月06日 22:41
  • 1247

requests/flask框架中参数的传递

#post_data.py # -*- coding: utf8 -*- import requests content = "helloworld" postdic = { "ToUse...
  • wanghuafengc
  • wanghuafengc
  • 2013年12月13日 10:40
  • 2979

flask接受jquery ajax传递过来的参数

I have been working with similar functionality and after a bit of messing around with the ajax and p...
  • yuan882696yan
  • yuan882696yan
  • 2015年07月23日 17:49
  • 7282

CSRF Token介绍与应对策略

原文地址:点击打开链接 最近模拟登陆,发现CsrfToken是个很麻烦的问题,所以看了一下CsrfToken的一些介绍。发现这篇文章写得很不错,所以转载过来。 CSRF 背景与介绍 CS...
  • lion19930924
  • lion19930924
  • 2016年03月22日 14:46
  • 9723
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:flask传送post参数和token
举报原因:
原因补充:

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