You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

77 lines
2.7 KiB

from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth.models import User
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework.permissions import IsAuthenticated
import requests
import json
# 获取用户数据
class UserData(APIView):
# 鉴权方式
permission_classes = [IsAuthenticated]
def get(self, request, format=None):
"""将当前用户的清单数据items返回"""
print('Get data: ',request.user.profile.items)
return Response({
'code': 'Get ok',
'items': request.user.profile.items['items']
})
def post(self, request, format=None):
"""将用户上传的数据更新到数据库"""
user = request.user
user.profile.items = request.data
user.save()
print('Post data: ', user.profile.items)
return Response({'code': 'Post ok'})
class WeixinLogin(APIView):
def post(self, request, format=None):
"""提供post请求"""
# 从请求中获取code
code = json.loads(request.body).get('code')
print("code: " + code);
# 填写测试号的AppID和AppSecret
appid = 'wxe35222de7aa53383'
appsecret = '424c7145423396a00c987ca0e5ea8ae9'
# 微信接口服务地址
base_url = 'https://api.weixin.qq.com/sns/jscode2session'
# 拼接参数形成完整url
url = base_url + '?appid=' + appid + '&secret=' + appsecret + '&js_code=' + code + '&grant_type=authorization_code'
response = requests.get(url)
# 获取openid和session_key
try:
openid = response.json()['openid']
session_key = response.json()['session_key'] # session_key是对用户数据进行了加密签名的密钥,不要泄露
except KeyError:
return Response({'code': 'failed'})
else:
# 打印到后端命令行
print("openid: " + openid)
print("session_key: " + session_key)
# 根据openid确定用户的本地身份
try:
user = User.objects.get(username=openid)
except User.DoesNotExist:
user = None
if user:
user = User.objects.get(username=openid)
# 如果用户不存在,则创建openid用户
else:
user = User.objects.create(
username=openid,
password=openid,
)
# 用于给用户提供临时token
refresh = RefreshToken.for_user(user)
return Response({
'code': 'success',
'refresh': str(refresh),
'access': str(refresh.access_token),
})