Django大回顾 - 9 Auth模块的使用、缓存

【1】Auth模块

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

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


默认的用户表示auth_user

创建一个用户:可以用代码,可以用命令

【1.1】模块常用方法

python 复制代码
'''
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】校验用户

python 复制代码
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模块加密

python 复制代码
'''

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

如何实现?
	pbkdf2_sha256$   # 加密方式 
    260000$           #过期时间
    H93ubuUFw6FbYc6B8ojzKA$ # 随机串,,秘钥
    H0ZnaiJOm/pI4K802Y2TcO5SQ7iWDcx5E+mb/hdABd8= #明文加密后的
    
后期如果你自己写了User表,但是想用人家的密码加密,就可以使用 
	-res=make_password('123456')
    -check_password(明文,密文)


'''

【2】缓存

页面静态化

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

【2.1】django默认缓存,缓存的位置

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

1、默认情况,缓存到内存中

python 复制代码
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}

2、缓存到文件中

python 复制代码
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】缓存的三种粒度

第一种:全站缓存

全站缓存,使用方式-如下-只需要配置中间件即可

python 复制代码
MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    。。。。。
    'django.middleware.cache.FetchFromCacheMiddleware'
]

'''

django.middleware.cache.UpdateCacheMiddleware        ----- 写在中间件的最前面

django.middleware.cache.FetchFromCacheMiddleware     ----- 写在中间件的最后面

'''

第二种:视图缓存

python 复制代码
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为过期时间

'''

第三种:局部缓存

html 复制代码
{% load cache %}


{% cache 10 'name' %}
可以能有很多代码
{% endcache %}

'''
必须要写{% load cache %}


cache     ------- 固定写法

10        ------- 过期时间

name       -------- 起个名字(随意)
'''
相关推荐
2401_8576226614 分钟前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_8575893618 分钟前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
FreakStudio43 分钟前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
丶21361 小时前
【CUDA】【PyTorch】安装 PyTorch 与 CUDA 11.7 的详细步骤
人工智能·pytorch·python
哎呦没1 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch2 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一个闪现必杀技2 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm
小鹿( ﹡ˆoˆ﹡ )2 小时前
探索IP协议的神秘面纱:Python中的网络通信
python·tcp/ip·php
卷心菜小温3 小时前
【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑
python·深度学习·语言模型·nlp·bug
陈苏同学3 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm