Django实现用户的登录和注册
基于rest_framework实现用户注册和登录:
用序列化实现:
pip install djangorestframework
INSTALLED_APPS = [
...
'rest_framework',
]
Model:
from django.db import models
class User(models.Model):
username = models.CharField(max_length=32, unique=True)
password = models.CharField(max_length=32)
创建序列化:
在目录下创建serializer.py >
from rest_framework import serializers
from users.models import User
class UserSerilizer(serializers.ModelSerializer):
class Meta:
model = User
fields = ["id", "username", "password"]
View:
import uuid
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from users.models import User
from users.serializer import Userserilizer
class UserView(APIView):
def post(self, request, *args, **kwargs):
action = request.data.get("action")
if action == "register":
return self.register(request)
elif action == "login":
return self.login(request)
else:
return self.error(request)
def register(self, request):
username = request.data.get("username")
password = request.data.get("password")
data = {
"username": username,
"password": password,
}
serilizer = UserSerilizer(data=data)
if not serilizer.is_valid():
data = {
"msg": "用户已存在",
"status": status.HTTP_400_BAD_REQUEST,
"error": serilizer.errors,
}
return Response(data=data)
serilizer.save()
data = {
"msg": "用户创建成功",
"status": status.HTTP_200_OK,
}
return Response(data=data)
def login(self, request):
username = request.data.get("username")
password = request.data.get("password")
# filter: 获取满足条件的数据
users = User.objects.filter(username=username)
if not users.exists():
data = {
"msg": "用户名不存在",
"status": status.HTTP_400_BAD_REQUEST,
}
return Response(data)
# 将第一个用户取出
user = users.first()
if user.password != password:
data = {
"msg": "密码不正确",
"status": status.HTTP_400_BAD_REQUEST,
}
return Response(data)
# 生成会话技术token,便于识别用户个人信息
token = uuid.uuid4().hex
# 将数据序列化,用于显示信息
serializer = UserSerilizer(user)
data = {
"msg": "登录成功",
"status": status.HTTP_200_OK,
"token": token,
"data": serializer.data
}
return Response(data)
def error(self, request):
data = {
"msg": "请提供正确的action",
"status": status.HTTP_400_BAD_REQUEST
}
return Response(data=data)
路由注册:
主路由 urls:
urlpatterns=[
path('admin/', admin.site.urls),
path('users/', include("users.url")),
]
用户名下创建子路由 url.py
from django.urls import path
from users import views
urlpatterns = [
path("user/", views.UserView.as_view()),
]