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

学城项目后端端口搭建2

时间:2023-07-03 22:33:43浏览次数:30  
标签:code get self 端口 token user 序列化 学城 搭建

1. 短信登录接口

/1  创建此接口的序列化类

  1 由于短信登录的序列化类和多方式的登录的序列化类中获取token和全局钩子的代码一致

  所以我们把它们放一起封装为CommonLoginSerializer

# 全局钩子和获取token的模块封装
  class CommonLoginSerializer():

    def _get_token(self, user):
      payload = jwt_payload_handler(user)
      token = jwt_encode_handler(payload)
      return token

    def _get_user(self, attrs):
      raise APIException('请使用被重写的该方法')

    # 全局钩子
    # 写上 1.验证用户名密码的的逻辑 2.以及签发token的逻辑
    # 多方式登录,username可以是用户名,邮箱,电话
    # 之前用的是正则匹配 今天使用Q查询
    def validate(self,attrs):
      user = self._get_user(attrs)
      token = self._get_token(user) # 传入用户,根据用户来签发token
      # 把user和token放在序列化类的context
      # context是上下文
      self.context['username'] = user.username
      self.context['icon'] = str(user.icon)
      self.context['token'] = token
      return attrs

  2 写上短信验证码登录的序列化校验

  # 短信登录的序列化类
  from django.core.cache import cache # 会优先查找validate,类中找不到就去父类中找
  class LoginUserSMSSerializer(CommonLoginSerializer,serializers.Serializer):
    code = serializers.CharField(max_length=4)
    mobile = serializers.CharField()

    def _get_user(self,attrs): # attrs中有用户名和密码
      mobile = attrs.get('mobile')
      code = attrs.get('code')
      # 拿出发送过去的code和用户输入的code作对比
      old_code = cache.get('send_sms_code_%s'%mobile)
      if code == old_code:
        # 验证码正确,查出用户信息返回
        user = User.objects.filter(mobiel=mobile).first()
        if user:
          return user
        else:
          raise APIException('该手机号未在平台注册')
      else:
        raise APIException('验证码错误')

/2  创建视图类 

  将多方式登录和短信验证码登录相同的冗余代码封装起来

  def _common_login(self, request, *args, **kwargs):
    # 前端传入的格式:{mobile:123,code:3333}
    # 不可以和多方式登录使用同一个序列化类
    ser = self.get_serializer(data=request.data) # 进行序列化
    # 只要执行 is_valid 就会执行字段自己的校验,例如全局和局部钩子
    # 在这段程序中我们需要在序列化类中写自己的校验规则,生成token串
    ser.is_valid(raise_exception=True) # 进行校验,如果失败,则抛出异常
    username = ser.context.get('username')
    token = ser.context.get('token')
    icon = ser.context.get('icon')
    # 登录成功会显示出token和用户名
    return APIResponse(username=username, token=token, icon=icon)

  创建短信登录接口

  @action(methods=['POST'], detail=False)
  def send_login(self, request, *args, **kwargs):
  return self._common_login(request, *args, **kwargs)

2. 手机验证码注册接口 

/1  短信注册的序列化类

/2  视图类中接口的创建

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

/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,端口,token,user,序列化,学城,搭建
From: https://www.cnblogs.com/abc683871/p/17516980.html

相关文章

  • 网关搭建【黑马头条】
    一、导入依赖<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......
  • win10中的端口及端口占用PID查看
    1、查看所有端口:netstat-ano2、查看固定端口:(注意findstr后要有空格)netstat-ano|findstr"1883"3、查看被占用端口的PIDnetstat-ano|findstr"8083"4、查看指定PID的进程tasklist|findstr"5788"5、结束进程强制(/F参数)杀死pid为5788的所有进程包括子进程(/T参数)t......
  • 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......
  • kubesphere 搭建redis
    一、我们用docker搭建redis时的命令是:dockerrun-d-p6379:6379--restart=always\-v/mydata/redis/conf/redis.conf:/etc/redis/redis.conf\-v/mydata/redis-01/data:/data\--nameredis-01redis:6.2.5\redis-server/etc/redis/redis.conf从中分析出来,我......
  • 嵌入式Linux怎么搭建开发环境?
    交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)交流群二:QQ群:536785813(单片机-嵌入式)公 众 号:百问科技版本日期作者说明V12020韦东山技术文档全文下载地址:嵌入式Linux系统开发完全手册第二版2.1安装Windows软件2.1.1这么多虚拟机,如何选择?搭建开发环境的主要工作......
  • 达梦DCP学习(一、实时主备群集搭建及切换)
    环境介绍:使用VM15+银河麒麟V10操作系统+达梦8数据库  一、为小白的自己记录曾经的疑问      1、数据库名与实例名是有区别的,不能弄混      2、群集中两节点数据库名可以相同,但实例名必须不同      3、搭建过程中的出现的报错就是你错了,仔细看报错提......
  • Windows修改Redis端口无效
    步骤1、如果开了Redis服务,先将服务关闭!2、在Window上找到Redis的安装目录,修改config\redis.windows.conf文件,在里面将默认端口改为你想要的端口号3、将redis.windows.conf文件直接拖入redis-server.exe,弹出窗口......