Python对接口的撰写
针对Python注册衔接Mysql的相关语言
一、在Pycharm中打开Mysql(连接)
1、基本语言
1 | app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@localhost:3308/star' |
2、实例化SQLAlchemy
1 | # 创建 SQLAlchemy 实例 |
SQLAlchemy需要引入
1 | from flask_sqlalchemy import SQLAlchemy |
从而实现实例化
二、自创表mysql表单
1、app.app_context( ) [ 上下文 ]
1 | with app.app_context() |
在运行程序时进行,优先于访问接口
2、查询相关表格存在与否
1 | result = db.session.execute(text("SHOW TABLES LIKE 'todo'")) |
fetchone函数返回的是一个元组,如果元组为空,表示不存在相关表格,返回值为null
对于db.session:
1 | db.session.excute(text(" ")) |
即在数据库中输入的语言 需要SQL语言
对于类似db的数据库语言,还有以下几种:
创建表格
1 | db.create_all() |
更新表格
1 | db.session.commit |
添加内容
1 | db.session.add_all([]) |
MySQL的初始化
1 | import pymysql |
不适用初始化语言将面临报错!
Flask 分页
1.1 request.args.get( )
1 | from flask import request |
1.2 分页实现
1 | from flask import FLask |
模糊匹配
SQLalchemy特别匹配:
模糊查找关键词
1 | from SQLAlchemy import text |
Python sqlalchemy ORM
1.ORM的初始化
1.1 base基类的创建
1 | from sqlalchemy.ext.declarative import declarative_base |
base的基类创建有利于sqlalchemy orm的功能实现,与SQLAlchemy()不相同,SQLAlchemy只能实现简单的数据库对接 而declarative可以实现数据表的映射
1.2 模型类编写(面向对象)
1 | from sqlalchemy import Column, Integer, String |
导入需要的库,sqlalchemy.orm用于relationship的映射,ext.declarative用于基类创建的实例化
1 | base = declarative_base() |
双token(双令牌验证)
1、JWT验证(JSON Web Token)
1.1 basemodel基类创建(pydantic)
在实现用户登录的双token中,常会采用pydantic里的basemodel模型,在fastapi中定义数据类型tokendata中,通过jwt令牌,将数据 填充到tokendata,包含用户名的信息(便于验证输入的数据)
1 | from pydantic import BaseModel |
至此已完成了对于user关于basemodel的定义 使用jwt方时,可以将其数据填充到user里
- 这里的basemodel用于其他模型中,作为认证令牌
JWT验证搭建用户认证令牌是很好的处理
1.2 算法和密钥
1 | #定义密钥 |
HS256:适用于对称加密,密钥用于加密和解密。适合于单个服务(如前后端分离应用)内部使用,不适合跨服务传递
1.3 OAuth2PasswordBearer( Flask.security库 )
1 | from fastapi.security import OAuth2PasswordBearer |
OAuth有一种使用OAuth2_scheme = OAuthPassworfBearer( tokenurl = “ /newtoken “ )
密码授权模式,便于增加用户访问的安全性
在 FastAPI 中,oauth2_scheme
是一个用于处理 OAuth2 密码模式的安全方案。它的主要作用是定义一个依赖项,用于在请求中获取访问令牌,并将该令牌传递给需要认证的路由处理函数。
虽然 Depends(oauth2_scheme)
返回的是访问令牌字符串,但在 get_current_user
函数中,你可以将这个字符串作为 JWT 字符串来解码,并获取其中的信息。这样,你就可以通过 JWT 字符串来验证用户的身份,并进行相应的操作。
1.4 JWT的正式使用
定义类和函数
1 | class Tokendata(Basemodel): |
jwt.decode
函数的 options
参数用于指定一些额外的选项,以控制 JWT 解码的行为。options
参数是一个字典,可以包含以下选项:
verify_signature
(默认为 True): 指定是否验证 JWT 的签名。如果为 False,则不会验证签名,这在调试或特殊情况下可能会用到。verify_exp
(默认为 True): 指定是否验证 JWT 的过期时间(exp
声明)。如果为 True,则会验证过期时间,过期的 JWT 将被拒绝。verify_nbf
(默认为 True): 指定是否验证 JWT 的生效时间(nbf
声明)。如果为 True,则会验证生效时间,尚未生效的 JWT 将被拒绝。verify_iat
(默认为 False): 指定是否验证 JWT 的签发时间(iat
声明)。如果为 True,则会验证签发时间。verify_aud
(默认为 False): 指定是否验证 JWT 的受众(aud
声明)。如果为 True,则会验证受众。require
(默认为 None): 指定要求 JWT 包含的声明。可以指定一个字典,其中的键为声明名,值为要求的值。如果 JWT 不包含指定的声明或值不匹配,则会引发异常。leeway
(默认为 0): 指定允许的时间偏差(以秒为单位),用于处理时间戳的差异或时钟偏移。如果需要考虑时钟不同步等情况,可以设置一个较大的值。algorithms
(默认为 None): 指定允许的签名算法列表。如果指定了算法列表,则只会验证这些算法对应的签名。