auth系统的登入注册和权限控制

auth系统的登入注册和权限控制

创建一个管理员用户管理站点

打入命令python manage.py createsuperuser,按照提示输入。

注意:必须在该虚拟环境中进行操作。同时要在项目的目录下运行。

管理admin界面

在settings中:

  1. 找到LANGUAGE_CODE = ‘zh-hans’ 这个是控制将页面上的英文转化成中文。
  2. 找到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
        )

对模型注册后台的显示格式

  1. 创建对应的类

    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

    1. 让格式起作用必须要继承以上的类
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/视图名字"这个就是,当用户访问没有权限的网站的时候,就会自动的跳转的这个路径上去。

这里存在的问题

不同的用户设置不同的权限又怎么实现呢?

下面,给用户设置门槛,也就是装饰器

装饰器总结:

  1. login_required设置登入验证
  2. 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
发布了22 篇原创文章 · 获赞 20 · 访问量 746

猜你喜欢

转载自blog.csdn.net/qq_43596002/article/details/102338800