1.注册功能
因为路飞项目有很多不同的板块,所以我们分为两个app,一个home用来写主页的功能,一个user用来写用户相关功能。用户注册逻辑我们首先来写手机号是否已注册的接口:
user/views.py:
class UserView(GenericViewSet):
@action(methods=['GET'], detail=False)
def send_msg(self, request, *args, **kwargs):
try:
mobile = request.query_params.get('mobile')
if mobile:
# 首先判断是否能拿到手机号,如果能拿到就判断数据库中是否有该手机号
User.objects.get(mobile=mobile)
# 能拿到手机号,并且数据库存在该号码,就可以顺利走完try的子代码。就会继续走return APIResponse(msg='手机号存在')
else:
raise APIException('手机号必填')
# 如果拿不到手机号,就主动抛异常,该异常会被全局异常捕获
except Exception as e:
return APIResponse(code=102,msg='该用户未注册')
# 如果该用户在if子代码判断中,在数据库没有该用户信息,就返回用户未注册
return APIResponse(msg='手机号存在')
# 如果用户上传了手机号并且该号码存在于数据库中,说明该号码存在。
代码改良:我们可以直接在try子代码中查找数据库中是否有此号码,如果找不到直接报错,代码可以更简洁:
class UserView(GenericViewSet):
@action(methods=['GET'], detail=False)
def send_msg(self, request, *args, **kwargs):
try:
'''try子代码拿到'''
mobile = request.query_params.get('mobile')
User.objects.get(mobile=mobile) # print(res) # root 如果有值拿到的是该号码对应的用户名。如果拿不到这一步会报错,会走except这一步
except Exception as e:
raise e
# 报错之后会走全局异常捕获
return APIResponse(msg='手机号存在')
全局异常捕获:
utils.common_exceptions.py:
# 只要走到这个函数里说明已经出异常
def exception_handler(exc, context):
request = context.get('request')
view = context.get('view')
ip = request.META.get('REMOTE_ADDR')
if request.user.pk:
user_id = request.user.pk
else:
user_id = '匿名用户'
path = request.get_full_path()
response = drf_exception_handler(exc, context)
if response:
logger.warning('drf出异常,异常是:[%s]' % str(exc))
# drf错误显示具体信息,如果取不到显示服务器异常,请联系系统管理员
res = Response({'code': 999, 'msg': response.data.get('detail', '服务器异常,请联系系统管理员')})
else:
# django的异常,直接从日志中找错误django_admin_log
logger.error('用户[%s],ip地址为[%s],访问地址为[%s],执行视图函数为[%s],错误是[%s]' % (user_id, ip, path, str(view), str(exc)))
res = Response({'code': 888,
'msg': str(exc)})
return res
dev.py:
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'utils.common_exceptions.exception_handler',
}
标签:手机号,登录,get,mobile,request,路飞,user,注册,msg
From: https://www.cnblogs.com/ERROR404Notfound/p/17176595.html