本文主要是介绍【补充】1-auth的使用、扩写auth的user表、django支持缓存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 Auth的使用
1.1 扩写auth的user表
2 缓存
1 Auth的使用
# django 的一个app---》用户的登录,退出,注册。。。# 配置文件中配置:---》表会被迁移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# 目前阶段只用 auth_user来做用户的一些操作# 如果用户没登录request.user取出的是匿名用户:AnonymousUser类的对象---》也有pk,name,is_authenticated# auth的登录操作-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 passwordis_staff : 用户是否拥有网站的管理权限,能不能登录admin后台管理is_active: 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录is_active是False----authenticate也查不出来is_superuser:是否是超级管理员,admin中权限最高# 校验用户:必须传username和passworduser = authenticate(username='usernamer',password='password')from django.contrib.auth.models import Useruser=User.objects.filter(username=username).first()if user and user.check_password(password):print('用户名密码正确')else:print('用户名密码错误')# auth模块的密码加密--同样的密码--》再次加密--》密文也不一样# 如何实现?pbkdf2_sha256$ # 加密方式 260000$ #过期时间H93ubuUFw6FbYc6B8ojzKA$ # 随机串,,秘钥H0ZnaiJOm/pI4K802Y2TcO5SQ7iWDcx5E+mb/hdABd8= #明文加密后的# 后期如果你自己写了User表,但是想用人家的密码加密,就可以使用 -res=make_password('123456')-check_password(明文,密文)
1.1 扩写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 AbstractUserclass 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重装
2 缓存
# 页面静态化---
# 缓存---》本身数据在数据库中---》如果访问量较大---》每次都需要去数据库查询---》影响效率---》我们可以对数据做缓存--》以后先从缓存中取数据--》如果取到直接返回---》不需要查数据库---》如果取不到---》再查数据库---》查完放到缓存中# django 默认就支持缓存---》缓存到的位置内存缓存(演示)文件缓存 数据库缓存redis缓存# 默认情况,缓存到内存中
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',}
}# 缓存到文件中
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定缓存使用的引擎'LOCATION': 'D:\Python\django_05\cache', #指定缓存的路径'TIMEOUT':300, #缓存超时时间(默认为300秒,None表示永不过期)'OPTIONS':{'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300)'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)}}
}# 缓存的具体使用---》三种粒度-1 全站缓存---》只需要配置两个中间件即可-2 视图缓存-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 %}
这篇关于【补充】1-auth的使用、扩写auth的user表、django支持缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!