#views.py
from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from rest_framework.views import APIView
from rest_framework.request import Request
from rest_framework.authentication import BasicAuthentication
from . import models
def md5(user):
'''生成md5随机字符串'''
import hashlib
import time
ctime=str(time.time())
m=hashlib.md5(bytes(user,encoding='utf-8'))
m.update(bytes(ctime,encoding='utf-8'))
return m.hexdigest()
ORDER_DICT={
1:{
'name':'狗头',
'age':'18',
'sex':'男',
'content':'.....'
},
2:{
'name':'毛毛',
'age':'99',
'sex':'女',
'content':'.....'
},
}
def index(request):
return HttpResponse('ok')
class AuthView(APIView):
'''
用于用户登录认证
'''
def post(self,request,*args,**kwargs):
ret={'code':1000,'msg':None}
try:
user=request._request.POST.get('username')
pwd=request._request.POST.get('password')
obj=models.UserInfo.objects.filter(username=user,password=pwd).first()
if obj:
ret['code']=1001
ret['msg']='登录成功'
# 创建token表
token=md5(user)
print(token)
# 创建或更新token
models.UserToken.objects.update_or_create(user=obj,defaults={'token':token})
ret['token']=token
else:
ret['code']=1004
ret['msg']='账号或密码错误'
except Exception as e:
ret['code'] = 1002
ret['msg'] = '请求异常'
return JsonResponse(ret)
class Authication(object):
'''自定义认证需要两步,第一步先写一个类,第二步在需要认证的地方应用上类就可以实现认证'''
# 主要认证逻辑
def authenticate(self,request):
from rest_framework import exceptions
token=request._request.GET.get('token')
token_obj=models.UserToken.objects.filter(token=token).first()
if not token_obj:
raise exceptions.AuthenticationFailed('用户认证失败')
return (token_obj.user,token_obj)
# 必写这个函数,
def authenticate_header(self,request):
pass
class OrderView(APIView):
# 自定义认证
# 自定义认证类添加进来即可实现认证
authentication_classes = [Authication]
def get(self,request,*args,**kwargs):
# request.user
# request.auth
ret = {'code': 1000, 'msg': None, 'data': None}
# token=request._request.GET.get('token')
# if not token:
# return JsonResponse({'code':1003,'msg':'用户未登录'})
try:
ret['data']=ORDER_DICT
except Exception as e:
pass
return JsonResponse(ret)
class UserInfoView(APIView):
authentication_classes = [Authication]
def get(self,request):
return HttpResponse('用户信息')
#urls.py