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')
}

django token 认证 简单记录的更多相关文章

  1. Django的认证系统和Django admin的简单使用

    Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...

  2. django使用RestFramework的Token认证

    今天实现的想法有点不正规: Django Rest framework的框架的认证,API都运行良好. 现在是要自己写一个function来实现用户的功能. 而不是用Rest 框架里的APIVIEW这 ...

  3. 【django后端分离】Django Rest Framework之认证系统之redis数据库的token认证(token过期时间)

    1:登录视图 redis_cli.py文件: import redis Pool= redis.ConnectionPool(host='localhost',port=6379,decode_res ...

  4. python 全栈开发,Day97(Token 认证的来龙去脉,DRF认证,DRF权限,DRF节流)

    昨日内容回顾 1. 五个葫芦娃和三行代码 APIView(views.View) 1. 封装了Django的request - request.query_params --> 取URL中的参数 ...

  5. django 自定义认证

    在Django中自定义身份验证 Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成的认证系统.定制自己的项目的权限系统需要了解哪些一些关键点,即Django中哪些部分是能够扩展或替 ...

  6. Cookie、Session和Token认证

    目录 Cookie Session认证机制 Session的一些安全配置 Token认证机制 Token预防CSRF Session认证和Token认证的区别 前言:HTTP是一种无状态的协议,为了分 ...

  7. 42.JSON Web Token认证

    JSON Web Token认证介绍 简称JWT认证,一般用于用户认证 JWT是一种相当新的标准,可用于基于token的身份验证 与内置的TokenAuthentication方案不同,JWT不需要使 ...

  8. [django]用户认证中只允许登陆用户访问(网页安全问题)

    当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [    url(r'^$', 'login ...

  9. Django 用户认证及OneToOneField

    Django 用户认证如果自己不想写 就可以用django自带的认证 首选导入模块 models.py #!/usr/bin/env python #_*_ coding:utf8 _*_ from ...

  10. django初探-创建简单的博客系统(二)

    上篇django初探-创建简单的博客系统(一)已经记录了Django实现博客的发布的整个过程,接下来继续说明博客标题和内容的显示. 显示博客详细 将博客内容保存到数据库还不是发布博客的终极目的,博客一 ...

随机推荐

  1. Mybatiplus通用3.5.1版本及其以上的代码生成器工具类

    Mybatiplus通用3.5.1版本及其以上的代码生成器工具类 package com.gton.util; import com.baomidou.mybatisplus.annotation.F ...

  2. 关于Word转PDF的几种实现方案

    在.NET中,你可以使用Microsoft.Office.Interop.Word库来进行Word到PDF的转换.这是一个示例代码,但请注意这需要在你的系统上安装Microsoft Office. 在 ...

  3. .NET Core使用SkiaSharp快速生成二维码( 真正跨平台方案)

    前言 在.NET 6之前我们一直是使用QRCoder来生成二维码(QRCoder是一个非常强大的生成二维码的组件,用到了System.Drawing.Common 包),然后从.NET 6开始,当为非 ...

  4. 再谈http请求调用(Post与Get),项目研发的核心一环

    支持.Net Core(2.0及以上)与.Net Framework(4.0及以上) [目录] 前言 Post请求 Get请求 与其它工具的比较 1[前言] http请求调用是开发中经常会用到的功能. ...

  5. Android Orm框架(GreenDao)

    Android Orm框架(GreenDao) 分类: android2014-04-10 14:29 723人阅读 评论(0) 收藏 举报 GreenDao与Ormlite对比 Ormlite:简单 ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (110)-- 算法导论10.2 1题

    一.用go语言,单链表上的动态集合操作 INSERT 能否在 O(1)时间内实现?DELETE 操作呢? 文心一言: 在单链表中,INSERT 和 DELETE 操作的时间复杂度通常是 O(n),其中 ...

  7. 使用 DDPO 在 TRL 中微调 Stable Diffusion 模型

    引言 扩散模型 (如 DALL-E 2.Stable Diffusion) 是一类文生图模型,在生成图像 (尤其是有照片级真实感的图像) 方面取得了广泛成功.然而,这些模型生成的图像可能并不总是符合人 ...

  8. 鸿蒙极速入门(六)-加载请求状态管理-LoadState+观察者模式

    背景 1.在ArkTS的架构中,没有明确的可管理的加载请求状态的脚手架,在进行网络请求过程中,无法简单的进行交互响应. 2.参考Android中的LoadState写了一个简单的脚手架,以便在日常开发 ...

  9. List集合异常:list All elements are null

    查询数据库,返回空数据,但是List中显示有一个数据,点开以后显示  All elements are null ObjectUtils.isEmpty 和 List.isEmpty判断都失败,后续会 ...

  10. this.$router 与this.$route的区别

    this.$router是Vue-Router的实例,需要导航到不同路由则用this.$router.push方法 this.$route为当前路由的跳转对象,包含当前路由的name.path.que ...