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. CSS 还原拉斯维加斯球数字动画

    我的小册 <CSS 技术揭秘与实战通关>上线了,想了解更多有趣.进阶.系统化的 CSS 内容,可以猛击 - LINK. 最近大家刷抖音,是否有刷到拉斯维加斯的新地标 「Sphere」: 场 ...

  2. XCODE9.1的一些新问题

    自从XCODE7苹果就允许用免费的开发者账号进行真机测试了,但是还是有很多限制的. 在用的过程中发现限制如下: 1.只能生成*.app文件,不能打包成ipa.官方这么说的,但是奇诡的是,我archiv ...

  3. WPF性能优化:Freezable 对象

    Freezable是WPF中一个特殊的基类,用于创建可以冻结(Freeze)的可变对象.冻结一个对象意味着将其状态设置为只读,从而提高性能并允许在多线程环境中共享对象. Freezable的应用 我们 ...

  4. ABC318 A-G 题解

    A 枚举 \(1\sim n\) 的每个数,判断是否有 \(i-M\equiv 0\pmod P\) 即可. 赛时代码 B 暴力覆盖即可,注意 \(x,y\) 均是左开右闭. 赛时代码 C 贪心的想, ...

  5. 使用fontforge进行字体拆分

    fontforge官方网站 游戏开发为了节省内存和资源下载量,需要把字体不用的字删掉,或者拆成多个字体逐级加载,批量操作用UI就比较难搞了,用fontforge搞起来比较顺手 安装fontforge后 ...

  6. NGINX相关介绍其一

    HTTP协议和NGINX 跨网络的主机间通讯 远程的两台主机联系在一起 套接字Socket是进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上不同进程之间进行通信和数据交换,SocketAP ...

  7. EhCache使用详细介绍

    http://hi.baidu.com/yjl_zzh/item/18e6518397cdd1d9d1f8cdfb 2.EhCache的使用注意点    当用Hibernate的方式修改表数据(sav ...

  8. kubernetes驱逐机制总结

    概述 k8s的驱逐机制是指在某些场景下,如node节点notReady.node节点压力较大等,将pod从某个node节点驱逐掉,让pod的上层控制器重新创建出新的pod来重新调度到其他node节点. ...

  9. gitlab : You won`t be able to pull or push project code via SSH until you add an SSH key to your profile(导致的问题:合并不了代码)

    gitlab : You won`t be able to pull or push project code via SSH until you add an SSH key to your pro ...

  10. vue 中如何使用axios调用接口

    首先后端采用的是restful形式,分为了 1.post(添加)请求, 2.delect(删除)请求, 3.put(修改)请求, 4.get(查询)请求, 在vue里项目里,npm i axios - ...