编写手机验证注册接口

1.编写注册接口

1.1 user/urls.py 中添加路由

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

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

注册接口

class RegisterView(APIView):
    """
    用户注册, 权限是: 匿名用户可访问
    """
    # 自定义权限类
    permission_classes = (AllowAny,)

    def post(self, request):
        """
        接收用户名,密码,手机号和验证码, 前端校验两遍一致性, 注册成功后返回成功, 然后用户自行登录获取token
        1. 用户名
        2. 密码
        3. 手机号
        4. 验证码
        :param request:
        :return:  {'code':0,'msg':'注册成功'}
        code: "260361"
        password: "123123"
        phone: "13303479527"
        username: "liangxuepeng"
        """
        username = request.data.get('username')
        phone = request.data.get('phone')
        code = request.data.get('code')
        passwrod = request.data.get('password')

        if all([username, passwrod, phone, code]):
            pass
        else:
            return Response({'code': 999, 'msg': '参数不全'})

        # rand_name = self.randomUsername()
        # 验证手机验证码
        redis_client = get_redis_connection('img_code')
        code_redis = redis_client.get(phone)
        if code_redis:
            code_redis = code_redis.decode()

        if not code == code_redis:
            return Response({'code': 999, 'msg': '手机验证码错误','sss':code_redis})

        user = User(username=username, phone=phone)
        user.set_password(passwrod)
        user.save()

        return Response({'code': 0, 'msg': '注册成功'})

2.重写django认证

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

# 自定义验证后端 
AUTHENTICATION_BACKENDS = [
	'user.utils.EmailAuthBackend'
]

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

# 以前使用username进行用户验证,现在修改成email进行验证 
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,)

在这里插入图片描述

4.django添加检查用户名和手机号是否存在接口

4.1 在user/urls.py中添加

urlpatterns = [
    path('count/', views.RegCountView.as_view()),  # 查询用户名手机号使用量的视图,  /user/count/
]

4.2 在user/views.py中添加视图函数

查询用户是否存在接口

class RegCountView(APIView):
    # 注册时需要验证的用户名和手机号是否使用

    # 自定义权限类
    permission_classes = (AllowAny,)

    def post(self, request):
        # 接收参数:  验证的内容type: username/phone,  data: '用户名' 或者 '手机号',
        datatype = request.data.get('type')
        data = request.data.get('data')
        if not all([data, datatype]):
            return Response({'code': 999, 'msg': '参数不完整'})
        if datatype == 'username':
            count = User.objects.filter(username=data).count()
        if datatype == 'phone':
            count = User.objects.filter(phone=data).count()

        return Response({'code': 0, 'msg': '查询成功', 'data': {'type': datatype, 'count': count}})

4.3.测试接口

  • 测试接口URL
http://192.168.56.100:8888/user/count/
  • 演示结果
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值