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/
- 演示结果