使用Django Rest Framework设计与实现用户注册API

这篇具有很好参考价值的文章主要介绍了使用Django Rest Framework设计与实现用户注册API。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用Django Rest Framework设计与实现用户注册API

在现代Web应用开发中,RESTful API已成为前后端分离架构中的关键组件。Django Rest Framework (DRF) 是一款基于Django的优秀库,提供了丰富的工具和接口,极大地简化了RESTful API的设计与实现。本文将以用户注册功能为例,展示如何运用DRF构建一个完整的API端点,包括数据验证、模型操作、序列化处理以及路由配置等环节。

一、项目结构与依赖

首先,确保你的Django项目已安装Django Rest Framework:

pip install djangorestframework

接下来,在项目的api应用下创建以下文件:

  • views.py: 存放视图类。
  • models.py: 定义用户模型。
  • serializers.py: 实现序列化器类。
  • urls.py: 配置URL路由。

二、定义用户模型(models.py)

models.py中,我们创建一个名为UserInfos的模型来存储用户信息:

from django.db import models

class UserInfos(models.Model):
    username = models.CharField(max_length=32, verbose_name="用户名", db_index=True)
    email = models.EmailField(max_length=254, verbose_name="邮箱")
    password = models.CharField(max_length=64, verbose_name="密码")
    token = models.CharField(max_length=64, verbose_name="token", null=True, blank=True, db_index=True)

此模型包含四个字段:username(用户名)、email(邮箱)、password(密码)和token(用于身份验证的令牌)。每个字段都指定了相应的数据类型、长度限制及元信息,如是否创建索引。

三、设计序列化器(serializers.py)

序列化器负责将请求数据转化为可被模型接受的格式,并将模型对象转化为响应数据。在serializers.py中,我们创建RegisterSerializers继承自serializers.ModelSerializer

from rest_framework import serializers
from .models import UserInfos

class RegisterSerializers(serializers.ModelSerializer):
    confirm_password = serializers.CharField(write_only=True)

    class Meta:
        model = UserInfos
        fields = ['id', 'username', 'email', 'password', 'confirm_password']
        extra_kwargs = {
            'id': {'read_only': True},
            'password': {
                'write_only': True,
                'style': {'input_type': 'password'}
            }
        }

    def validate_password(self, value):
        md5_hash = md5(value)  # 注意:此处使用MD5加密并不安全,实际应用中应使用更强的密码哈希算法
        return md5_hash

    def validate_confirm_password(self, value):
        password = self.initial_data.get('password')
        if password and password != value:
            raise serializers.ValidationError('两次输入的密码不一致')
        return value

RegisterSerializers中:

  • confirm_password字段标记为write_only=True,表示只在注册时接收确认密码,不在响应中返回。
  • Meta类内定义了关联的模型、需要序列化的字段及额外属性。id字段设为只读,password字段同样为只写且在前端表现为密码输入框。
  • 自定义validate_password方法对密码进行MD5哈希处理(注:实际应用中应使用更安全的密码哈希算法如bcrypt或Argon2)。
  • validate_confirm_password方法验证确认密码与原始密码的一致性。

四、实现注册视图(views.py)

views.py中,我们使用APIView作为基础类,创建UserRegister视图处理用户注册请求:

from rest_framework.views import APIView
from rest_framework.response import Response
from .models import UserInfos
from .serializers import RegisterSerializers

class UserRegister(APIView):
    def post(self, request):
        ser = RegisterSerializers(data=request.data)

        if not ser.is_valid():
            return Response({"status": status.HTTP_400_BAD_REQUEST, "message": "用户注册失败", "details": ser.errors})

        email = ser.validated_data['email']
        if UserInfos.objects.filter(email=email).exists():
            ser._errors['email'] = ['该邮箱已存在,请使用其他邮箱进行注册']
            return Response({"status": status.HTTP_400_BAD_REQUEST, "message": "用户注册失败", "details": ser.errors})

        ser.validated_data.pop('confirm_password')  # 移除确认密码,因为模型中不需要此字段
        ser.save()  # 保存用户信息到数据库

        return Response({"status": status.HTTP_201_CREATED, 'message': '用户注册成功', "details": ser.data})

此视图处理POST请求,主要步骤如下:

  1. 创建RegisterSerializers实例并传入请求数据。
  2. 使用is_valid()方法进行数据验证,若验证失败则返回400状态码及错误详情。
  3. 检查邮箱是否已存在于数据库中,如果存在,则添加错误信息至序列化器并返回400状态码及错误详情。
  4. 若邮箱未重复,移除确认密码字段,保存用户信息至数据库。
  5. 注册成功后,返回201状态码、成功消息及新创建用户的详细信息。

五、配置URL路由(urls.py)

最后,在urls.py中设置路由,将UserRegister视图与特定URL关联:

from django.urls import path, include
from .views import UserRegister

urlpatterns = [
    path("user/register/", UserRegister.as_view(), name="user_register"),
]

至此,我们已经完成了用户注册API的设计与实现。当客户端向/user/register/发送POST请求,携带符合要求的JSON数据时,服务器将处理该请求,完成用户注册逻辑,并返回相应的HTTP响应。

总结来说,利用Django Rest Framework构建用户注册API涉及模型定义、序列化器设计、视图编写及URL路由配置等多个环节。DRF提供的强大工具集简化了这些过程,使得开发者能够高效地创建出结构清晰、易于维护的RESTful API。在实际应用中,还可以进一步扩展此API,例如添加身份验证、密码重置等功能,以满足更多业务需求。文章来源地址https://www.toymoban.com/news/detail-857675.html

到了这里,关于使用Django Rest Framework设计与实现用户注册API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我们使用的是GraphQL, 虽然GraphQL的使用处于上升趋势,但是Rest API还是使用的更广泛一些. 所以还是决定回到传统的rest api framework上来, Django rest framework的官网上给了一个很好用的QuickStart, 我参考Quick Start将前面的Blog的例子用DRF(Django Rest Framework)重新构筑一遍

    2023年04月19日
    浏览(31)
  • Django实现用户注册登录,表单提交后跳转网页(学习笔记)

    效果图如下:   使用命令提示符,进入想存放项目的目录: 在项目coco目录下新建static文件夹,用于存放网页文件的css,js,imgs 在coco_app目录下新建文件夹templates,用于存放需要用到的HTML网页 打开coco文件夹中的settings.py注册coco_app 引用templates 连接数据库,这里我用的MySQL数据

    2023年04月11日
    浏览(68)
  • django REST framework-使用与不使用的区别?

    首先,来回顾一下传统的基于模板引擎的 django 开发工作流: 绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。 编写视图函数的逻辑。视图中通常涉及数据库的操作。 在视图中渲染 HTML 模板,返回 HTTP 响应。 其次,基于 django-rest-framework 的 RESTf

    2024年02月07日
    浏览(39)
  • Django REST Framework完整教程-认证与权限-JWT的使用

    阅读本文之前,请读者先阅读: https://plugin.blog.csdn.net/article/details/133853377,如果已经知晓Django REST Framework的基础,可以继续阅读本文内容。 认证(Authentication)与权限(Permission)不是一回事。认证是通过用户提供的用户ID/密码组合或者Token来验证用户的身份。权限(Permission)的校验

    2024年02月07日
    浏览(31)
  • Python Django的学生选课管理系统,实现多用户登录注册,可选课可评课

    学生选课管理系统是一个基于Python Django开发的教务管理系统,旨在提供方便快捷的选课服务和学籍管理功能。该系统分为教师端和学生端两个角色,为教师和学生提供了不同的功能和权限。 教师端功能: 教师可以登录系统后,进行课程管理、成绩录入和学生管理等操作。具

    2024年01月24日
    浏览(38)
  • Django使用DRF + Simple JWT 完成小程序使用自定义用户的注册、登录和认证

    在已经配置好djangorestframework-simplejwt的前提下进行 小程序用户模型类 这里的模型类并未继承django自带的用户模型类,好处是后面小程序用户也是没法进行admin端的,缺点是可能会对django自带的权限管理有影响,如果只有小程序端的用户的话没问题,但是如果还有其它用户的话

    2024年02月10日
    浏览(34)
  • Django用户注册和用户配置扩展

    本篇是在完成用户登录登出,密码修改功能后,扩展用户注册功能。 关于用户登录、注销、更改密码和重置密码。请查看 Django身份验证初试-CSDN博客 Django登录注销视图-CSDN博客 Django密码修改和重置视图-CSDN博客 创建一个表单,让用户输入用户名、真实姓名和密码。 编辑位于

    2024年01月17日
    浏览(35)
  • Django进阶:DRF(Django REST framework)

    DRF 即 Django REST framework 的缩写,官网上说: Django REST framework 是一个强大而灵活的工具包,用于 构建Web API 。 简单来说:通过DRF创建API后,就可以通过HTTP请求来获取、创建、更新或删除数据(CRUD)。 那么为什么要构建API呢? 在Django中,我们通过 model-view-template 实现了 后端和前

    2024年02月11日
    浏览(27)
  • Django实战项目-学习任务系统-用户注册

    接着上期代码框架,开发第2个功能,用户注册,在原有用户模型基础上,增加一个学生用户属性表,用来关联学生用户的各种属性值,这个属性表是参考网络小说里系统属性值设计的,方便直观了解用户的能力高低,等级以及积分值等信息。 第一步:编写第二个功能-用户注

    2024年02月07日
    浏览(33)
  • 深入探索 Django Rest Framework

    这篇文章会详细介绍Django REST Framework的核心组成部分,包括Serializers、ViewSets、Routers、权限和认证系统以及测试和调试工具。文章从基础开始,逐步深入,旨在帮助读者掌握使用Django REST Framework构建复杂API的技能。 Django REST框架,通常简称为DRF,是一个强大而灵活的Web API工具

    2024年02月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包