这里用到django-rest-framework-jwt这个库,,https://github.com/GetBlimp/django-rest-framework-jwt
<强>按流程图来强>
先通过wx.login()获取代码,再通过我们后台配置的接口获取openid和session_key
//登录 wx.login ({ 成功:res=比;{ console.log (res)//发送res.code到后台换取openId, sessionKey unionId wx.request ({ url: api。GET_OPENID,//数据:{ js_code: res.code }, 成功:函数(res) { var openid=res.data.openid var session_key=res.data.session_key//获取openid, session_key//后台用户表保存 wx.request ({ url: api.USER, 方法:“文章”, 数据:{ openid: openid, session_key: session_kay }, 成功:函数(res) { 如果(res.data。状态==晒Α?{//在缓存中保存用户id和openid备用 wx.setStorage ({ 关键:“标识”, 数据:res.data.userid, }); wx.setStorage ({ 关键:“openid”, 数据:openid, }) 其他}{ wx.showModal ({ 标题:“提示”, showCancel:假的, 内容:“获取openid失败”, }) } } }) } }) } })
在这里的用户表最好是在django自带的用户表上进行字段拓展,不然重写起来会很麻烦,拓展方法如下
从django.contrib.auth。模型导入AbstractUser #创建您的模型。 类用户(AbstractUser): ”“” 用户新增字段 ”“” name=模型。null=True CharField (max_length=30日,空白=True, verbose_name=靶彰? >之前下面是django的用户默认字段,需要保存用户头像,用户省市等字段只要在原有基础上新增即可
<强>生成第三届强>
先在后台配置jwt
安装<代码> pip安装djangorestframework-jwt 代码>
在你的设置。py,添加JSONWebTokenAuthentication到Django其他框架DEFAULT_AUTHENTICATION_CLASSES。
REST_FRAMEWORK={ “DEFAULT_PERMISSION_CLASSES”:( “rest_framework.permissions.IsAuthenticated”, ), “DEFAULT_AUTHENTICATION_CLASSES”:( “rest_framework_jwt.authentication。JSONWebTokenAuthentication”, # & lt; - - - - - - - “rest_framework.authentication.SessionAuthentication”, “rest_framework.authentication.BasicAuthentication”, ), } # JWT设置过期时间,具体配置查看文档 JWT_AUTH={ “JWT_VERIFY_EXPIRATION”:假的 } #在您urls . py添加以URL下路由以启用通过帖子获取令牌包括用户的用户名和密码。 从rest_framework_jwt。视图导入obtain_jwt_token #... urlpattern=[ ”, #…… url (r ' ^ api-token-auth/', obtain_jwt_token), )通过帖子用户的用户名和密码获取令牌
wx.request ({ url: api.api-token-auth,//url配置 方法:“文章”, 数据:{ “用户名”:openid,//这里我是用openid当作用户名 “密码”:session_key//用session_key当作密码 }, 成功:函数(jwt) {//jwt格式:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InhpZWhhbyIsImV4cCI6MTUzNTM3ODQ2OCwiZW1haWwiOiIzNDg2OTg1ODhAcXEuY29tIn0.8rXFK_K2q8474LxYrCuuNJT93PkZMzi1JX6fVproXrE//前面是base64后面是签的名,用。隔开//将jwt_token放入缓存备用 var jwt_token=jwt.data.token wx。setStorageSync (jwt_token, jwt_token) self.globalData。jwt_token=jwt_token } }) >之前后端配置时需要加上authentication_classes进行认证
从rest_framework。权限导入IsAuthenticated 从rest_framework_jwt。身份验证导入JSONWebTokenAuthentication #商品表 类goodsViewSet (viewsets.ModelViewSet): queryset=Goods.objects.all () serializer_class=goodsSerializers filter_class=GoodsFilter filter_backends=(DjangoFilterBackend filters.SearchFilter) search_fields=(“名字”,) #认证配置 permission_classes=(IsAuthenticated,) authentication_classes=(JSONWebTokenAuthentication,)微信小程序python用户认证的实现