Django drf使用Django自带的用户系统的注册功能

下面我将为您详细讲解Django DRF如何使用Django自带的用户系统进行注册:

1. 前置条件

在使用Django DRF进行用户注册之前,我们需要确保以下条件已经满足:

  1. 安装了Django DRF;
  2. 配置了Django自带的用户系统;
  3. 配置了Django的URL路由;
  4. 配置了Django的视图View。

2. 配置Django DRF

首先,我们需要在settings.py文件中添加DRF相关的设置:

INSTALLED_APPS = [
    # ...
    'rest_framework',
    # ...
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

以上代码中,我们添加了rest_framework应用,以便使用DRF;并设置了默认的认证方式为Token,权限为验证用户是否已认证。

3. 编写用户注册的序列化器

在Django DRF中,我们使用序列化器Serializer来对数据进行序列化和反序列化,因此我们需要编写一个用户注册的序列化器。在serializers.py中添加以下代码:

from django.contrib.auth.models import User
from rest_framework import serializers


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        return user

以上代码中,我们导入了Django自带的用户模型User,并使用serializers.ModelSerializer来定义了一个用户注册的序列化器UserSerializer。

Meta内部类中,我们定义了需要序列化的字段,包括'username', 'email', 'password'等,并定义了extra_kwargs,将密码设为只写。

create方法中,我们使用User.objects.create_user方法创建了一个新用户并返回用户对象。

4. 定义用户注册的API视图

在Django DRF中,我们使用API视图来处理HTTP请求。因此,我们需要定义一个用户注册的API视图。在views.py中添加以下代码:

from django.contrib.auth.models import User
from rest_framework import generics
from rest_framework.response import Response
from rest_framework.permissions import AllowAny
from .serializers import UserSerializer


class UserCreateView(generics.CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [AllowAny]

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response({'status': 'success', 'message': 'User created successfully'})

以上代码中,我们定义了一个继承于generics.CreateAPIView的视图UserCreateView,这意味着这个视图能够处理POST请求,用于新建用户。

我们设置了queryset,定义了选择所有User对象。

设置了serializer_class为我们自定义的UserSerializer,定义了序列化器。

设置了permission_classes,定义了访问权限。

接着,我们又定义了post方法,重载了视图自带的post方法。在方法中,我们使用serializer.save()方法保存用户数据,并返回一个创建成功的响应。

5. 配置API路由

我们需要配置API路由来将视图和URL绑定。在urls.py文件中添加以下代码:

from django.urls import path
from .views import UserCreateView


urlpatterns = [
    path('register/', UserCreateView.as_view(), name='user-register'),
]

以上代码中,我们定义了一个路由,使用UserCreateView视图处理路径为/register/的请求。

6. 使用Postman测试

最后,我们需要使用Postman来测试我们的API。在Postman中,发送一个POST请求到http://localhost:8000/register/,传递JSON数据包括username、email、password等字段,即可完成用户注册。

下面是示例代码:

{
    "username": "testuser",
    "email": "testuser@example.com",
    "password": "testpassword"
}

完成以上步骤后,我们就能够使用Django DRF来注册新用户了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django drf使用Django自带的用户系统的注册功能 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • python框架django中结合vue进行前后端分离

    使用Python框架Django和JavaScript框架Vue结合进行前后端分离,能够提高开发效率,优化代码结构和分工。下面是一个详细的攻略,分为两个示例说明。 示例一:前后端分离项目创建 1. 创建Django项目 使用Django的脚手架 django-admin 可以快速创建一个Django项目,命令如下: django-admin startpro…

    Django 2023年5月16日
    00
  • Django 1.8 admin 产生’WSGIRequest’ object has no attribute ‘user’的错误

        配置admin时,产生’WSGIRequest’ object has no attribute ‘user’的错误   google了下,说是MIDDLEWARE配置的有问题,顺序应该保持参见(http://stackoverflow.com/questions/26576192/wsgirequest-object-has-no-attribut…

    Django 2023年4月15日
    00
  • Web框架django[Form]组件

    新手上路 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1、创建Form类 # 创建一个类 from django import forms from django.forms import fields class DiyForm(form…

    Django 2023年4月13日
    00
  • django中将views.py中的python方法传递给html模板文件

    常规的模板渲染 from django.db import models # Create your models here. class ArticalType(models.Model): caption = models.CharField(max_length=16) class Category(models.Model): caption = m…

    Django 2023年4月12日
    00
  • Django使用联合主键

    今天闲着没事,突然想起一个以前遇到的一个小问题。一直忘了来验证自己的解决方案,所以今天特意来查询了些资料来验证下自己的想法。整理如下:   单张表内建立联合主键: class IotTemp(models.Model): mac = models.CharField(max_length=64, blank=False) temperature = mode…

    Django 2023年4月15日
    00
  • Django结合Websocket进行WebSSH的实现

    什么是webssh?   泛指一种技术可以在网页上实现一个 终端。从而无需 之类的模拟终端工具进行 连接,将 这一比较低层的操作也从 架构扭成了 架构 这样的架构常用在运维制作开发一些堡垒机等系统中,或是目前比较新型的在线教育方式,通过向学生提供一个可以直接使用浏览器进行相关 操作或代码编写的学习方式 主要是建立客户端与服务端的即时通信 模型 此种 实现方式…

    Django 2023年4月13日
    00
  • Python、 Pycharm、Django安装详细教程(图文)

    我来为您讲解“Python、Pycharm、Django安装详细教程(图文)”的完整攻略。 1. Python安装 1.1 下载Python安装包 访问Python官网,根据你的操作系统选择合适的Python版本,比如我选用的是Python3.9.7版本。 1.2 安装Python 下载好Python安装包后,点击安装程序,按照提示完成Python安装过程,…

    Django 2023年5月16日
    00
  • 【D02】Bootstrap免费精选模板推荐,附上Django中使用模板教程

    前端模板 – Anchor UI KIT 前言 今天介绍一款制作精良、开源、免费的 Bootstrap 模板 —— Anchor UI KIT 该模板使用的是Bootstrap v4版本 本文将介绍如何在Django中导入该模板的静态资源包并使用 介绍 官方文档 Anchor – a free Bootstrap UI Kit (bootcss.com) 预…

    Django 2023年4月14日
    00
合作推广
合作推广
分享本页
返回顶部