当前位置:网站首页>User - registration / login
User - registration / login
2022-07-19 05:04:00 【du fei】
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
边栏推荐
猜你喜欢

Topicexchange switch is simple to use.

PyGame installation -requirement already satisfied

Cve-2017-12635 CouchDB vertical privilege bypass vulnerability recurrence

Getting started with harmonios

Freshman task-5

Simple use of directexchange switches.

Shallow chat link tracking

elment-ui使用方法

itext修改pdf文字

SQL statement learning
随机推荐
Redis installation
Harmonyos second training notes
ThinkPHP official website tutorial
微众对接机制备忘
CVE-2021-44228 Log4j 复现及原理
Web development with fastapi
es的一些概念
Tidb performance analysis and optimization
DirectExchange交换机的简单使用。
solve [email protected] : `node install. Problems of js`
RestAPI
索引库操作基本操作
Mongo Db单机版的安装和快速使用
Database learning notes (I) retrieval data
事务的使用-django、 SQL工具
基于SSM框架的考勤签到请假系统
NoSQL概述
3.RestClient查询文档
POC——DVWA‘s File Inclusion
First training notes of moderlarts