首页 > 其他分享 >学城项目后端接口搭建2

学城项目后端接口搭建2

时间:2023-07-03 22:45:26浏览次数:35  
标签:code get self 接口 attrs msg data 学城 搭建

1. 手机验证码注册接口 

/1  短信注册的序列化类

class UserRegisterSerializer(serializers.ModelSerializer):
code = serializers.CharField(max_length=4, min_length=4,write_only=True)
class Meta:
model = User
fields = ['mobile', 'password', 'code'] # code 不是数据库的字段,需要重写

def _check_code(self,attrs):
mobile = attrs.get('mobile')
code = attrs.get('code')
old_code = cache.get('send_sms_code_%s' % mobile)
if not (code == old_code or (settings.DEBUG and code == '8888')): # debug没有设置为True
raise APIException('验证码错误')

def _pre_save(self,attrs): # {mobile:123,code:321,password:123}
attrs.pop('code')
attrs['username'] = attrs.get('mobile') # 默认用户名就是手机号

# 限制密码强度,使用局部钩子
def validate(self,attrs):
# 逻辑部分
# 1.校验验证码是否正确
self._check_code(attrs)
# 2.入库前准备--->code不是数据库字段,无法在库中写出,username是必填的我们需要给一个默认的
self._pre_save(attrs)
return attrs

# 重写create方法
def create(self, validated_data): # {mobile:123,password:123,username:123}
# 重写create的原因是因为原来的密码是加密的 需要加密
user = User.objects.create_user(**validated_data)
return user

/2  视图类中接口的创建

# 判断选择哪个序列化类
def get_serializer_class(self):
if self.action == 'sms_login':
return LoginUserSMSSerializer
elif self.action == 'sms_register' or self.action == 'create':
return UserRegisterSerializer
else:
return self.serializer_class
有两种不同的方法
# 验证码的注册功能
# 1 自己写版本 访问地址:127.0.0.1:8000/api/v1/user/userinfo/register/
@action(methods=['POST'], detail=False)
def sms_register(self,request,*args,**kwargs):
ser = self.get_serializer(data=request.data)
ser.is_valid(raise_exception=True) # 执行三大校验
ser.save()
return APIResponse(msg='注册成功')
# 2 继承视图扩展类CreateModelMixin的版本 访问地址:127.0.0.1:8000/api/v1/user/userinfo
此方法需要导入from rest_framework.mixins import CreateModelMixin

/3  调试全局异常的报错模式

让报错更详细

if isinstance(res.data,dict):
msg=res.data.get('detail',None) # 取不到 就显示not msg
if not msg:
msg = res.data
data = {'code':102,'msg':msg}
else:
data = {'code': 100, 'msg': res.data}

/4  知识点的补充

  主路由中为什么要写media

    因为django中默认是不允许前端直接访问项目的某个文件夹的(static文件夹中的除外)

    path('media/<path:path>',serve,{'document_root':settings.MEDIA_ROOT})

  配置文件中debug有什么作用

     debug让信息显示更丰富

     你访问的路由如果不存在,会把所有能访问到的路由都显示出来 

     程序出了异常,错误信息直接显示在浏览器上

     上线阶段,肯定要改成False

  allowed的作用

    只有debug 为Flase时,这个必须填

    限制后端项目(django项目 )能够部署在哪个ip的机器上

    写 *  表示所有地址都可以

标签:code,get,self,接口,attrs,msg,data,学城,搭建
From: https://www.cnblogs.com/abc683871/p/17523799.html

相关文章

  • 学城项目后端端口搭建2
    1.短信登录接口/1 创建此接口的序列化类1由于短信登录的序列化类和多方式的登录的序列化类中获取token和全局钩子的代码一致所以我们把它们放一起封装为CommonLoginSerializer#全局钩子和获取token的模块封装classCommonLoginSerializer():def......
  • jmeter 项目接口实战记录
    1. 涉及脚本机构: 1.测试计划--Add--配置元件:添加用户自定义变量:设置请求url  2.线程组下-add用户beanshell脚本,配置随机参数importorg.apache.jmeter.config.Arguments;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;impo......
  • JAVA调用ABAP RFC接口-DEMO
    packagecom.swift.oa;importcom.sap.conn.jco.*;/***@Author:Wriprin*@Date:2022/11/2517:20*@Version1.0*/publicclassGetMaraInfo{publicstaticvoidmain(String[]args)throwsJCoException{//ConfigurationofSAPconnec......
  • SpringBoot 服务接口限流
    前言在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。限流可以认为服务降级的一种,限流通过限制请求的流量以达到保护系统的目的。一般来说,系统的吞吐量是可以计算出一个阈值的,为了保证系统的稳定运行,一旦达到这个阈值,就需要限制流量并采取一些措施以完成限制流量的......
  • 网关搭建【黑马头条】
    一、导入依赖<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><group......
  • 搭建SpinalHDL环境心得(Windows)
    主要步骤是基于别人的教程文章。在这里记录一下个人遇到的问题。1、sbt.\build.sbt时的错误,很多时候是由于JDK版本问题导致的。这个问题在sbt后续版本里得到了解决,我的sbt升级到1.9.0之后就没有遇到这个问题了。2、build.sbt里的spinalVersion会更新。可以时不时去spinalHDL的......
  • 微服务网关搭建
    依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId......
  • 深入了解API接口调用——从获取淘宝商品数据开始
     API(ApplicationProgrammingInterface)是现代软件开发中常用的一种技术,它允许不同的软件系统进行交互和通信。在本文中,我们将深入探讨如何通过API接口来获取淘宝商品数据。这是一个常见的需求,无论是对于商家还是开发者,都有着重要的意义。第一部分:API接口概述在开始之前,我们首......
  • linux搭建LAMP环境
    LAMP环境指在linux系统下搭建Apache服务器+mysql+php(1)安装Apache服务及其扩展包yum-yinstallhttpdhttpd-manualmod_sslmod_perlmod_auth_mysql(2)启动Apache服务systemctlstarthttpd.service(3)安装mysql  wgethttp://dev.mysql.com/get/mysql57-community-release......
  • pgsql 搭建
    1.yum安装yuminstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpmyuminstall-ypostgresql12-server2.启动pgsql/usr/pgsql-12/bin/postgresql-12-setupinitdbsystemctlenablepostgresql-12system......