Django大回顾 - 9 Auth模块的使用、缓存
2023-12-13 12:28:56
【1】Auth模块
? auth就是django 的一个app,做用户管理。
?
Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统–auth,它默认使用 auth_user 表来存储用户数据
?
默认的用户表示auth_user
# 创建一个用户:可以用代码,可以用命令
????????【1.1】模块常用方法
'''
1、authenticate()
提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。
如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。
authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。
# 用法:
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中权限最高
'''
? ? ? ? 【1.2】校验用户
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('用户名密码错误')
? ? ? ? 【1.3】auth模块加密
'''
auth模块的密码加密--同样的密码--》再次加密--》密文也不一样
如何实现?
pbkdf2_sha256$ # 加密方式
260000$ #过期时间
H93ubuUFw6FbYc6B8ojzKA$ # 随机串,,秘钥
H0ZnaiJOm/pI4K802Y2TcO5SQ7iWDcx5E+mb/hdABd8= #明文加密后的
后期如果你自己写了User表,但是想用人家的密码加密,就可以使用
-res=make_password('123456')
-check_password(明文,密文)
'''
【2】缓存
页面静态化
缓存---》本身数据在数据库中---》如果访问量较大---》每次都需要去数据库查询---》影响效率---》我们可以对数据做缓存--》以后先从缓存中取数据--》如果取到直接返回---》不需要查数据库---》如果取不到---》再查数据库---》查完放到缓存中
? ? ? ? 【2.1】django默认缓存,缓存的位置
- 内存缓存(演示)
- 文件缓存
- 数据库缓存
- redis缓存(后期会用)
1、默认情况,缓存到内存中
?
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', } }
2、缓存到文件中
?
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) } } }
? ? ? ? 【2.2】缓存的三种粒度
????????????????第一种:全站缓存
全站缓存,使用方式-如下-只需要配置中间件即可
?
MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware', 。。。。。 'django.middleware.cache.FetchFromCacheMiddleware' ] ''' 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}) ''' 使用@cache_page装饰器 timeout为过期时间 '''
? ? ? ? 第三种:局部缓存
{% load cache %}
{% cache 10 'name' %}
可以能有很多代码
{% endcache %}
'''
必须要写{% load cache %}
cache ------- 固定写法
10 ------- 过期时间
name -------- 起个名字(随意)
'''
文章来源:https://blog.csdn.net/m0_69962105/article/details/134842456
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!