当前位置: 首页 > article >正文

Auth的使用、缓存

auth 是什么,有什么作用

auth就是django 的一个app,做用户管理

Auth模块是Django自带的用户认证模块:
我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统–auth,它默认使用 auth_user 表来存储用户数据

默认的用户表示auth_user
创建一个用户:可以用代码,可以用命令

模块常用方法

1  authenticate()

提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。
如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。
authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

user = authenticate(username='usernamer',password='password')
2 login(HttpRequest, user)

登录认证通过,调用一下这个方法,以后从request.user中才能取出当前登录用户

3 退出,一定要调用logout(request)
4 is_authenticated()

判断当前用户是否登录--不能使用request.user 是否有值来判断,因为他一直有值

request.user.is_authenticated()

配置文件中配置:---》表会被迁移

	INSTALLED_APPS = [
    'django.contrib.auth',
	]

auth有哪些表---权限控制:

	-Permission:auth_permission
    -Group:auth_group
    -User:auth_user  --->密码加密--》
    
    -auth_group_permissions
    -auth_user_groups
    -auth_user_user_permissions

如果用户没登录

request.user取出的是匿名用户:AnonymousUser类的对象---》也有pk,name,is_authenticated

使用

	-1 user = authenticate(username='usernamer',password='password')
    -2 login:用户校验通过,让它登录,执行它
    	-当前登录用户写入到session中
    	-后续 request.user 就能拿到当前登录用户
    -3 logout:退出---》清空session
	-4 request.user.is_authenticated   返回True或False
    -5 login_requierd :登录认证装饰器---》放在视图函数上 
        @login_required(login_url='/login/')
    -6 create_user:普通用户
    	-User.objects.create()--密码是加密的---》这样存密码是明文的
    -7 create_superuser:超级用户  python38 manage.py createsuperuser

	-8 check_password :通过明文密码校验密码是否正确
    -9 set_password:修改密码
    	user.set_password(new_password)
        user.save()
        
    -10 User对象的属性
        username 
        password
        is_staff : 用户是否拥有网站的管理权限,能不能登录admin后台管理
        is_active: 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录
            is_active是False----authenticate也查不出来
        is_superuser:是否是超级管理员,admin中权限最高

校验用户:必须传username和password

user = authenticate(username='usernamer',password='password')
from django.contrib.auth.models import User
user=User.objects.filter(username=username).first()
if user and user.check_password(password):
    print('用户名密码正确')
else:
    print('用户名密码错误')

uth模块的密码加密--同样的密码--》再次加密--》密文也不一样

怎么实现

	pbkdf2_sha256$   # 加密方式 
    260000$           #过期时间
    H93ubuUFw6FbYc6B8ojzKA$ # 随机串,,秘钥
    H0ZnaiJOm/pI4K802Y2TcO5SQ7iWDcx5E+mb/hdABd8= #明文加密后的

 后期如果你自己写了User表,但是想用人家的密码加密,就可以使用

	-res=make_password('123456')
    -check_password(明文,密文)

扩写auth的user表

第一种方案:通过一对一扩展

from django.contrib.auth.models import User
class UserDetail(models.Model):
    user=models.OneToOneField(to=User)
    phone=models.CharField(max_length=32)

 第二种:通过继承 AbstractUser表来扩写

	-1 在models.py中写 用户表
    from django.contrib.auth.models import AbstractUser
    class UserInfo(AbstractUser):
        # 原来有的字段就不需要写了,只需要扩写你想写的字段
        mobile=models.CharField(max_length=32)
        icon=models.ImageField(upload_to='/icon/',default='default.png')
        
    -2 在settings.py 配置
    	AUTH_USER_MODEL='app01.UserInfo'
    -3 之前不要迁移数据,一旦迁移过,就不行了
    	-一旦迁移过了,按这个步骤操作
        	-1 删库
            -2 删迁移文件(所有你写的app都删)
            -3 删除源码中 auth和admin的迁移文件---》写在djagno重装

缓存

页面静态化

缓存---》本身数据在数据库中---》如果访问量较大---》每次都需要去数据库查询---》影响效率---》我们可以对数据做缓存--》以后先从缓存中取数据--》如果取到直接返回---》不需要查数据库---》如果取不到---》再查数据库---》查完放到缓存中

django 默认就支持缓存---》缓存到的位置

    内存缓存(演示)
    文件缓存 
    数据库缓存
    redis缓存(后期会用)

默认情况,缓存到内存中

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}

缓存到文件中

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定缓存使用的引擎
  'LOCATION': 'D:\Python27\django_05\cache',        #指定缓存的路径
  'TIMEOUT':300,              #缓存超时时间(默认为300秒,None表示永不过期)
  'OPTIONS':{
   'MAX_ENTRIES': 300,            # 最大缓存记录的数量(默认300)
   'CULL_FREQUENCY': 3,           # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
  }
 }   
}

缓存的具体使用---》三种粒度

  • 全站缓存---》只需要配置两个中间件即可
  • 视图缓存
  • 局部缓存---》在页面某个位置缓存
全站缓存,使用方式-如下-只需要配置中间件即可
MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    。。。。。
    'django.middleware.cache.FetchFromCacheMiddleware'
]
视图缓存
from django.views.decorators.cache import cache_page
@cache_page(timeout=10)
def demo09(request):
    print('来了老弟')
    book_list = Book.objects.all()
    return render(request, 'books.html', {'books': book_list})
局部缓存
{% load cache %}
{% cache 10 'name' %}
可以能有很多代码
{% endcache %}


http://www.kler.cn/a/160414.html

相关文章:

  • OceanStor Pacific系列 8.1.0 功能架构
  • 专题十八_动态规划_斐波那契数列模型_路径问题_算法专题详细总结
  • Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)
  • 阿里云和七牛云对象存储区别和实现
  • 【大数据测试HBase数据库 — 详细教程(含实例与监控调优)】
  • 搭建Python2和Python3虚拟环境
  • 普中STM32 单片机资料
  • Vue+ElementUI技巧分享:结合Sortablejs实现表格行拖拽
  • 高防CDN技术的崛起与网络安全的演进
  • 多平台展示预约的服装小程序效果如何
  • 探索人工智能领域——每日20个名词详解【day10】
  • 初级数据结构(二)——链表
  • R语言学习
  • SHAP(五):使用 XGBoost 进行人口普查收入分类
  • 打包 抖音直播云游戏
  • 【Delphi】一个函数实现ios,android震动功能 Vibrate(包括3D Touch 中 Peek 震动等)
  • 图像处理中的角点检测Python-OpenCV 中的实现
  • mysql的组合查询
  • 【GAMES101】二维变换和齐次坐标
  • 华为配置风暴控制示例
  • 富时中国A50指数查询方法详解
  • Matlab 曲线动态绘制
  • OpenHarmony北向-让更广泛的应用开发者更容易参与
  • 【南京站-EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)
  • C/C++---------------LeetCode第2154. 将找到的值乘以 2
  • 微信小程序 -- ios 底部小黑条样式问题