Auth的使用、缓存

auth 是什么,有什么作用

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

Auth模块是Django自带的用户认证模块:

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

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

默认的用户表示auth_user

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

模块常用方法

1 authenticate()

提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。

如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。

authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

python 复制代码
user = authenticate(username='usernamer',password='password')
2 login(HttpRequest, user)

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

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

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

python 复制代码
request.user.is_authenticated()

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

python 复制代码
	INSTALLED_APPS = [
    'django.contrib.auth',
	]

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

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

如果用户没登录

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

使用

python 复制代码
	-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

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('用户名密码错误')

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

怎么实现

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

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

python 复制代码
	-res=make_password('123456')
    -check_password(明文,密文)

扩写auth的user表

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

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

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

python 复制代码
	-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缓存(后期会用)

默认情况,缓存到内存中

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

缓存到文件中

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)
  }
 }   
}

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

  • 全站缓存---》只需要配置两个中间件即可
  • 视图缓存
  • 局部缓存---》在页面某个位置缓存
全站缓存,使用方式-如下-只需要配置中间件即可
python 复制代码
MIDDLEWARE = [
    '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})
局部缓存
python 复制代码
{% load cache %}
{% cache 10 'name' %}
可以能有很多代码
{% endcache %}
相关推荐
鱼鱼说测试2 分钟前
Linux下运行Jmeter
开发语言·python
六元七角八分9 分钟前
pom.xml
xml·数据库
Achou.Wang12 分钟前
源码分析 golang bigcache 高性能无 GC 开销的缓存设计实现
开发语言·缓存·golang
虚行19 分钟前
Mysql 数据同步中间件 对比
数据库·mysql·中间件
奥尔特星云大使21 分钟前
mysql读写分离中间件Atlas安装部署及使用
数据库·mysql·中间件·读写分离·atlas
牛马baby42 分钟前
【mysql】in 用到索引了吗?
数据库·mysql·in
杀气丶1 小时前
L2JBR - 修复数据库编码为UTF8
数据库·sql·oracle
-Xie-1 小时前
Mysql杂志(三十)——索引失效情况
数据库·mysql
为java加瓦1 小时前
Lombok @Data 注解在 Spring Boot 项目中的深度应用与实践指南
java·开发语言·数据库
CodeCraft Studio1 小时前
国产化Excel开发组件Spire.XLS教程:将Python列表转换为Excel表格(3种实用场景)
开发语言·python·excel·spire.xls·python列表转excel·国产化文档开发