编程学习网 > 数据库 > django框架开发小程序如何处理认证问题(django框架实战开发小程序)
2022
09-17

django框架开发小程序如何处理认证问题(django框架实战开发小程序)


在使用django框架开发小程序时,会遇到一些认证问题,比如微信小程序不支持账户名、密码登录,也不支持session登录,故采用Django作为后台时,一种可行的方法就是使用JWT登录。

本文采用的是Simple JWT来实现


安装

pip install djangorestframework-simplejwt

配置项目settings

在restful_framework的配置:

# settings.py

'DEFAULT_AUTHENTICATION_CLASSES': (
       'rest_framework_simplejwt.authentication.JWTAuthentication',
       'rest_framework.authentication.TokenAuthentication',
       'rest_framework.authentication.BasicAuthentication',
       'rest_framework.authentication.SessionAuthentication',
  )

主要是加上rest_framework_simplejwt.authentication.JWTAuthentication

这样django会自动检查是否带有token。

配置UR

配置好url,在我的项目里是用来测试JWT能否正常登录用的,官方文档里有如下方法

# urls.py
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView, TokenVerifyView

urlpatterns = [
      ...
       path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
       path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
       path('token/verify/', TokenVerifyView.as_view(), name='token_verify'),
]
进行测试的代码如下(也可以用来展示用法):



def test_get_token(self):
   url = '/web-api/token/'

   response = self.client.post(url, user_info, format='json')
   self.assertEqual(response.status_code, status.HTTP_200_OK)

   content = json.loads(response.content)
   self.assertIn('access', content)
   self.assertIn('refresh', content)
   
def test_authorization(self):
   auth_url = '/web-api/token/'
   response = self.client.post(auth_url, user_info, format='json')
   access_token = json.loads(response.content)['access']

   verification_url = '/web-api/recite/'

   client = APIClient()
   client.credentials(HTTP_AUTHORIZATION=f'Bearer {access_token}')
   response = client.get(verification_url)

   content = json.loads(response.content)
   self.assertEqual(content['code'], status.HTTP_200_OK)

在接口中实现登录(返回Token)

先定义一个JWTTokenObtainPairSerializer,继承自TokenObtainPairSerializer,实现get_token方法

# serializers.py
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer

class JWTTokenObtainPairSerializer(TokenObtainPairSerializer):

   @classmethod
   def get_token(cls, user):
       token = super(JWTTokenObtainPairSerializer, cls).get_token(user)
       token['username'] = 'wx_{0}'.format(user.username)
       return token
在小程序登录的接口添加如下代码即可将token返回



# viewset.py
user = update_or_create_wx_user(openid, user_info)  # noqa
token = JWTTokenObtainPairSerializer.get_token(user).access_token
serializer = self.get_serializer(user)

result = {
   'userInfo': serializer.data,
   'token': str(token),
}
res = {
   'code': 200,
   'result': result,
}

return Response(res)

小程序端获取到token后,塞入header即可实现账号的登录认证。Django会根据token自动获取user。

以上就是“django框架开发小程序如何处理认证问题(django框架实战开发小程序)”的详细内容,想要了解更多django框架内容欢迎持续关注编程学习


扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取