上一篇:测试平台开发:(11)Django跨域和时区问题_sinat_23377479的博客-CSDN博客
实现了注册功能,开始登录功能。同样,输入正确的用户名和密码即可登录成功。
1)使用Django 自带一个用户认证系统,在TPlatform.settings.py新增:
rest_framework.authtoken
2)打开终端,输入python3 manage.py migrate 迁移认证相关的表
3)刷新数据库,找到token表,改下key的长度,不然默认值太短,写入会报错
开始写登录的代码:
4)在group.views.py新增代码:
from django.contrib.auth.hashers import make_password,check_password
from rest_framework import status
from rest_framework.views import APIView
import re
from group.models import users
from rest_framework.response import Response
from rest_framework.authtoken.models import Token
# 引入下面单独写的生成token模块
from TPlatform.token_moduel import get_token
import time
# 增加用户登录的代码
class Login(APIView):
def post(self, request):
username = request.data.get('username')
password = request.data.get('password')
if username and password:
if users.objects.filter(username=username): # 查询数据库检查用户名是否存在
users_result = users.objects.get(username=username)
password_result = check_password(password, users_result.password) # 校验输入的密码是否正确
if password_result:
token = get_token(username, 6000) # 生成用户的token值,并设置token有效期
if Token.objects.filter(user_id=users_result.id): # 用户验证成功后更新数据库的token,首次登录则创建token
now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
Token.objects.filter(user_id=users_result.id).update(key=token, created=now_time)
response = {'username': username, 'token': token}
result = {"status": "200", "data": response}
return Response(result, status=status.HTTP_200_OK)
else:
Token.objects.create(key=token, user_id=users_result.id)
response = {'username': username, 'token': token}
result = {"status": "200", "data": response}
return Response(result, status=status.HTTP_200_OK)
else:
result = {"status": "500", "data": {'msg': '账号或密码不正确'}}
return Response(result, status=status.HTTP_200_OK)
else:
result = {"status": "500", "data": {'msg': '用户不存在'}}
return Response(result, status=status.HTTP_200_OK)
else:
result = {"status": "500", "data": {'msg': '账号或密码不能为空'}}
return Response(result, status=status.HTTP_200_OK)
5)新建token_moduel.py文件,单独写生成touken的功能
import time
import base64
import hmac
# 生成token
def get_token(key, expire=3600):
ts_str = str(time.time() + expire)
ts_byte = ts_str.encode("utf-8")
sha1_tshexstr = hmac.new(key.encode("utf-8"), ts_byte, 'sha1').hexdigest()
token = ts_str + ':' + sha1_tshexstr
b64_token = base64.urlsafe_b64encode(token.encode("utf-8"))
return b64_token.decode("utf-8")
6)group.urls.py新增代码
from django.urls import path
from group import views
urlpatterns = [
path(r'register', views.Register.as_view()),
path(r'login',views.Login.as_view()),
]
打开postman请求:
下一篇:测试平台开发:(13)前端登录功能_sinat_23377479的博客-CSDN博客



