12月12日学习内容整理:F和Q查询,session和cookie回顾,auth模块和user对象(用户登录认证系统)
一、F查询和Q查询
引入:from django.db.models import F,Q
1、F查询
F(字段名) 就表示该字段值
应用在不同的字段之间进行比较或者修改字段等
注意:F函数不能对字符串进行操作
2、Q查询
Q(字段名=字段值) 括号里写的是条件
应用在表示更为复杂的查找条件关系
&代表与 |代表或 ~代表非 也可以加括号表示优先级
二、session和cookie
对于session来说,
我们在后端设置键值对,那django做了两件事:
(1) set_cookie("sessionID","2134shdc329cbk398asdbk2") 给客户端写cookie,就是一个随机字符串
(2) 数据库的django_session表中插入一条记录: 也就是在服务端保存的session数据,保存在django_session表中
我们接受请求取session的键值对时,django也做了两件事:
uuid=request.COOKIE.get("sessionID") 就是从客户端发过来的请求中取出cookie携带的随机字符串
django的session表中做过滤: 利用这个随机字符串去session表中进行过滤查找出相应的字段值
三、Django的登录验证之auth模块
引入:from django.contrib import auth
1、auth模块对应的是auth_user这张表,不用我们自己创建,在Django数据库迁移的时候自动创建,password字段是加密的
2、主要应用:auth模块为我们提供API来对session进行验证和设置,不用我们自己去设置session字段和验证session数据
3、方法
(1)验证方法:
user=auth.authenticate(username=user,password=pwd) 自动去auth_user这张表中去查询是否有这条记录,并把密码加密
有就返回对应的model对象,没有就返回None
django会给当前这个model对象,也就是user对象加上一个属性标识来证明这个对象登陆过
(2)设置session
auth.login(request,user) 参数是请求对象request,当前的记录对象 就相当于request.session["user"]=user.username,django会自动在django_session表中构建session数据
(3)删除session
auth.logout(request) 相当于我们自己写request.session.flush()
没有返回值
四、Django的登录验证之user对象
我们所写的一些项目基本都是要在用户登录之后才能进行别的操作,那我们之前都是用session来判断它的登录状态,django为我们提供了user对象及一些方法帮我们做这件事
1、request.user 请求对象的user属性就可以表示当前用户登录的用户对象,也就是user对象,若没有登录就返回一个匿名用户对象anonymonsuser(字段值一般为空或字符串等) 所以我们不能依据这个属性有没有返回值来判断是否已登录
这是auth模块为我们提供的方法,如果不引入auth模块,没有经过auth.login()方法写入session,这个方法没有意义
2、方法
(1)判断是否已登录
user.is_authenticated():返回布尔值,该用户登录则为True,否则为False
(2)注册
from django.contrib.auth.models import User 这个User就是auth_user这张表,我们所说的user对象其实就是表中的一条记录
user=User.objects.create_user(username=user,password=pwd) 这就创建出了一个user对象,可以用auth模块的验证方法进行验证
user=User.objects.create_superuser(username=user,password=pwd) 创建一个超级用户
(2)修改密码
user=User.objects.get(username=
''
) 要先得到这个被修改的user对象
user.set_password(new_pwd)
user.save()