首页 > 其他分享 >京西商城——用户注册和获取用户信息接口开发

京西商城——用户注册和获取用户信息接口开发

时间:2024-04-01 19:30:28浏览次数:19  
标签:用户注册 models True 接口 user 京西 password data md5

user/views.py
from django.http import HttpResponse
from rest_framework.views import APIView

from apps.user.models import User
from apps.user.serializers import UserSerializer
from utils.ResponseMessage import UserResponse

class UserView(APIView):
    def post(self, request, *args, **kwargs):
        # 反序列化
        data = request.data
        user_ser = UserSerializer(data=data)
        # print(type(user_ser))  # 'apps.user.serializers.UserSerializer'
        if user_ser.is_valid(raise_exception=True):
            user = user_ser.save()
            # print(type(user))  # 'apps.user.models.User'
            # 序列化
            user_json_data = UserSerializer(instance=user)
            # print(user_json_data) # {'user_id': 41, 'gender_text': '男', 'name': '叫我DPT', 'email': '[email protected]', 'mobile': '13191273507', 'create_time': '2024-04-01T03:23:21.037525Z'}
            return UserResponse.success(user_json_data.data)
        else:
            return HttpResponse(user_ser.errors)

    def get(self, request, *args, **kwargs):
        email = request.GET.get('email')
        user = User.objects.get(email=email)
        user_json_data = UserSerializer(instance=user)
        return UserResponse.success(user_json_data.data)
user/serializers.py
from django.core.validators import EmailValidator
from rest_framework import serializers
from apps.user.models import User
from utils.password_encode import get_md5


class UserSerializer(serializers.ModelSerializer):
    gender_display = serializers.CharField(source='get_gender_display', read_only=True)

    class Meta():
        model = User
        fields = "__all__"
        extra_kwargs = {
            'name': {'required': True, 'max_length': 8, 'min_length': 2},
            'email': {'required': True, 'validators': [EmailValidator(message='邮箱格式错误')]},
            'gender': {'required': True, 'write_only': True},
            'mobile': {'required': True},
            'password': {'required': True, 'write_only': True, 'min_length': 6, 'max_length': 60},
        }

    def to_representation(self, instance):
        representation = super(UserSerializer, self).to_representation(instance)
        print(instance.get_gender_display())
        representation['gender_display'] = instance.get_gender_display()
        return representation

    def validate_mobile(self, value):
        if len(value) != 11:
            raise serializers.ValidationError('手机号输入错误')
        else:
            return value

    def create(self, validated_data):
        # print(validated_data)  # {'name': '叫我DPT', 'gender': 1, 'email': '[email protected]', 'mobile': '13191273507', 'password': '123456'}
        if 'password' in validated_data:
            validated_data['password'] = get_md5(validated_data['password'])  # md5加密
        result = User.objects.create(**validated_data)
        return result
utils/password_encode.py
import hashlib

def get_md5(password):
    # 确保password是字符串类型
    if not isinstance(password, str):
        password = str(password)
    # 创建一个md5对象
    md5 = hashlib.md5()
    # 提供要加密的字符串,md5的输入必须是字节类型,所以需要将字符串编码成字节
    md5.update(password.encode('utf-8'))
    # 获取加密后的16进制字符串
    password_md5 = md5.hexdigest()
    return password_md5
user/models.py
from django.db import models

class User(models.Model):
    user_id = models.AutoField(primary_key=True, unique=True, verbose_name="用户ID")
    name = models.CharField(max_length=255, unique=True, null=False, verbose_name='用户名')
    gender = models.CharField(max_length=255, null=False, choices=[(1, "男"), (0, "女")], verbose_name='用户性别')
    email = models.EmailField(max_length=255, unique=True, null=False, verbose_name='用户邮箱')
    mobile = models.CharField(max_length=11, unique=True, null=False, verbose_name='用户手机号码')
    password = models.CharField(max_length=60, null=False, verbose_name='用户密码')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='用户注册时间')

    def get_gender_display(self):
        if self.gender == '1':
            return '男'
        else:
            return '女'

    class Meta:
        db_table = 'user'

若有错误与不足请指出,关注DPT一起进步吧!!!

标签:用户注册,models,True,接口,user,京西,password,data,md5
From: https://blog.csdn.net/m0_66925868/article/details/137243983

相关文章

  • php获取淘宝详情api接口
    要获取淘宝商品的详情信息,你可以使用淘宝开放平台的接口。具体步骤如下:在淘宝开放平台(https://open.taobao.com)注册开发者账号。创建一个应用,获取appkey和appsecret。使用API中的taobao.item.get接口,传入商品ID以及appkey,即可获取商品的详情信息。示例代码如下(使用淘宝......
  • 身份证实名认证接口会返回什么?javascript身份核验接口示例
    身份证实名认证接口是通过核验身份证号、姓名、证件头像等一系列的要素信息进行用户身份验证,那么,身份证实名认证接口一般在核验完成后会返回什么参数信息呢?下面翔云API小编为大家答疑解惑!一般情况下,身份核验只会返回一致或者不一致的结果,不一致的情况下会返回那些参数不一致,以翔......
  • 为什么以太网的接收需要cmd fifo而ddr3的native接口可以不需要?
    1.以太网存在crc校验和其他的校验,直到这一帧完全传递完才知道是否需要这些数据;2.ddr3每次处理的数据是固定的(安全起见,防止4k边界问题,暂不设置可变burstlength),所以只需要:写入:通过fifo的计数设置满足burst长度时读出fifo写入ddr3,然后根据突发的周期标志修改cmd提供的地址即可......
  • 通过企业微信API接口发送消息(通过postman或者企业微信开发者中心《服务端API调试工具
    如何创建一个与企业后台互动的自建应用添加自建应用登录企业微信管理后台->应用管理->自建下创建应用,填写必要的logo,应用名称,在可见范围中选择部门/成员获取应用的相关信息agentid和secret;应用里创建完毕可出现在选择了可见范围的成员的企业微信终端上。使用Postman调试api......
  • 0day卡号极团管理系统某接口存在SQL注入漏洞
     0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用......
  • 内部类——成员内部类、静态内部类、接口内部类、局部内部类、匿名内部类
    //外部类publicclassOutter{ //1、成员内部类 classA{} //2、静态内部类 staticclassB{} publicvoidmethod(){ //3、局部内部类 classC{} }}publicinterfaceI1{ //4、接口内部类 classD{}}1)成员内部类知识点:成员内部类特点:1.创建成......
  • GeminiDB Cassandra接口新特性FLASHBACK发布:任意时间点秒级闪回
    本文分享自华为云社区《GeminiDBCassandra接口新特性FLASHBACK发布:任意时间点秒级闪回》,作者:GaussDB数据库。技术背景数据库作为现代信息系统的核心组成部分,承担着存储、管理和检索大量数据的重要任务。然而,在实际的业务运行过程中,由于各种原因,数据库可能会出现异常或者故......
  • 【前端面试3+1】07vue2和vue3的区别、vue3响应原理及为什么使用proxy、vue的生命周期
    一、vue2和vue3的区别1.性能优化:        Vue3在性能方面有很大的提升,主要是通过虚拟DOM的优化和响应式系统的改进实现的。虚拟DOM重构:Vue3中对虚拟DOM进行了重构,使得更新算法更加高效,减少了更新时的开销,提升了性能。静态树提升:Vue3可以通过静态树提升技术......
  • 在Go语言中如何避免接口污染
            在设计和构造代码时,接口是Go语言的基石之一。然而,就像许多工具或概念一样,滥用它们通常不是一个好主意。接口污染就是用不必要的抽象使我们的代码变得难以理解。这是来自另一种编程语言具有不同习惯的开发人员经常犯的错误。在深入讨论这个话题之前,让我们重新思......
  • python(django)之单一接口管理功能后台开发
    1、创建数据模型在apitest/models.py下加入以下代码classApis(models.Model):Product=models.ForeignKey('product.Product',on_delete=models.CASCADE,null=True)#关联产品IDapiname=models.CharField('接口名称',max_length=100)apiurl=mod......