栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

测试平台开发:(12)Django登录功能

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

测试平台开发:(12)Django登录功能

上一篇:测试平台开发:(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博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767181.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号