标签:elf 前缀 The ash 用户信息 base ade render gap
# jwt载荷中的有效期设置
JWT_AUTH = {
# 1.token前缀:headers中 Authorization 值的前缀
‘JWT_AUTH_HEADER_PREFIX‘: ‘JWT‘,
# 2.token有效期:一天有效
‘JWT_EXPIRATION_DELTA‘: datetime.timedelta(days=1),
# 3.刷新token:允许使用旧的token换新token
‘JWT_ALLOW_REFRESH‘: True,
# 4.token有效期:token在24小时内过期, 可续期token
‘JWT_REFRESH_EXPIRATION_DELTA‘: datetime.timedelta(hours=24),
# 5.自定义JWT载荷信息:自定义返回格式,需要手工创建
‘JWT_RESPONSE_PAYLOAD_HANDLER‘: ‘user.utils.jwt_response_payload_handler‘,
}
# -*- coding: utf-8 -*-
def jwt_response_payload_handler(token, user=None, request=None, role=None):
"""
自定义jwt认证成功返回数据
:token 返回的jwt
:user 当前登录的用户信息[对象]
:request 当前本次客户端提交过来的数据
:role 角色
"""
if user.first_name:
name = user.first_name
else:
name = user.username
return {
‘authenticated‘: ‘true‘,
‘id‘: user.id,
"role": role,
‘name‘: name,
‘username‘: user.username,
‘email‘: user.email,
‘token‘: token,
}
import datetime
import random
from django.contrib.auth.hashers import make_password
from django.shortcuts import render
# Create your views here.
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.views import APIView
from user.models import User
from user.serializers import UserSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
class RegisterView(APIView):
def post(self, request):
username = request.data.get(‘username‘)
password = request.data.get(‘password‘)
password_new = request.data.get(‘password_new‘)
if not all([username, password, password_new]):
return Response(
{‘msg‘: ‘信息不全‘, ‘code‘: 400}
)
if password != password_new:
return Response(
{‘code‘: 400, ‘msg‘:‘两次登录密码不一致‘}
)
user_serializer = UserSerializer(data=request.data)
if user_serializer.is_valid():
user_serializer.save()
user_info = User.objects.filter(username=username).first()
return Response(
{‘msg‘: ‘注册成功‘, ‘code‘: 200, ‘token‘: user_info.token}
)
return Response(
{‘msg‘: ‘注册失败‘, ‘error‘: user_serializer.errors }
)
# -*- coding: utf-8 -*-
from rest_framework import serializers
from rest_framework_jwt.serializers import jwt_payload_handler
from rest_framework_jwt.settings import api_settings
from user.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ‘__all__‘
def create(self, data):
username = data.get(‘username‘, ‘‘)
password = data.get(‘password‘, ‘‘)
mobile = data.get(‘mobile‘, ‘‘)
email = data.get(‘email‘, ‘‘)
user = User(username=username, email=email, mobile=mobile)
user.set_password(password)
user.save()
# 补充生成记录登录状态的token
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
print(token)
user.token = token
user.save()
return user
# -*- coding: utf-8 -*-
from django.urls import path
from rest_framework.routers import DefaultRouter
from rest_framework_jwt.views import obtain_jwt_token
from user import views
router = DefaultRouter()
router.register(r‘user‘, views.UserViewSet)
urlpatterns = [
path(‘login/‘, obtain_jwt_token),
path(‘register/‘, views.RegisterView.as_view()),
]
urlpatterns += router.urls
# -*- coding: utf-8 -*-
#重写注册接口
class RegApiView(APIView):
def post(self,request):
uname = request.data.get(‘uname‘)
password = request.data.get(‘password‘)
# email = request.data.get(‘email‘)
if all([uname,password]):
pass
else:
return Response({‘参数没填完‘})
rand_name = self.randomUsername()
print(rand_name)
user = User(username=rand_name,uname=uname)
user.password = make_password(password)
user.save()
return Response({‘去看看库里成功没有‘})
def randomUsername(self):
"""
生成随机用户名: 格式: SYL + 年月日时分 + 5位随机数
:return:
"""
d = datetime.datetime.now()
base = ‘SYL‘
time_str = ‘%04d%02d%02d%02d%02d‘ % (d.year, d.month, d.day, d.hour,d.minute)
rand_num = str(random.randint(10000, 99999))
return base + time_str + rand_num
标签:elf 前缀 The ash 用户信息 base ade render gap
原文地址:https://www.cnblogs.com/lzhpython/p/14253486.html