Esempio n. 1
0
 def register(self, request):
     # 触发该函数,接口地址为:/api/user/auth/register/
     # 1.校验数据
     serializer = self.get_serializer(data=request.data)
     result = serializer.is_valid(raise_exception=False)
     # 2.判断校验结果
     if not result:
         errors = serializer.errors
         res = {
             'code': 1001,
             'msg': '字段校验失败',
             'data': errors
         }
         raise ParamsException(res)
     user = serializer.save()
     res = {'user_id': user.id}
     return Response(res)
Esempio n. 2
0
 def register(self, request, *args, **kwargs):
     # /api/user/auth/register/
     serializer = self.get_serializer(
         data=request.data
     )  # get_serializer()首先调用的是自己定义的serializer_class=UserRegisterSerializers
     result = serializer.is_valid(raise_exception=False)  #False 不直接抛错
     if not result:
         raise ParamsException({
             'code': 1000,
             'msg': '参数校验失败',
             'data':
             serializer.errors  # serializer.errors 获取字段校验(上面定义部分)不通过时抛出的错误
         })
     # 保存用户信息
     user = serializer.register_user(serializer.data)
     # 返回结构{'code':200,'msg':'请求成功,'data':{'user_id':user.id}}
     res = {'user_id': user.id}
     return Response(res)
Esempio n. 3
0
    def validate(self, attrs):
        # 账号必须不存在
        res = {}
        username = attrs.get('u_username')
        email = attrs.get('u_email')
        # 密码和确认密码必须一致
        # 邮箱正则匹配
        if UserModel.objects.filter(username=username):
            res = {'code': 1001, 'msg': '账号已存在'}

        if UserModel.objects.filter(email=email):
            res = {'code': 1000, 'msg': '邮箱已存在'}
        re_compile = re.compile(
            '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$')
        if not re_compile.fullmatch(email):
            res = {'code': 1000, 'msg': '邮箱格式不正确'}
        if res:
            raise ParamsException(res)
        return attrs
Esempio n. 4
0
 def login(self, request):
     # 请求地址:/api/user/auth/login/
     data = request.data
     # self.get_serializer调用UserLoginSerializer
     serializer = self.get_serializer(data=data)
     result = serializer.is_valid()
     if not result:
         res = {'code': 1007, 'msg': '校验登录参数失败', 'data': serializer.errors}
         raise ParamsException(res)
     # 登录标识符的操作
     # 1.获取唯一的标识符传递给前端
     token = uuid.uuid4().hex
     # 2.存储标识符和当前登录用户的关联关系(redis)
     username = serializer.data.get('u_username')
     user = UserModel.objects.filter(username=username).first()
     # 使用redis中的string类型进行存储, 存储的key为token值,value为当前登录用户的id值
     cache.set(token, user.id, timeout=12000)
     res = {'token': token}
     return Response(res)
Esempio n. 5
0
 def register(self, request):
     # 请求地址:/api/user/auth/register/
     # 请求方式:
     # 1. 获取前端传递的参数
     data = self.request.data
     # 2. 字段校验(重新定义UserRegisterSerializer)
     serializer = UserRegisterSerializer(data=data)
     # 3. 注册功能实现
     result = serializer.is_valid()
     if not result:
         res = {'code': 1004, 'msg': '字段校验错误', 'data': serializer.errors}
         raise ParamsException(res)
     user = UserModel.objects.create(
         username=serializer.data.get('u_username'),
         password=make_password(serializer.data.get('u_password')),
         email=serializer.data.get('u_email'))
     # 4. 返回数据
     res = {'user_id': user.id}
     return Response(res)
Esempio n. 6
0
    def login(self, request):
        # 请求地址:/api/user/auth/login/
        data = request.data
        serializer = self.get_serializer(data=data)
        result = serializer.is_valid()
        if not result:
            res = {'code': 1005, 'msg': '字段校验错误', 'data': serializer.errors}
            raise ParamsException(res)

        # 登陆标识符的操作
        # 1.获取唯一的标识符传递给前端
        token = uuid.uuid4().hex
        # 2.存储标识符和当前登陆用户的关联关系(redis)
        # 这里取user是为了取得user.id,存入本地数据库,形成标识符和登录用户的关联关系
        user = UserModel.objects.filter(
            username=serializer.data.get('u_username')).first()
        # 使用redis中的string类型进行存储,存储的key为token值,value为当前登录用户的id值
        # 本地终端获取user.id    get token值
        cache.set(token, user.id, timeout=30000)
        res = {'token': token}
        return Response(res)
Esempio n. 7
0
 def authenticate(self, request):
     # 登录地址才做token与user_id的判断
     # 不需要做登录认证的地址,如/register/、/login/、/home/不做认证
     path = request.path
     not_need_auth = [
         '/api/user/auth/register/',
         '/api/user/auth/login/',
         '/api/goods/home/',
         '/api/goods/market/',
         '/api/goods/foodtype/',
     ]
     if path in not_need_auth:
         return None
     token = request.data.get('token') if request.data.get(
         'token') else request.query_params.get('token')
     if token:
         user_id = cache.get(token)
         if user_id:
             user = UserModel.objects.get(id=user_id)
             return user, token
     res = {'code': 1008, 'msg': '用户没登录,无法执行该操作'}
     raise ParamsException(res)