1 接口文档
| |
| -做后端,写接口 |
| -前端做前端,根据接口写app,pc,小程序 |
| |
| -作为后端来讲,很清楚,比如登录接口 /api/v1/login/---->post---->username,password 编码方式json----》返回的格式 {code:100,msg:登录成功} |
| |
| 后端人员,接口写完,一定要写接口文档 |
| |
| -1 使用word,md 编写接口文档 |
| -2 使用第三方平台,编写我们的接口文档(非常多)---》收费 |
| -https://www.showdoc.com.cn/item/index |
| -3 公司自己使用第三方开源的搭建的---》Yapi ---》你如果想自己搭建 |
| -https://zhuanlan.zhihu.com/p/366025001 |
| |
| -4 使用drf编写的接口,可以自动生成接口文档 |
| -swagger---》drf-yasg---》官方推荐使用 |
| -coreapi----》咱们讲 |
| |
| - 1 安装 |
| - 2 配置路由 |
| from rest_framework.documentation import include_docs_urls |
| path('docs/', include_docs_urls(title='xx项目接口文档')), |
| -3 在视图类,方法上,写注释即可 |
| -在类上加注释 |
| -在类的方法上加注释 |
| -在序列化类或表模型的字段上加 help_text,required。。。。 |
| -4 配置文件配置 |
| REST_FRAMEWORK = { |
| 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', |
| |
| } |
| -5 访问地址:http://127.0.0.1:8000/docs |
| |
| -描述 |
| -地址 |
| -请求方式 |
| -请求编码格式 |
| -请求数据详解(必填,类型) |
| -返回格式案例 |
| -返回数据字段解释 |
| -错误码 |
2 jwt介绍和原理
| |
| |
| |
| eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ |
| - 头:header |
| 声明类型,这里是jwt |
| 声明加密的算法 通常直接使用 HMAC SHA256 |
| 公司信息。。。 |
| -荷载:payload |
| -存放有效信息的地方 |
| -过期时间 |
| -签发时间 |
| -用户id |
| -用户名字。。。 |
| -签名:signature |
| -第一部分和第二部分通过秘钥+加密方式得到的 |
| |
| -登录接口---->签发token |
| -认证类-----》jwt认证 |
| |
| import base64 |
| import json |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| res=base64.b64decode('TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ=') |
| print(res) |
| |
| |
| |
| |
| ''' |
| 1 jwt 使用了base64 |
| 2 网络中传输数据,也会经常使用 base64编码 |
| 3 网络传输中,有的图片使用base64编码 |
| |
| ''' |
| s='' |
| res=base64.b64decode(s) |
| with open('a.png','wb') as f: |
| f.write(res) |

3 drf-jwt快速使用
| |
| -djangorestframework-jwt ---》一直可以用 |
| -djangorestframework-simplejwt---》公司用的多---》希望你们试一下 |
| -自己封装jwt签发和认证 |
| |
| - 1 安装 pip install rest_framework_jwt |
| - 2 快速签发token---》登录接口,路由中配置 |
| from rest_framework_jwt.views import obtain_jwt_token |
| path('login/', obtain_jwt_token), |
| -3 postman,向http://127.0.0.1:8000/login/发送post请求,携带username和password |
| |
| -1安装pip install djangorestframework-simplejwt |
| -2配置simplejwt |
| 'DEFAULT_AUTHENTICATION_CLASSES': [ |
| 'rest_framework_simplejwt.authentication.JWTAuthentication', |
| 'rest_framework.authentication.SessionAuthentication', |
| 'rest_framework.authentication.BasicAuthentication' |
| ], |
| 'DEFAULT_PERMISSION_CLASSES': [ |
| 'rest_framework.permissions.IsAuthenticated', |
| ] |
| SIMPLE_JWT={ |
| |
| 'ACCESS_TOKEN_LIFETIME':datetime.timedelta(minutes=30), |
| |
| 'REFRESH_TOKEN_LIFETIME':datetime.timedelta(days=1), |
| } |
| -3编写路由 |
| from rest_framework_simplejwt.views import TokenObtainPairView,TokenRefreshView,TokenVerifyView |
| |
| path('login/',TokenObtainPairView.as_view()), |
| path('login/refresh/',TokenRefreshView.as_view()), |
| path('login/verify/',TokenVerifyView.as_view()), |
| 返回值 |
| {"refresh":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY3NjAxOTMxNCwiaWF0IjoxNjc1OTMyOTE0LCJqdGkiOiJlMDAyZWU1OTU5ZmU0ZDFjYTlkNTcwNGQ4N2Q3MmUwYiIsInVzZXJfaWQiOjF9.uMecWtCw-Ako2tFr7lABwlvaOqazEH2ExlenKgFN-38","access":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjc1OTM0NzE0LCJpYXQiOjE2NzU5MzI5MTQsImp0aSI6Ijc3MmIzODdhMDU1NTRiZGJhOWY4MTg3MjE5M2JjM2IyIiwidXNlcl9pZCI6MX0.TV8OkJuXM1yYJWPbGX1lLVYdCiyjN0RX47JYIAM-m1g"} |
| |
| |
| |
| |
| 运行项目并查看效果 |
| 浏览器打开http://127.0.0.1:8000/应该就能看到URL提示了,下面进入刚刚配置的url查看一下效果 |
| 获取Token |
| 进入 http://127.0.0.1:8000/api/token/, 一切正常的话应该会看到DRF提供的页面,提示GET方法不被允许,并且下面有用户名和密码的输入框。 |
| 在输入库中输入刚刚创建的用户信息就能得到系统返回的信息了。返回的信息包括refresh和access两个字段。其中refresh是用于刷新token的(每个Token都是有时间限制的,过了时间就生效了),access是用于后续的请求时验证身份的。 |
| 验证Token |
| 进入http://127.0.0.1:8000/api/token/verify/, 下面提示输入Token, 输入刚刚过去到的access的值,验证成功。注意,验证成功没有提示信息反悔,只有一个200的响应码 |
| 如果验证失败,则响应码为401,且下方有提示信息 |
| 刷新Token |
| 进入 http://127.0.0.1:8000/api/refresh/,下面提示填写refresh,在里面填写上面获取到的refresh值,如果填写的正确,则会获取到新的Token,否则会提示验证失败 |
| Postman请求方式 |
| 上面的操作都是在DRF提供的页面里面进行的,实际使用的时候都是Ajax请求,下面讲解使用Postman进行请求的方法,以获取Token和自定义的视图 |
| 获取Token |
| 在Postman中正常填写请求信息即可, 获取Token、刷新Token和验证Token都是直接填写即可 |
| 自定义的视图 |
| 上面的三个Token相关的接口是插件提供的,内部已经做了配置,免身份认证,但是我们自己的接口是需要做身份校验的。我们先创建一个自定义的视图,然后在路由中注册。为了便于演示,这里直接在urls.py中创建视图,之后,我们完整的urls.py文件如下 |
| 这里为了省事将视图写在了urls.py里面,实际开发请单独建立views.py,保持良好的代码风格 |
| 此时,我们使用Postman执行GET请求访问自定义接口为得到提示信息, 这就是在提示我们需要传递Token给后台认证了 |
| simplejwt的身份认证方式为:在请求的Headers里面里面添加设置参数,名称为:Authorization, 值是一个固定组成的字符串: Bearer +空格 + access, 例如:Bearer [token值]。 正确的效果如下 |



4 定制返回格式
| |
| |
| 1 写个函数:jwt_response_payload_handler |
| def jwt_response_payload_handler(token, user=None, request=None): |
| return { |
| 'code': 100, |
| 'msg': '登录成功', |
| 'token': token, |
| 'username': user.username |
| |
| } |
| 2 配置一下 ,项目配置文件 |
| JWT_AUTH = { |
| 'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.utils.jwt_response_payload_handler', |
| } |
| 3 使用postman测试,就能看到返回的格式了 |
5 jwt的认证类
| |
| 1 在视图类上加一个认证类,一个权限类class BookView(ViewSetMixin, RetrieveAPIView): |
| from rest_framework_jwt.authentication import JSONWebTokenAuthentication |
| from rest_framework.permissions import IsAuthenticated |
| authentication_classes = [JSONWebTokenAuthentication] |
| permission_classes = [IsAuthenticated] |
| 2 postman测试 |
| -请求头中key值叫Authorization |
| -请求头的value值是: jwt 有效的token值 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律