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()),
]
posted @ 2020-10-19 11:25  Morpheus1024  阅读(484)  评论(0)    收藏  举报