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 %}
相关推荐
liulilittle3 分钟前
SQLite3 C++ usage demo
数据库·c++·sqlite
用户8356290780517 分钟前
使用 Python 精准控制 Word 段落格式
后端·python
NULIWEIMENXIANG8 分钟前
ArcPy 程序调用 QGIS 进程实现几何拓扑检查
python·arcgis·gis
路由侠内网穿透8 分钟前
本地部署开源网络书签与内容管理工具 Karakeep 并实现外部访问
运维·服务器·网络·数据库·开源
rookie软工11 分钟前
Qt代理委托实现
开发语言·python·qt
一只会跑会跳会发疯的猴子15 分钟前
php操作mysql数据库增删改查
数据库·mysql·php
love530love15 分钟前
Windows 本地部署 IDM-VTON 虚拟试衣:排障版教程
人工智能·windows·python·virtual try-on
忘忧记17 分钟前
pytest进阶参数化用法
前端·python·pytest
JavaWeb学起来24 分钟前
Python学习教程(二)字符串
开发语言·python·python基础
归寻太乙28 分钟前
2026年03月27日—Python基础—Python背景知识与环境搭建
开发语言·python