首页 > 其他分享 >django token 认证 简单记录

django token 认证 简单记录

时间:2023-04-26 19:00:30浏览次数:37  
标签:username 认证 token user date new model django

class User(AbstractUser):
    username = models.CharField(
        max_length=20, unique=True, primary_key=True, verbose_name="用户名"
    )
    email = models.EmailField(max_length=256, null=False, verbose_name="邮箱", blank=True)
    password = models.CharField(max_length=128, verbose_name="密码")
    token = models.CharField(max_length=256, null=True, verbose_name="Token")
    token_begin_time = models.DateField(null=True, verbose_name="Token生效时间")
    token_last_time = models.DateField(null=True, verbose_name="Token失效时间")

    class Meta:
        verbose_name_plural = "用户信息表"


def generateToken(flag,username):
    import datetime
    import uuid
    headers = {"alg": "HS256", "typ": "JWT"}
    token_new = jwt.encode(payload={"name": username+f"_{str(uuid.uuid1())}"}, key="ess_token_check_key", algorithm='HS256', headers=headers)
    date_now_new = datetime.datetime.now()
    date_week_new = (date_now_new + datetime.timedelta(days=6)).strftime("%Y-%m-%d")
    date_date_now_new = date_now_new.strftime("%Y-%m-%d")

    if flag == "username":         user_model = models.User.objects.get(username=username)     if flag == "email":         user_model = models.User.objects.get(email=username)
    if user_model.token == None and user_model.token_begin_time == None and user_model.token_last_time == None:         user_model         user_model.token = token_new         user_model.token_begin_time = date_date_now_new         user_model.token_last_time = date_week_new         user_model.save()         return token_new     else:         if datetime.date(*map(int, date_date_now_new.split('-'))) <= user_model.token_last_time:             return user_model.token         else:             user_model.token = token_new             user_model.token_begin_time = date_date_now_new             user_model.token_last_time = date_week_new             user_model.save()             return token_new

def login(request): if request.method == "POST": data = QueryDict(request.body)
     # token = request.META.get('HTTP_TOKEN') # 获取请求头中的token
        username = data.get("user")
        password = data.get("pwd")
        db_pwd = models.User.objects.filter(username=username).values("password")[0]["password"]
        pwd_flag = check_password(password, db_pwd)
        if pwd_flag:
            token = generateToken(flag="username", username=username)return JsonResponse({"data": "successful", "zhuname": zhuname, "power": power, "token":token})
        else:
            return JsonResponse({"data": "账号或密码错误!"})
$.ajax("/insert/", {
    method: "POST",
    headers: {
"token": window.localStorage.getItem("token") }, contentType: "application/json; charset=utf-8", dataType: "json", data: {uname: uname, pname: pname},
}).done(function (res) { if (res && res.data == "successful") {console.log('successfule')
}

 

标签:username,认证,token,user,date,new,model,django
From: https://www.cnblogs.com/taotao0805/p/17356983.html

相关文章

  • Django 查询数据库不释放内存的情况
    查询结果未及时清空如果查询结果较大,可能会占用很多内存。在使用完查询结果后,应该及时清空,以释放占用的内存。可以通过将查询结果赋值给一个变量,然后使用del关键字删除变量来清空查询结果。例如:result=MyModel.objects.all()#使用查询结果...#清空查询结果delresul......
  • drf之三大组件(认证组件、权限组件、频率组件)
    目录环境准备创建相关的表,models.py创建登录样例配置路由认证组件BaseAuthentication创建认证组件创建测试样例总结1.创建认证组件2.局部使用(只在一个视图类中使用,使用后会影响当前视图类中管理的所有接口)3.全局使用(对所有接口都生效)4.局部禁用权限组件BasePermission环境......
  • mysql主从,django使用多数据库做读写分离
    mysql主从mysql主从搭建的目的1.读写分离2.单个实例并发量低,提高并发量3.只在主库写,读数据都去从库mysql主从原理步骤一:主库db的更新事件(update,insert,delete)被写道binlog步骤二:从库发起连接,连接到主库步骤三:此时主库创建一个binlogdumpthread线程,把binlog的内容发送到......
  • Django进阶:事务操作、悲观锁和乐观锁
    Django进阶:事务操作、悲观锁和乐观锁参考网址https://zhuanlan.zhihu.com/p/372957129事务处理(transaction)对于Web应用开发至关重要,它可以维护数据库的完整性,使整个系统更加安全。比如用户A通过网络转账给用户B,数据库里A账户中的钱已经扣掉,而B账户在接收过程中服务器......
  • OkHttp实现全局过期token自动刷新
    原文地址www.cnblogs.com遇到问题:当前开发的App遇到一个问题:当请求某个接口时,由于token已经失效,所以接口会报错。但是产品经理希望app能够马上刷新token,然后重复请求刚才那个接口,这个过程对用户来说是无感的。也就是静默自动登录,然后继续请求:请求A接口-》服......
  • Django4全栈进阶之路19 项目实战(用户管理):user_delete.html用户删除画面设计
    1、模块:<tbody>{%foruserinuser_list%}<tr><td>{{user.username}}</td><td>{{user.email}}</td>......
  • Django4全栈进阶之路18 项目实战:登录模块设计
    1、编写函数视图,判定用户名密码,验证通过进入home主页,不通过返回登录页面deflogin_view(request):ifrequest.method=='POST':username=request.POST.get('username')password=request.POST.get('password')print(username)......
  • adobe认证证书
    Adobe认证证书分为产品技能认证和职业技能认证:产品技能认证AdobeCertifiedProfessionalPhotoshop认证专家AdobeCertifiedProfessionalIllustrator认证专家AdobeCertifiedProfessionalInDesign认证专家AdobeCertifiedProfessionalPremierePro认证专家AdobeCertifiedP......
  • adobe国际认证证书有用吗?
    获得Adobe国际认证证书,对于是否是创意设计师都可以赋予他们以下优势:①证明专业技能:Adobe证书是一种权威的认证,可以证明设计师在使用Adobe软件方面具有专业技能。这可以帮助设计师在求职过程中脱颖而出,提高竞争力。②提高工作效率:Adobe软件是设计师必备的工具,掌握这些工具的高效使用......
  • djangorestframework-jwt使用
    服务端配置安装第三方库pipinstalldjangorestframework-jwt在settings.py中配置JWT##可以在这里配置全局的认证,也可以在视图中单独配置。REST_FRAMEWORK={'DEFAULT_AUTHENTICATION_CLASSES':['rest_framework_jwt.authentication.JSONWebTokenAuthentic......