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. Spring-Boot-Starter 学习笔记(1)

    Spring-Boot-Starter 1. 准备配置类和 Bean 对象 Spring Boot 提供了两个注解: @Configuration:Spring 提供的配置类注解,作用在类上,代表整个 ...

  2. jquery设置图片可手动拖拽

    JQuery是一款流行的JavaScript框架,可以轻松实现网页交互效果.而其中一种常见效果是图片手动拖拽.以下是设置图片手动拖拽的JQuery代码. 1 2 3 4 5 6 7 8 9 10 11 ...

  3. 前端设计模式:工厂模式(Factory)

    00.基础概念 工厂模式封装了对象的创建new(),将消费者(使用)和生产者(实现)解耦. 工厂是干什么的?工厂是生产标准规格的商品的地方,建好工厂,投入原料(参数),产出特定规格的产品.so,工厂模 ...

  4. 垃圾000000000000000000000写了很多,保存不上,发送失败了。。。。。A

    垃圾000000000000000000000写了很多,保存不上,发送失败了.....A垃圾000000000000000000000写了很多,保存不上,发送失败了.....A垃圾0000000000 ...

  5. 重写equals方法的注意事项

    重写equals方法的注意事项   一. 在重写equals方法时,要注意满足离散数学上的特性1   自反性:对任意引用值X,x.equals(x)的返回值一定为true.2   对称性:对于任何引用 ...

  6. 使用go语言开发hive导出工具

    前言 新版 hive 提供了 beeline 工具,可以执行SQL并导出数据,不过操作还是有点复杂的,团队里有些同学不会Linux的基本操作,所以我花了亿点点时间写了个交互式的命令行工具方便使用. 效 ...

  7. Android dumpsys介绍

    目录 一.需求 二.环境 三.相关概念 3.1 dumpsys 3.2 Binder 3.3 管道 四.dumpsys指令的使用 4.1 dumpsys使用 4.2 dumpsys指令语法 五.详细设 ...

  8. mysql练习案例(实操)

    最近想要在回去复习mysql语句,就在网上找了一些案例练习,起初找得都是零零散散的,后面参考这篇博客做出了一个实操案例.Eric_Squirrel:mysql学生表经典案例50题. 首先是建表,我用的 ...

  9. [Python急救站课程]计算1!+2!+3!+......+10!

    计算1!+2!+3!+......+10!程序 sum, tmp = 0, 1 for i in range(1, 11): tmp *= i sum += tmp print("运算结果是 ...

  10. 搭建Samba服务器笔记全套

    Top 目录 安装 端口与服务管理 其他常用命令 配置 全局配置 共享库配置 用户名密码认证库配置 Samba 登录用户配置 防火墙配置 设定安全的上下文关系 本地系统设置访问读写权限 Pdbedit ...