1-Auth系统中的表
(1)auth系统的数据表
从表的名称我们就能看出,
auth_user,auth_group,auth_permission分别
存放了用户,用户组,权限的信息表.
另外三张表就是多对多的关系表
User:User是auth模块中维护用户信息的关系模式(继承了models.Model), 数据库中该表被命名为auth_user.
Group:User对象中有一个名为groups的多对多字段, 多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户。
Permission:Django的auth系统提供了模型级的权限控制, 即可以检查用户是否对某个数据表拥有增(add), 改(change), 删(delete)权限
(2)auth系统中User模型常用属性和方法
(3)auth认证系统功能
create_user 创建用户
authenticate 验证登录
login 记住用户的登录状态
logout 退出登录
is_authenticated 判断用户是否登录
login_required 判断用户是否登录的装饰器
(4)使用auth系统
在auth系统当中,django已经为我们提供了一个用户身份验证,用户组和权限管理这些功能, 那么就可以使用它来完善我们现有的这个项目.
接下来我们要在现有的项目中实现以下功能:
1.使用内置的auth_user表来存储用户注册信息.
2.使用auth系统中的login,logout,authenticate实现登录,退出和验证登录
3.给blog中的视图设置登录使用权限
4.给添加博客设置用户的权限
准备工作:
1.创建一个新的app,并将app注册.
2.准备好之前使用过的登录注册的模板和form表单的验证.
3.给视图配置好相应的url路由.
4.导入我们需要使用的auth中的User模型,login,logout,authenticate方法.
注意: 对于这个登录注册的例子中, 我们把之前自己定义的模型类改成了使用auth系统中的User模型类, 在User类中同样存在着用户名,密码,邮箱这几个字段,
所以我们可以继续使用之前的form表单和之前用过的模板
(5)使用auth系统实现登录注册
1-使用auth系统实现登录注册
2-使用auth系统实现状态保持与退出
3-login_required装饰器
在没有登录的状态下去访问我们的blog中主页的url时就会出现跳转到登录页
4-next url的使用
从刚才的登录页跳转中,我们会看到一个next的参数,
这个参数前面的需要登录的那个视图的url
代码:
views.py
python
from django.contrib.auth.decorators import login_required
from django.shortcuts import render,redirect,reverse
from django.views import View
from django.http import HttpResponse
from django.contrib.auth.models import User #导入User模型 (注册)
from django.contrib.auth import login , logout #保存状态
from django.contrib.auth import authenticate #认证django提供的用户表
def index(request):
"""
查找 如果查到了就直接显示登录状态 没有就提示登录
:param request:
:return:
"""
return render(request,'zuoye/index.html')
def exit(request):
logout(request)
return redirect(reverse("zuoye:index"))
#注册
class RegistView(View):
def get(self,request):
return render(request,"zuoye/res.html")
def post(self, request):
username = request.POST.get("username")
password = request.POST.get("password")
email = request.POST.get("email")
#print(email)
#存入数据到表中
User.objects.create_user(username=username,password=password,email=email) #创建普通用户
return HttpResponse("普通用户注册成功!")
#登录
class LogView(View):
def get(self,request)