一、 cookie(存放于客户端,不安全,容易被修改)
1. 设置cookie
key是键名,可以是任意名字
不加密的cookie(原始cookie)
HttpResponse.set_cookie(key, value='', max_age=None, expires=None,
path='/', domain=None, secure=None, httponly=False)
加密的cookie(通过盐值加密)
HttpResponse.set_signed_cookie(key, value, salt='', max_age=None,
expires=None, path='/', domain=None, secure=None, httponly=False)
参数名称 | 说明 |
---|---|
key | cookie的名称(*) |
value | cookie的值,默认是空字符 |
max_age | cookies的持续有效时间(以秒计),如果设置为 None,cookies 在浏览器关闭的时候就失效了。 |
expires | cookies的过期时间,格式:“Wdy, DD-Mth-YY HH:MM:SS GMT” 如果设置这个参数,它将覆盖max_age |
path | cookie⽣效的路径前缀,浏览器只会把cookie回传给带有该路径的⻚⾯,这样你可以避免将cookie传给站点中的其他的应⽤。/ 表示根路径,特殊的:根路径的cookie可以被任何url的⻚⾯访问 |
secure | 如果设置为 True ,浏览器将通过HTTPS来回传cookie。 |
httponly | 仅http传输 不能使⽤js获取cookie |
2.获取cookie
原始cookie获取
HttpRequest.COOKIES.get(key)
加密cookie获取
HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt='',
max_age=None)
3.删除cookie
#删除cookie
HttpResponse.delete_cookie(key, path='/', domain=None)
#使cookie立即失效
HttpResponse.set_cookie(key,'',max_age=-1)
二、session(存放于服务器,安全性高)
django中session的实现
1.在settings.py中配置
#djangoo自带部分
INSTALLED_APPS = [
'django.contrib.sessions',
]
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
]
其他常用配置
SESSION_COOKIE_NAME="sessionid" # Session的cookie保存在浏览器上时的
key,即:sessionid=随机字符串
SESSION_COOKIE_PATH="/" # Session的cookie保存的路径
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名
SESSION_COOKIE_SECURE = False # 是否Https传输cookie
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只⽀持http传输
SESSION_COOKIE_AGE = 7*24*60*60 # Session的cookie失效⽇期(2周) 默认
1209600秒
SESSION_EXPIRE_AT_BROWSER_CLOSE =True # 是否关闭浏览器使得Session过期
SESSION_SAVE_EVERY_REQUEST = True
#如果你设置了session的过期时间 30分钟后,这个参数是False 30分钟过后,
session准时失效
#如果设置 True,在30分钟期间有请求服务端,就不会过期!
2.数据迁移,生成session使用的数据库表
控制台指令
python manage.py migrations
python manage.py migrate
session设置
request.session['key'] = 123
request.session.setdefault('key','default') # 存在则不设置
session获取
request.session.get('key')
session删除
request.session.clear() #清空所有session 但是不会将session表中的数据删除
request.session.flush() #清空所有 并删除表中的数据
request.session.logout() #退出登录 清除所有 并删除表中的数据
del req.session['key'] 删除某⼀个session的值
获取session所有键值对
request.session.keys() #获取所有的键
request.session.values() #获取所有的值
request.session.items() #获取所有的键值对
session 过期时间
request.session.set_expiry(value)
‘’‘
1. 如果value是个整数,session会在些秒数后失效。
2. 如果value是个datatime或timedelta,session就会在这个时间后失效。
3. 如果value是0,⽤户关闭浏览器session就会失效。
4. 如果value是None,session会依赖全局session失效策略。
’‘’
三、用户认证系统
1.在app models中创建抽象用户类
继承自AbstractUser(django自带类)
eg
class User(AbstractUser):
phone = models.CharField(max_length=50,null=True)
class Meta:
db_table = 'user'
2.settings中设置自定义用户模型
#自定义用户模型
AUTH_USER_MODEL = "app名字.User"
3.控制台迁移
python manage.py makemigrations
python manage.py migrate
注册时的用法
验证通过后注册用户时
用户对象创建,密码直接自行加密
User.objects.create_user(username=username,password=password,email=email)
登录密码验证以及记录用户登录状态
def login_view(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 验证⽤户是否存在(*)
user = authenticate(request, username=username,
password=password)
if user:
# 判断⽤户是否激活
if user:
#记录登录状态(*)
login(request, user)
return redirect('/')
else:
return render(request, 'test/login.html', {'msg': '⽤户尚未激活'})
else:
return render(request, 'test/login.html', {'msg': '⽤
户密码错误'})
else:
return render(request, 'login.html')
登出操作
logout(request)
只允许登录⽤户访问
# settings 配置
LOGIN_URL = '/day05/login/'
# views(也可以在装饰器后加上未登录需要跳转的的路由地址)
@login_required((login_url='/app04/login/'))
def find_user_info(request):
pass