后端开发 python+flask+requests简单实现token生成

23 篇文章 0 订阅
5 篇文章 0 订阅

1、打开pycharm添加项目FlaskRestFulApi

新建两个py文件:app.py 和 request.py

2、修改app.py文件

添加必要的代码:

from flask import Flask
app = Flask(__name__)

@app.route('/', methods=['get'])
def hello_flask():
        return 'hello flask!'

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

右键运行项目并访问: http://127.0.0.1:5000/ 

信息返回正确。

3、开始修改app.py中代码:

3.1、添加测试数据所需用户信息数据:

#测试用户信息
user = {'phone':'18888888888',
        'pwd':'123456',
        'token':'',
        'age':18,
        }


3.2、添加生成token的方法:

#生成token(传入)
def get_token(phone):
    #根据用户手机、随机数、时间2小时过期 生成token
    token = base64.b64encode((":".join([str(phone), str(random.random()), str(time.time()+7200)])).encode()).decode()
    user['token']=token #生成token后赋值给用户
    print("生成的token:", user['token'])
    return token



3.3、添加验证token的方法:

#验证token
def verify_token(token):
    if token!=user['token']:
        #token无效
        return -1
    _token = base64.b64decode(token)
    _token = _token.decode()
    timestr = _token.split(":")[2]#过期时间
    if float(timestr) > time.time():#判断传入的token中时间时候大于当前时间,是则在有效期内
        #token已过期
        return 1
    else:
        #token已过期
        return 0

3.4、添加请求获取token的方法: 

#通过账号密码获取token
@app.route('/login', methods=['POST', 'GET'])
def login():
    if request.method == 'POST':
        phone = request.form['phone']#获取手机号参数
        pwd = request.form['pwd']  # 获取手机号参数
        #验证用户账号密码是否正确
        if user['phone']!=phone or user['pwd']!=pwd:
            return '账号或密码错误'
        #生成token并返回
        token = get_token(phone)
        user['token']=token
        return token
    return '请求无效'

3.5、添加通过token获取用户年龄的方法: 

#通过token获取用户年龄
@app.route('/getusermsg', methods=['POST'])
def getusermsg():
    token = request.form['token']
    print(user['token'])
    print(verify_token(token))
    if verify_token(token)!=1:
        return 'token无效或已过期'
    else:
        return '你的年龄为:%s'%str(user['age'])

3.6、添加入口代码:

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

4、开始修改request.py中代码:(本文件用于模拟用户的请求)

import requests


#测试请求模拟登陆(生成token)
r = requests.post('http://127.0.0.1:5000/login', {'phone':'18888888888','pwd':'123456'})
print(r.text)


#通过token获取用户信息(年龄)
r2 = requests.post('http://127.0.0.1:5000/getusermsg', {'token':r.text})
print(r2.text)

5、测试

5.1、先在app.py运行项目:

5.2、在request.py运行项目进行测试:

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是基于Python实现的示例代码: 1. 设计Web页面 我们可以使用Flask框架来设计Web页面,代码如下: ```python from flask import Flask, render_template, request import requests app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': text = request.form.get('text') url = 'https://aip.baidubce.com/rest/2.0/image-generations/v1/generate' headers = {'Content-Type': 'application/json'} params = {'access_token': 'your_access_token'} data = {'text': text, 'type': 'anime'} response = requests.post(url, headers=headers, params=params, json=data) result = response.json() img_url = result['data']['url'] return render_template('index.html', img_url=img_url) else: return render_template('index.html') if __name__ == '__main__': app.run(debug=True) ``` 在上述代码中,我们通过Flask框架来实现Web页面的设计。在页面中,我们使用了一个表单,用户可以通过表单输入图片的文本描述。在用户提交表单后,我们通过百度API生成相应的图片,并将生成的图片结果传递给前台页面进行展示。 2. 编写服务器端代码 服务器端代码需要通过API来实现图片的生成。我们可以使用requests库来发送HTTP请求,并获取API的返回结果。代码如下: ```python import requests url = 'https://aip.baidubce.com/rest/2.0/image-generations/v1/generate' headers = {'Content-Type': 'application/json'} params = {'access_token': 'your_access_token'} data = {'text': 'your_text', 'type': 'anime'} response = requests.post(url, headers=headers, params=params, json=data) result = response.json() img_url = result['data']['url'] ``` 在上述代码中,我们通过requests库来发送POST请求,将文本描述和图片类型传递给API。API会返回生成的图片结果,我们可以从API返回结果中获取图片的URL。 3. 集成百度API 为了使用百度API,我们需要在百度AI开放平台上创建一个应用,并获取相应的API Key和Secret Key。在获取API Key和Secret Key之后,我们需要使用官方提供的Python SDK来实现API的调用。代码如下: ```python from aip import AipImageCensor APP_ID = 'your_app_id' API_KEY = 'your_api_key' SECRET_KEY = 'your_secret_key' client = AipImageCensor(APP_ID, API_KEY, SECRET_KEY) result = client.image_censor_user_defined(image, options) ``` 在上述代码中,我们使用了百度官方提供的Python SDK来实现API的调用。我们需要将图片数据和相应的参数传递给API,并从API返回结果中获取生成的图片。 4. 设计数据库 为了保存生成的图片结果,我们需要设计一个数据库,并在服务器端代码中实现数据库的访问。我们可以使用SQLAlchemy库来实现数据库的操作。代码如下: ```python from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db' db = SQLAlchemy(app) class Image(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100)) url = db.Column(db.String(200)) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': text = request.form.get('text') url = 'https://aip.baidubce.com/rest/2.0/image-generations/v1/generate' headers = {'Content-Type': 'application/json'} params = {'access_token': 'your_access_token'} data = {'text': text, 'type': 'anime'} response = requests.post(url, headers=headers, params=params, json=data) result = response.json() img_url = result['data']['url'] image = Image(name=text, url=img_url) db.session.add(image) db.session.commit() return render_template('index.html', img_url=img_url) else: return render_template('index.html') ``` 在上述代码中,我们使用了Flask框架和SQLAlchemy库来实现数据库的操作。我们定义了一个Image模型,用于保存图片的相关信息。在用户提交表单后,我们将生成的图片URL和文本描述保存到数据库中。 5. 实现前端展示 在服务器端代码中,我们需要将生成的图片结果传递给前台页面,并在页面中展示生成的图片。代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图片生成器</title> </head> <body> <form method="POST"> <input type="text" name="text"> <button type="submit">生成图片</button> </form> {% if img_url %} <img src="{{ img_url }}"> {% endif %} </body> </html> ``` 在上述代码中,我们使用了Jinja2模板引擎来实现页面的渲染。在页面中,我们使用了一个表单,用户可以通过表单输入图片的文本描述。在用户提交表单后,我们通过百度API生成相应的图片,并将生成的图片结果传递给前台页面进行展示。 综上所述,这是一个基于Python实现的图片生成程序。用户可以通过Web页面提交图片的文本描述,程序会调用百度API生成相应的图片,并将生成的图片结果保存到数据库中,同时在前台页面中显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值