最近用swift在IOS上做一个类似于社交类的APP,决定后台使用Django来提供API,暂时不考虑做web版本的app,所以直接使用了rest-framework。
英文文档看的我头好晕,最终对rest-framework一知半解的情况下,决定还是按照自己的想法来,于是从比较难解决的注册和登录来解决吧,关于注册,直接弃用DRF里面的登录方式,自己写登录方法,用户登录后返回一个Token,而这个Token则使用DRF里边的Token生成机制来为每一个用户创建一个token,存放在token表里。而在返回的时候有使用以下DRF的序列化,所以就有了下面的登录和注册方法。
class Registration(APIView):
'''用户注册,要求输入用户名(最大32个字节)username,密码(最小6个字节) password 以及电话号码 telephone'''
def get_object(self, username):
try:
return User.objects.get(username=username)
except User.DoesNotExist:
return None
def post(self, request, format=None):
parser = json.loads(request.body)
username = parser['username']
password_unmake = parser['password']
telephone = parser['telephone']
user = self.get_object(username)
if(user is None):
password = hashers.make_password(password_unmake)
new_user = User(username=username, password=password, telephone = telephone)
new_user.save()
token = Token.objects.create(user=new_user)
serializer = TokenSerializer(token)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response('Invalid username', status=status.HTTP_400_BAD_REQUEST)
class Login(APIView):
'''用户登录 用户输入用户名后进行用户名密码的检查, 登陆成功后返回一个token{key, user}'''
def post(self, request, format=None):
parser = json.loads(request.body)
username = parser['username']
password = parser['password']
user = auth.authenticate(username=username, password=password)
if user is None:
return Response('Invalid username or password', status = status.HTTP_400_BAD_REQUEST)
token = Token.objects.get(user = user)
serializer = TokenSerializer(token)
return Response(serializer.data, status=status.HTTP_202_ACCEPTED)