当前位置:网站首页>User registration login
User registration login
2022-07-27 05:38:00 【Csdn__ F】
django Write methods in the project
This is login first , If the user does not exist , Just register a user for him , After registering , Let the user login , When logging in, judge whether you have management permission
import redis
from rest_framework.views import APIView
from rest_framework.respoonse import Response
from django.contrib.auth.hashers import check_password
from datetime import datetime
from rest_framework_jwt.utils import jwt_payload_handler, jwt_encode_handler
# Login view
class LoginUserAPIView(APIView):
def post(self, request):
username = request.data.get("username")
password = request.data.get("password")
mobile = request.data.get("mobile")
sms_code = request.data.get("sms_code")
r = redis.Redis(host='127.0.0.1', port=6379)
# Determine if the user name exists
user = User.objects.filter(username=username).first()
if user:
# Determine the password
if check_password(password, user.password):
# The password is correct , Determine whether to log in as an administrator
if user.is_staff and user.is_active:
token = self.gen_token(user)
# Change login time
user.last_login = datetime.now()
user.save()
return Response({
'code': 200,
'msg': ' Login successful ',
'user': {
'id': user.id,
'name': user.username,
'token': token
}
})
else:
return Response({
'code': 206, 'msg': ' No administrator rights '})
else:
# Incorrect password , Reset password
validation = self.validate_sms_code(sms_code, mobile, r)
if validation:
# Complete SMS authentication , Start resetting the password
user.set_password(password)
user.save()
return Response({
'code': 207, 'msg': ' Password to reset '})
else:
return Response({
'code': 204, 'msg': ' Reset failed '})
else:
# Registered users
if sms_code:
# Use verification code , And register
validation = self.validate_sms_code(sms_code, mobile, r)
# Register user information
if validation:
User.objects.create_user(username=username, password=password, mobile=mobile)
return Response({
'code': 201, 'msg': ' Registered successfully , Apply for administrator rights '})
else:
return Response({
'code': 400, 'msg': ' Registration failed '})
else:
return Response({
'code': 400, 'msg': ' Please enter the verification code '})
@staticmethod
def gen_token(user):
# Generate payload Load information
payload = jwt_payload_handler(user)
# Generate token
# token = jwt_decode_handler(payload)
token = jwt_encode_handler(payload)
return token
@staticmethod
def validate_sms_code(sms_code, mobile, r):
stared_code = r.get(mobile)
if stared_code and stared_code.decode() == sms_code:
return True
else:
return False
边栏推荐
猜你喜欢
随机推荐
JS中for...of和for...in的区别
小米商城项目_注册
Day3 ---Flask 状态保持,异常处理与请求钩子
后台优惠券管理
flask一对多数据库创建,基础增删改查
原生token生成加密、解密
后台品牌管理功能实现
[codeforces round 800 D question fake plastic trees] greedy on the tree
pytorch安装新坑
Source code of document type full-text retrieval knowledge base management system
SQL(MySql)菜鸟教程知识
JS如何判断一个对象是否属于一个类
arguments
mysql 取消外键关联约束
【codeforces round#800 B. Paranoid String】DP
JS==操作符的强制类型转换规定
初识C语言——常见的数据类型
Flask框架创建项目初期总结
Redis persistence
JS中深拷贝和浅拷贝的区别









