setting.py
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework.authtoken',
'corsheaders',
'app01',
...
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ORIGIN_ALLOW_ALL=True
JWT_AUTH = {
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(hours=24),
'JWT_RESPONSE_PAYLOAD_HANDLER': 'app01.views.jwt_response_payload_handler',
}
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
urls.py
from django.urls import include, path
from rest_framework.authtoken.views import obtain_auth_token
from app01 import views
from rest_framework_jwt.views import obtain_jwt_token
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', obtain_jwt_token),
path('register/', views.RegisterView.as_view()),
path('adduser/',views.adduserList.as_view()),
path('getuserlist/', views.getuserlist.as_view()),
]
views.py
from rest_framework.permissions import AllowAny
from .models import *
from .ser import seruserlist,sergetuserList
from django.contrib.auth.backends import ModelBackend
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination
def jwt_response_payload_handler(token, user=None, request=None):
"""
自定义jwt认证成功返回数据
"""
return {
'token': token,
'user_id': user.id,
'username': user.username,
"code": 200,
"state": True
}
class RegisterView(APIView):
"""
用户注册, 权限是: 匿名用户可访问
"""
permission_classes = (AllowAny,)
def post(self, request):
"""
接收邮箱和密码, 前端校验两遍一致性, 注册成功后返回成功, 然后用户自行登录获取token
1. 随机用户名
2. 生成用户
3. 设置用户密码
4. 保存用户
:param request:
:return: {'code':0,'msg':'注册成功'}
"""
email = request.data.get('email')
passwrod = request.data.get('password')
username = request.data.get('username')
if all([email, passwrod]):
pass
else:
return Response({'code': 9999, 'msg': '参数不全'})
user = User(username=username, email=email)
user.set_password(passwrod)
user.save()
return Response({'code': 0, 'msg': '注册成功'})
class adduserList(APIView):
def post(self, request):
ser=seruserlist(data=request.data)
if ser.is_valid():
ser.save()
return Response({"msg": '成功',"code":200})
return Response(data=ser.errors,status=400)
class PageNum(PageNumberPagination):
page_size_query_param = 'page_size'
page_query_param = 'page'
class getuserlist(APIView):
def get(self, request):
queryset = userlist.objects.all()
print(request)
if request.GET.get('page'):
print(queryset)
pg = PageNum()
page_objs = pg.paginate_queryset(queryset=queryset, request=request, view=self)
ser = sergetuserList(instance=page_objs, many=True)
return Response(ser.data)
ser = sergetuserList(instance=queryset, many=True)
return Response(ser.data)