【补充】1-auth的使用、扩写auth的user表、django支持缓存

[1 Auth的使用](#1 Auth的使用)
[1.1 扩写auth的user表](#1.1 扩写auth的user表)
[2 缓存](#2 缓存)

1 Auth的使用

python 复制代码
  # 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 
            password
            is_staff : 用户是否拥有网站的管理权限,能不能登录admin后台管理
            is_active: 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录
                is_active是False----authenticate也查不出来
            is_superuser:是否是超级管理员,admin中权限最高
    
        
        
        
    # 校验用户:必须传username和password
    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('用户名密码错误')
        
        
        
    # auth模块的密码加密--同样的密码--》再次加密--》密文也不一样
    # 如何实现?
    	pbkdf2_sha256$   # 加密方式 
        260000$           #过期时间
        H93ubuUFw6FbYc6B8ojzKA$ # 随机串,,秘钥
        H0ZnaiJOm/pI4K802Y2TcO5SQ7iWDcx5E+mb/hdABd8= #明文加密后的
        
    # 后期如果你自己写了User表,但是想用人家的密码加密,就可以使用 
    	-res=make_password('123456')
        -check_password(明文,密文)

1.1 扩写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表来扩写
	-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重装

2 缓存

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

# 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 %}
相关推荐
weixin_462428475 分钟前
使用 Caffeine 缓存并在业务方法上通过注解实现每3到5秒更新缓存
java·缓存
Daniel 大东1 小时前
idea 解决缓存损坏问题
java·缓存·intellij-idea
起飞的风筝1 小时前
【redis】—— 环境搭建教程
数据库·redis·缓存
Mr.咕咕1 小时前
Django 搭建数据管理web——商品管理
前端·python·django
pcj_8883 小时前
Django基础用法+Demo演示
python·django
工业互联网专业3 小时前
Python毕业设计选题:基于django+vue的仓库管理系统设计
vue.js·python·django·毕业设计·源码·课程设计
古人诚不我欺3 小时前
Redis设置密码认证,以及不重启服务情况下设置临时密码
数据库·redis·缓存
KEEPMA12 小时前
python练习-Django web入门
前端·python·sqlite
ktkiko111 天前
Redis中的缓存设计
数据库·redis·缓存
q567315231 天前
通过scrapy和Django登录、爬取和持久化数据
java·开发语言·数据库·scrapy·django