2.1 cookie
- 保存在浏览器上的键值对
- 可以主动清除
- 可以被伪造
- 跨域名
cookie
不共享
# 服务端设置cookie
ret = redirect("...")
ret.set_cookie('key','value',max_age=10,path='/',)
ret.set_signed_cookie('key','value',salt='加密盐',...)
# 获取cookie
request.COOKIES.get('key')
ret.get_signed_cookie('key')
# 删除cookie
ret.delete_cookie(...)
# 客户端浏览器设置cookie
<script src="jquery.cookie.js"></script>
$.cookie('key','value',{'path':'/'})
2.2 session
- 客户端
cookie
:sessionid = session_key(随机字符串)
- 键值对保存在
django-session
表中:session_key, session_data, expire_date
# 设置session
request.session['usr'] = 'admin'
request.session['pwd'] = '123456'
# 获取session
usr_name = request.session['usr']
usr_name = request.session.get('pwd',defalut=None)
# 删除session
del request.session['usr']
# 删除当前的会话数据并删除会话的Cookie
request.session.flush()
setting.py
配置
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key
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 = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
2.3 调用auth模块
# 原生auth用户表
from django.contrib import auth
from django.contrib.auth.models import User
# 自定义auth用户表
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
"""
用户信息表(自定义的auth组件):
用户名|密码|电话|创建时间|头像文件
"""
telephone = models.CharField(max_length=11, null=True, unique=True)
create_time = models.DateTimeField(auto_now_add=True, verbose_name='用户创建时间')
avatar = models.FileField(upload_to='avatars/', default='avatars/default.png')
2.2 注册
# 方法一:终端指令
python3 manage.py createsuperuser
# 方法二:对象实例化(常用)
User.objects.create_user(username=usr, password=pwd)
2.3 登录
# 与数据库账户、密码校验,验证成功返回obj对象,失败返回None
obj = auth.authenticate(username=usr, password=pwd)
if obj:
# 登录成功,使用django的session框架给该用户附加上session id等信息
auth.login(request, obj)
2.4 注销
# 当前请求的session信息会全部清除,源码调用request.session.flush()
auth.logout(request)
2.5 判断是否登录状态
# 未登录
if request.user.uesrname: # 用户名,未登录为空
if request.user.id: # None
if request.user.is_anonymous: # True,匿名用户
if request.user.is_authenticated # false
2.6 修改密码
use r = User.objects.get(username='')
# 校验旧密码
user.check_password(pwd)
# 设置新密码
user.set_password(password='')
user.save
2.7 装饰器
-
视图函数
from django.contrib.auth.decorators import login_required # 若用户没有登录,则会跳转到django默认的登录URL "/accounts/login/" @login_required def my_view(request): ...
-
settings.py
文件设置LOGIN_URL
LOGIN_URL = "/login/"
2.8 全局变量request.user
from django.contrib.auth.models import AnonymousUser
# 未登录
request.user == AnonymousUser # 匿名对象
# 登录
request.user == obj # 登录对象