Django 登录接口,返回token
Posted beautyl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 登录接口,返回token相关的知识,希望对你有一定的参考价值。
完成login之后返回token的接口,包括生成token,form校验,连接redis,view逻辑
1,在该子项目下新建utils.py ,存放生成token的类
1 from django_redis import get_redis_connection 2 import itsdangerous 3 # 获取/解析token用到的模块 4 from django.conf import settings 5 # 把settings中的一串字符串作为 secretkey 6 from .const import token_expires 7 class Token: 8 # 获取/解析token的类 9 tjss = itsdangerous.TimedJSONWebSignatureSerializer(settings.SECRET_KEY, expires_in=token_expires) 10 # 把settings中的一串字符串作为 secretkey 11 # 设置一个失效时间 12 @classmethod 13 def create_token(cls,data): 14 token=cls.tjss.dumps(data).decode() 15 # data是根据什么获取的token,比如根据用户的用户名和密码 16 return token 17 @classmethod 18 def check_token(cls,token): 19 try: 20 data=cls.tjss.loads(token) 21 # 解析传过来的token,比如,解析成用户的用户名和密码 22 except: 23 # 如果解析失败的话。程序会报错。所以这里加了异常处理,如果解析失败,返回false即可 24 return False 25 return data
2,form校验
1 class LoginForm(forms.Form,FormatFormError): 2 # login form 3 # 校验,1,传入的参数username和password数据类型是否合法 4 # 2,username和password在sqlite数据库中能否查到,登录的信息是否正确 5 username=forms.CharField(max_length=50) 6 password=forms.CharField(max_length=50) 7 def clean(self): 8 username=self.cleaned_data.get(‘username‘) 9 password=self.cleaned_data.get(‘password‘) 10 # 获取传到form中的参数 字典类型 11 u=models.User.objects.filter(username=username,password=password).first() 12 # 去数据表中查找这条数据 13 if u: 14 self.cleaned_data[‘u‘]=u 15 print(self.cleaned_data) 16 # 如果查到了,表明用户信息合法,并且把这条Model信息存到cleandata中 17 else: 18 raise ValidationError(‘账号/密码错误!‘) 19 # 如果查不到,直接报异常,用户信息校验失败
3,views
1 class LoginView(View): 2 ‘‘‘loginview‘‘‘ 3 def get(self,request): 4 # 现在要做的登录返回token是get请求 5 form=LoginForm(request.GET) 6 # 把请求参数传给form,实例化form 7 if form.is_valid(): 8 id=form.cleaned_data.get(‘u‘).id 9 username=form.cleaned_data.get(‘u‘).username 10 # 如果校验通过,想取到这条model的id和name拼接成字典,作为加密的原始数据 11 data={‘id‘:id,‘username‘:username} 12 token=Token.create_token(data) 13 # 生成token 14 r=get_redis_connection() 15 # 建立redis的连接 16 key=session_pre+username 17 # redis中的key统一成,session:username的格式 18 r.set(key,token,token_expires) 19 # r.set(key,token) 20 return Nbreponse(username=username,token=token) 21 # 请求成功,就返回token给用户 22 else: 23 return Nbreponse(-1,form.error_msg)
以上是关于Django 登录接口,返回token的主要内容,如果未能解决你的问题,请参考以下文章
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段
我无法使用有效的用户名和密码登录 Django 管理页面,它返回 % csrf_token % 禁止的 404 错误消息