单点登录前戏(未使用jwt版本)
2024-09-16 00:47:27
建表
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
最新文章
- CSS基础篇之选择符
- 小白如何进入IOS,答案就在这里
- Jquery获取checkbox属性checked为undefined
- Solr5.3.1通过copyField设置多个field(字段)同时检索
- Oracle结果集 (MSSQL存储过程写报表)
- HttpRequest
- Inna and Binary Logic
- 前端MVC学习笔记(二)——AngularJS验证、过滤器、指令
- CentOS6.5 常用命令
- 腾讯云上PhantomJS用法示例
- Problem 1: Multiples of 3 and 5
- .net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(二)
- PB的一些记录
- java 知识体系
- Spring Boot 中使用 Jedis 及 Lettuce的对比
- Win10无法使用内置管理员用户打开edge解决方案
- git push 问题汇总
- oracle11g在没DNS情况下failover的配置方法
- 原生 JS 的 Base64 转码
- DDR3调试记录