1.编写注册接口

1.1 user/urls.py中添加路由

urlpatterns = [   

  path('register/', views.RegisterView.as_view()),  # 注册视图,  /user/register/

]

1.2 user/views.py中写注册视图函数 

class RegisterView(APIView):
  permission_classes = (AllowAny,)
  def post(self,request):
    """
    接收邮箱和密码, 前端校验两遍一致性, 注册成功后返回成功, 然后用户自行登录获取token
    1. 随机用户名
    2. 生成用户
    3. 设置用户密码
    4. 保存用户
    :param request:
    :return: {'code':0,'msg':'注册成功'}
    """
    email=request.data.get('email')
    password=request.data.get('password')
    if all([email,password]):
      pass
    else:
      return Response({'code':9999,'msg':'参数不全'})
    rand_name=self.randomUsername()
    user=User(username=rand_name,email=email)
    user.set_password(password)
    user.save()
    return Response({'code':0,'msg':'注册成功'})
  def randomUsername(self):
    d=datetime.datetime.now()
    base='SYL'
    time_str = '%04d%02d%02d%02d%02d' % (d.year, d.month, d.day, d.hour, d.minute)
    rand_num = str(random.randint(10000, 99999))
    return base + time_str + rand_num

2.重写django认证

2.1syl/settings.py中指定自定义后端认证函数位置

#自定义验证后端

AUTHENTICATION_BACKENDS = ['user.utils.EmailAuthBackend']

2.2user/utils.py中重写认证函数

class EmailAuthBackend:
  def authenticate(self, request, username=None, password=None):
    try:
      user = User.objects.get(username=username)
    except Exception as e:
      user=None
    if not user:
      try:
        user = User.objects.get(email=username)
      except Exception as e:
          user=None
    if user and user.check_password(password):
      return user
    else:
      return None

  def get_user(self, user_id):
    try:
      return User.objects.get(pk=user_id)
    except User.DoesNotExist:
      return None

3.注册用户&测试登录

3.1注册接口测试

http://192.168.56.100:8888/user/register/

3.2 登录接口测试

注: 认证时只能识别username,所以必须要在请求中携带username字段
http://192.168.56.100:8888/user/login/

3.3 获取用户列表接口测试

访问接口

http://192.168.56.100:8888/user/user/5/
测试自定义权限
 # 自定义权限类 permission_classes = (MyPermission,)

# 自定义认证类, 自定义会覆盖全局配置

authentication_classes = (JSONWebTokenAuthentication,)
 
 

day4(编写注册接口)的更多相关文章

  1. golang自定义路由控制实现(二)-流式注册接口以及支持RESTFUL

        先简单回顾一下在上一篇的文章中,上一篇我主要是结合了数组和Map完成路由映射,数组的大小为8,下标为0的代表Get方法,以此类推,而数组的值则是Map,键为URL,值则是我们编写对应的接口.但 ...

  2. Django商城项目笔记No.7用户部分-注册接口-判断用户名和手机号是否存在

    Django商城项目笔记No.7用户部分-注册接口-判断用户名和手机号是否存在 判断用户名是否存在 后端视图代码实现,在users/view.py里编写如下代码 class UsernameCount ...

  3. day1作业:编写登陆接口

    作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 思路:要求是编写登陆接口,那么要有一个存放用户信息的模块:三次后锁定,要有一个存放锁定用户信息的模块:我们知 ...

  4. day1作业一:编写登陆接口

    作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 Readme: (1)提示用户输入用户名: (2)用户名验证,验证是否已经锁定: (3)是否锁定:已锁定告诉 ...

  5. python之编写登陆接口(第一天)

    作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 针对此实例写了有二种类型的脚本,略有不同,具体如下: 帐号文件account.txt内容如下: sam 123 david ...

  6. 关于python怎样编写登录接口

    把今天的成果展示下,关于怎么用python编写登录接口, 要求是   1.输入用户名和密码 2.输错三次密码就锁定用户 3.认证成功后输出欢迎信息 账号文件内容如下: sanjiang sanjian ...

  7. 35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

      35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现in ...

  8. Python学习之编写登陆接口(Day1,作业一)

    作业一:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定(下次登陆还是锁定) 知识点:while循环,for循环,文件操作,if判断,列表操作 思路: 1.登陆,三次登陆失败,锁定 ...

  9. Python之编写登录接口

    作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 帐号文件account.txt内容如下: liuyueming 123zhangsan 123lisi 123 锁文件acc ...

随机推荐

  1. Docker 基础 B站 学习 最强 教程

    狂神说!! https://www.bilibili.com/video/BV1og4y1q7M4

  2. keras中的early stopping

    目的:防止过拟合 # early stoppping from keras.callbacks import EarlyStopping early_stopping = EarlyStopping( ...

  3. 12 RESTful架构(SOAP,RPC)

    12 RESTful架构(SOAP,RPC) 推荐: http://www.ruanyifeng.com/blog/2011/09/restful.html

  4. SpringBoot第九集:整合JSP和模板引擎Freemarker/Thymeleaf(2020最新最易懂)

    SpringBoot第九集:整合JSP和模板引擎(2020最新最易懂) 当客户通过前端页面提交请求后,我们以前是怎么做的?后端接收请求数据,处理请求,把响应结果交给模板引擎JSP,最后将渲染后的JSP ...

  5. 常用DOS指令

    Windows的DOS命令,其实是Windows系统的cmd命令,它是由原来的MS-DOS系统保留下来的. ​MS-DOS称为微软磁盘操作系统,最开始从西雅图公司(蒂姆·帕特森)买过来 MS-DOS系 ...

  6. ubuntu mplayer "无法打开 VDPAU backend libvdpau ..."

    gnome mplayer 报错"无法打开 VDPAU backend libvdpau_nvidia.so: cannot open shared object file: No such ...

  7. linux nf_conntrack 连接跟踪机制 2

    连接跟踪初始化 基础参数的初始化:nf_conntrack_standalone_init 会调用nf_conntrack_init_start 完成连接跟踪基础参数的初始化, hash slab 扩 ...

  8. close与shutdown

    首先看一个例子,如下图所示: 当我们客户端发送ABCD再close套接字的时候,服务器端的接收通道也被关闭了,将无法接收ABCD的数据.如果想要仅仅关闭发送通道,保留接收通道,可以使用shutdown ...

  9. vue 使用中的小技巧 (一)

    在vue的使用过程中会遇到各种场景,当普通使用时觉得没什么,但是或许优化一下可以更高效更优美的进行开发.下面有一些我在日常开发的时候用到的小技巧 data 和 Object.freeze 每个Vue实 ...

  10. linux云服务搭建七日杀服务器

    目录 准备工作 1.设置swap 2.安装screen 3.安装SteamCmd运行所需环境 4.创建一个用户 steamCMD与七日杀服务器端 1.下载并安装SteamCMD 2.登录steam账号 ...