单点登录前戏(未使用jwt版本)
建表
from django.db import models
import jwt
# Create your models here. # 角色表
class RoleTable(models.Model):
role = models.CharField(max_length=30, verbose_name='角色')
creator = models.CharField(max_length=30, verbose_name='创建者')
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
# 创建者
# 创建时间 def __str__(self):
return self.role class Meta:
db_table = 'role' # 用户表
class UserTable(models.Model):
name = models.CharField(max_length=30, verbose_name='员工姓名')
sex = models.CharField(max_length=10, choices=(('', '女'), ('', '男')), verbose_name='员工性别')
username = models.CharField(max_length=32, verbose_name='用户名')
password = models.CharField(max_length=32, verbose_name='密码')
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
login_time = models.DateTimeField(verbose_name='最近登录时间', auto_now=True)
role = models.OneToOneField(RoleTable, on_delete=models.CASCADE) def __str__(self):
return self.name class Meta:
db_table = 'user'
models.py
配置url
from django.urls import path
from AccountManager import views
app_name = 'account'
urlpatterns = [
path('login/', views.Login, name='login'),
path('add/', views.addUser, name='add'),
]
配置salt
# 加密字段
SALT = 'haxitaig!@#$%^&*' #根据公司自定制salt
创建日志
首先自己配置settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters':{
"generic": {
"format": "%(asctime)s [%(process)d] [%(levelname)s] %(message)s",
"datefmt": "[%Y-%m-%d %H:%M:%S %z]",
"class": "logging.Formatter"
},
"access": {
"format": "%(message)s",
"class": "logging.Formatter"
}
},
'loggers': {
"AuthCert.error": {
"level": "INFO",
"handlers": ["error_file"],
"propagate": 1,
"qualname": "AuthCert.error"
},
"AuthCert.access": {
"level": "INFO",
"handlers": ["access_file"],
"propagate": 0,
"qualname": "AuthCert.access"
}
},
'handlers': {
"console": {
"class": "logging.StreamHandler",
"formatter": "generic",
"stream": "sys.stdout"
},
"error_file": {
"class": "logging.FileHandler",
"formatter": "generic",
"filename": "./log/error.log"
},
"access_file": {
"class": "logging.handlers.RotatingFileHandler",
"maxBytes": 1024 * 1024,
"backupCount": 5,
"formatter": "generic",
"filename": "./log/acess.log",
}
},
}
settings.py
接着,在views.py中生成logging
import logging
logger = logging.getLogger('AuthCert.error')
#然后使用logger.ingo('')、 logger.error('')
添加数据
def addUser(request):
"""
增加用户
""" if request.method == "POST": #添加数据
role = request.POST.get('role')
# creator = request.POST.get('creator')
name = request.POST.get('name')
sex = request.POST.get('sex')
username = request.POST.get('username')
password = request.POST.get('password')
# if not all([role, creator, name, sex, username, password]):
if not all([role, name, sex, username, password]): #如果参数没有填写完毕,返回‘参数不全’
logger.error('canshubuquan')
return HttpResponse('参数不全')
# 对密码进行MD5加密
else:
try:
pwd_salt = password + SALT #对前端填写的password进行加盐
password = hashlib.md5(pwd_salt.encode())
password = password.hexdigest()
print('password= ', password)
# 保存角色数据导数据库
Role = RoleTable()
Role.role = role
# Role.creator = creator
Role.save()
# 保存用户数据到数据库
User = UserTable()
User.role = Role
User.name = name
User.sex = sex
User.username = username
User.password = password
User.save() logger.info('增加用户成功')
return HttpResponse('add user success')
except Exception as e:
logger.error(e)
return HttpResponse(e)
else:
return render(request, 'add.html')
views.py
用户登录
def Login(request):
"""
用户登录
"""
if request.method == "POST":
username = request.POST.get('username')
pwd = request.POST.get('password')
pwd_salt = pwd + SALT #使用salt加密pwd
password = hashlib.md5(pwd_salt.encode())
password = password.hexdigest()
user = UserTable.objects.filter(username=username, password=password) #使用前端获取的username,和加密后的pwd,与数据库里的username,pwd进行对比 if len(user):
logger.info('success') #打印日志
return HttpResponse('登录成功')
else:
logger.error('username 、 password Error')
return HttpResponse('用户名密码不正确')
else:
return render(request, 'login.html')
views.py
单点登录前戏(未使用jwt版本)的更多相关文章
- JWT&RSA实现单点登录(详细介绍)
今天给大家讲一下基于JWT&RSA的单点登录(Single Sign On,简称SSO)解决方案 概念 首先要了解几个概念 单点登录(Single Sign On) JWT RSA 背景 为什 ...
- Spring Security构建Rest服务-1300-Spring Security OAuth开发APP认证框架之JWT实现单点登录
基于JWT实现SSO 在淘宝( https://www.taobao.com )上点击登录,已经跳到了 https://login.taobao.com,这是又一个服务器.只要在淘宝登录了,就能直接访 ...
- 看图理解JWT如何用于单点登录
单点登录是我比较喜欢的一个技术解决方案,一方面他能够提高产品使用的便利性,另一方面他分离了各个应用都需要的登录服务,对性能以及工作量都有好处.自从上次研究过JWT如何应用于会话管理,加之以前的项目中也 ...
- 170810、spring+springmvc+Interceptor+jwt+redis实现sso单点登录
在分布式环境中,如何支持PC.APP(ios.android)等多端的会话共享,这也是所有公司都需要的解决方案,用传统的session方式来解决,我想已经out了,我们是否可以找一个通用的方案,比如用 ...
- springboot+security+JWT实现单点登录
本次整合实现的目标:1.SSO单点登录2.基于角色和spring security注解的权限控制. 整合过程如下: 1.使用maven构建项目,加入先关依赖,pom.xml如下: <?xml v ...
- 初识单点登录及JWT实现
单点登录 多系统,单一位置登录,实现多系统同时登录的一种技术 (三方登录:某系统使用其他系统的用户,实现本系统登录的方式.如微信登录.支付宝登录) 单点登录一般是用于互相授信的系统,实现单一位置登录, ...
- Spring Security整合JWT,实现单点登录,So Easy~!
前面整理过一篇 SpringBoot Security前后端分离,登录退出等返回json数据,也就是用Spring Security,基于SpringBoot2.1.4 RELEASE前后端分离的情况 ...
- springBoot整合spring security+JWT实现单点登录与权限管理--筑基中期
写在前面 在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与 ...
- spring boot:spring security+oauth2+sso+jwt实现单点登录(spring boot 2.3.3)
一,sso的用途 ? 1,如果有多个应用系统,用户只需要登录一次就可以访问所有相互信任的应用系统. 不需要每次输入用户名称和用户密码, 也不需要创建并记忆多套用户名称和用户密码. 2,系统管理员只需维 ...
随机推荐
- BZOJ 2733 永无乡
splay启发式合并 启发式合并其实就是把集合数量小的合并到集合数量大的里去. 怎么合并呢,直接一个一个插入就行了.. 用并查集维护连通性,find(i)可以找到所在splay的编号 这题好像还可以合 ...
- ZJOI 2019 游记
一轮 现在才知道大家都写了2333,现在补上不晚吧. Day 0 跟Crossing打了一路的王者,丝毫没有困意.颁奖仪式看到rank 1 又是xj的zyz,QWQ.被冯缘的热情四射的演讲给吓到了.然 ...
- Oracle windows64位 百度云下载链接
oracle11g安装包 去官网需要登录 这个是百度云盘链接 链接:https://pan.baidu.com/s/18lYrkqqHG8u4aDdQekHc3g 提取码:fg2v
- Linux安装Oracle JDK替换OpenJDK详解
转自http://www.lsychina.com/howto_install_oracle-jdk_replace_openjdk_on_linux.html 众所周知,由于Oracle公司的JDK ...
- redis connection refused: connect 启动失败
先到redis解压包下执行 ./redis-server redis.conf 再连接 redis-cli
- DirectX11 With Windows SDK--27 计算着色器:双调排序
前言 上一章我们用一个比较简单的例子来尝试使用计算着色器,但是在看这一章内容之前,你还需要了解下面的内容: 章节 26 计算着色器:入门 深入理解与使用缓冲区资源(结构化缓冲区/有类型缓冲区) Vis ...
- java校验字符串是否为json格式
觉得挺好玩的一个问题,如何校验字符串是否为标准的json格式,刚开始的回答是jsonObject或者jsonArray转换一下,如果可以转换,说明为json字符串,如果不能就抛出异常,捕获异常. 但是 ...
- 蓝桥杯入门训练-Fibonacci数列
刚刚开始刷题的时候就栽了个大跟头,稍微记一下...... 一开始不是很理解:“我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数 ...
- java项目部署常用linux命令
1.显示当前所有java进程pid的命令:jps2.查找文件或文件夹目录查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查 ...
- postgresql设置主键
replace(((uuid_generate_v4())::character varying)::text, '-'::text, ''::text)