auth系统的登入注册和权限控制
创建一个管理员用户管理站点
打入命令python manage.py createsuperuser
,按照提示输入。
注意:必须在该虚拟环境中进行操作。同时要在项目的目录下运行。
管理admin界面
在settings中:
- 找到LANGUAGE_CODE = ‘zh-hans’ 这个是控制将页面上的英文转化成中文。
- 找到TIME_ZONE = 'ASIA/Shanghai’将时区更改
向admin注册模型
from django.contrib import admin
# Register your models here.
from .models import Department,Student,Course#这里是导入已有的模型
#在register中注册已有的模块
admin.site.register(Department)
admin.site.register(Student)
admin.site.register(Course)
这样就可以在网页中直接对数据进行操作
自定义管理页面
Django
提供了admin.ModelAdmin
类
通过定义ModelAdmin
的子类,来定义模型在Admin
界面的显示方式
列表页属性
list_display
:显示字段,可以点击列头进行排序
list_filter
:过滤字段,过滤框会出现在右侧
search_fields
:搜索字段,搜索框会出现在上侧
list_per_page
:分页,分页框会出现在下侧
添加、修改页属性
fields
:属性的先后顺序
fieldsets
:属性分组
注意:上面两个属性,二者选一。
这个是模型的代码
class Department(models.Model):
d_id = models.AutoField(primary_key=True)
d_name = models.CharField(max_length=30)
def __str__(self):
return 'Department<d_id=%s,d_name=%s>'%(
self.d_id,self.d_name
)
class Student(models.Model):
s_id = models.AutoField(primary_key=True)
s_name = models.CharField(max_length=30)
department = models.ForeignKey('Department')
course = models.ManyToManyField('Course')
def __str__(self):
return 'Student<s_id=%s,s_name=%s>'%(
self.s_id,self.s_name
)
class Course(models.Model):
c_id = models.AutoField(primary_key=True)
c_name = models.CharField(max_length=30)
def __str__(self):
return 'Course<c_id=%s,c_name=%s>'%(
self.c_id,self.c_name
)
对模型注册后台的显示格式
-
创建对应的类
from .models import Department,Student,Course class DepartmentAdimin(admin.ModelAdmin): list_display = ['d_id','d_name']#分别显示它的id和部门名字 list_display_links = ['d_id','d_name']#设置字段可以点击进入编辑界面 list_filter = ['d_id']#过滤框,会出现在右侧。 search_fields = ['d_name']#加入搜索框 class StudentAdimin(admin.ModelAdmin): list_display = ['s_id','s_name'] list_display_links = ['s_id','s_name'] # fields = ['s_name','course','department'] fieldsets = [ ('一组',{'fields':['s_name']}), ('二组',{'fields':['department','course']}) ] class CourseAdmin(admin.ModelAdmin): list_display = ['c_id','c_name'] list_display_links = ['c_id','c_name'] list_per_page = 5
- 让格式起作用必须要继承以上的类
admin.site.register(Department,DepartmentAdimin)
admin.site.register(Student,StudentAdimin)
admin.site.register(Course,CourseAdmin)
User用户创建
from django.contrib.auth.models import User
User.objects.create_user(username=username,password=password,email=email)#这个就是用auth创建一个用户,这是一个内置表。
验证用户的存在
from django.contrib.auth import authenticate
user = authenticate(username=username,password=password)#这个就是验证系统
if user is not None:
# 这个用户存在
else:
# 这个用户不存在
加上上面的验证代码,下面是实现基本的登入
from django.contrib.auth import authenticate, login
def my_view(request):
username = request.POST['username']#获取请求里面的数据
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:#查看数据库中是否存在该用户信息
if user.is_active:
login(request, user)#保存用户的登入状态
# 登录成功
else:
# 用户没有被激活,不能登录
else:
# 用户名或者密码错误
退出功能
from django.contrib.auth import logout
def logout_view(request):
logout(request)#将该用户的session清除。
用户至上
在用户没有登入成功时,用户肯定不想看到一个404的报错页面,而是其它他能看的懂得提示页面
下面的操作可以提供舒适
login_required
装饰器,可以让页面自动跳转。
from django.contrib.auth.decorators import login_required
@login_required#验证登入装饰器
def auto_view(request):
return 后面是要渲染的页面
在settings里面设置属性
LOGIN_URL
="/appname/视图名字
"这个就是,当用户访问没有权限的网站的时候,就会自动的跳转的这个路径上去。
这里存在的问题
不同的用户设置不同的权限又怎么实现呢?
下面,给用户设置门槛,也就是装饰器
装饰器总结:
- login_required设置登入验证
- permission_required设置权限验证
权限的设置,在数据库中的auth_permissions中详细记录。在mysql中打入你连接的数据库,输入show tables; ,然后再输入 select ✳ from auth_permissions;查看权限设置
ex:
权限判断
from django.contrib.auth.decorators import permission_requred
from django.http import HttpResponse
def pems_add(request)#给用户添加权限
user = User.object.filter(name = "")#先获取到对象
pems = Permission.objects.filter(codename = "权限名")#获取权限
user.user_permissions.add(pems)#添加权限
return HttpResponse("权限注册成功")
@permission_required("appname.codename")#这个是验证权限
def add(request):#只有拥有添加权限的用户才能调用此视图函数
pass