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. ArcGIS地图投影与坐标系转换的方法

      本文介绍在ArcMap软件中,对矢量图层或栅格图层进行投影(即将地理坐标系转为投影坐标系)的原理与操作方法.   首先,地理坐标系与投影坐标系最简单的区别就是,地理坐标系用经度.纬度作为空间衡量指 ...

  2. 带宽优化新思路:RoCE网卡聚合实现X2增长

    本文分享自华为云社区<2个RoCE网卡Bond聚合,实现带宽X2>,作者: tsjsdbd . 我们知道操作系统里面,可以将2个实际的物理网卡,合体形成一个"逻辑网卡" ...

  3. pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

    pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simpleLooking in indexes: https://pypi.tuna.t ...

  4. VoIP==Voice over Internet Protocol

    基于IP的语音传输(英语:Voice over Internet Protocol,缩写为VoIP)是一种语音通话技术,经由网际协议(IP)来达成语音通话与多媒体会议,也就是经由互联网来进行通信.其他 ...

  5. 如何基于three.js(webgl)引擎架构,研发一套通过配置就能自动生成的3D机房系统

    序: 这几年观察下来,大部分做物联网三维可视化解决方案的企业或个人, 基本都绕不开3D机房.包括前面也讲过这样的案例<使用webgl(three.js)创建自动化抽象化3D机房,3D机房模块详细 ...

  6. CF755C

    题目简化和分析: 这题不用说怎么分析了吧,这一看就是个并查集求连通分量个数的经典模板. 我们需要将 \(i\) 和 \(p_i\) 进行合并. 遍历每个 \(i\) 与 \(i+1\) 是否属于同一个 ...

  7. for遍历

    for遍历 一:常规方式 1.遍历数组 int arr[10] = {1,2,3,4,5,6,7,8,9,10}; for(int i = 0;i<10;i++) { cout<<a ...

  8. Oracle 11g数据库详解(2017-01-23更新)

    Oracle 11g数据库详解 整理者:赤勇玄心行天道 QQ:280604597 Email:280604597@qq.com 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的 ...

  9. 差异行压缩算法(C#实现)

    private byte[] DifferenceRowOrder(int offset, int count, byte[] inbyte)//差异行命令(此处的offset和count都从1开始) ...

  10. ubuntu系统安装到U盘便捷启动

    1.前言 实现u盘系统即插即用,便捷带走.这里需要使用到VM虚拟机进行安装,这里选择64位的ubuntu系统. 2.运行VM虚拟机 以管理员运行VM虚拟机,创建一个ubuntu系统,然后选中相关的镜像 ...