Django5入门(速通版) 第八章 内置Admin系统

目录

1.Django5内置Admin系统初体验

2.Django5注册模型到Admin系统

        2.1方式一 直接注册

        2.2方法二 自定义类

3.Django5内置Admin系统自定义设置

4.Django5内置Admin系统二次开发

        4.1创建普通管理员

        4.2设置不可编辑字段

        4.3自定义Admin模版

5.Django5内置Auth认证系统

        5.1用户注册实现

        5.2用户登录实现

        5.3用户修改密码实现

        5.4用户注销实现


Admin后台系统也称为网站后台管理系统,主要对网站的信息进行管理,如文字、图片、影音和其他日常使用的文件的发布、更新、删除等操作,也包括功能信息的统计和管理,如用户信息、订单信息和访客信息等

简单来说,它是对网站数据库和文件进行快速操作和管理的系统,以使网页内容能够及时得到更新和调整

1.Django5内置Admin系统初体验

        网站管理员通过网站后台系统对网站进行管理和维护
        Django 已内置Admin后台系统

        在setting中可查看

        urls中自动定义了Admin映射:

        输入http://127.0.0.1:8000/admin/进入网页:

        网页默认英文,可以在setting的中间件中设置:

        系统自带的数据库表单有6个,其中auth_user是存放管理员信息,默认无数据

        通过manage. py的createsuperuser命令来创建超级管理员的账号密码:

        输入 createsuperuser命令,提示让我们输入用户名,再输入邮箱,以及密码和确认密码,最终可以强制输入y,确认

        可以在页面登录:

        在Admin后台系统中可以看到,网页布局分为站点管理、认证和授权、用户和组,分别说明如下:

        站点管理是整个Admin后台的主体页面,整个项目的App所定义的模型都会在此页面显示。

        认证和授权是Django内置的用户认证系统,包括用户信息、权限管理和用户组设置等功能。

        用户和组是认证和授权所定义的模型,分别对应数据表auth_user和 auth_user_groups。

2.Django5注册模型到Admin系统

        开发业务项目时,可以将模块注册到Admin系统,让Admin系统来维护这些模型

        也就是在Admin后台自动给模型实现增删改查功能

        注册模型到Admin系统有两个方式

        2.1方式一 直接注册

                直接将模型注册到admin后台,以BookType为例:

                在admin.py中添加语句:

                结果:

                可对其进行增删改查操作

        2.2方法二 自定义类

                继承ModelAdmin,以BookInfo为例:

                在admin.py中创建模型

                结果:

                也可以进行增删改查工作

                ModelAdmin类里看下,可以对模型的增删改查操作做精细化的配置,包括显示字段,分页,可编辑字段,查询字段,排序等

3.Django5内置Admin系统自定义设置

        在使用Django5的内置Admin系统时会发现一些默认的设置,并不符合业务需求,需要自定义设置

        可以修改模块名称

        在项目下的apps.py中,配置类中加入代码:

        结果:

        网站标题和子标题也可更换:

        在admin.py中设置:

        结果:

        头部标题也可替换:

        在admin.py中设置:

        结果:

4.Django5内置Admin系统二次开发

        4.1创建普通管理员

                点击认证和授权模块下用户右侧的添加按钮:

                输入信息之后保存

                为其添加管理员状态:

                给予用户权限:

                最后点击保存

                可以重新登录新的管理员账号:

        4.2设置不可编辑字段

                业务开发时,有时候一些敏感字段,不允许普通管理员修改。可以通过重写ModelAdmin的get_readonly_fields()方法实现

                在admin下的自定义类型中进行重写:

                可以点击修改,发现图书名称不可修改:

                可在模型中为英文字段添加字段名称:

                可以在models.py里,加下verbose_name配置即可

                结果:

                若登录的为超级管理员,可编辑所有内容

                当然还有很多细粒度设置的方法,如下

                formfield_for_foreignkey() 设置外键下拉框过滤筛选

                formfield_for_foreignkey() 重写外键下拉框数据,比如增加下拉选项。

                save_model() 添加或者修改处理逻辑重写 ,可以增加一些日志等处理。

                等等...

        4.3自定义Admin模版

                Admin后台管理系统的模版文件和Django框架内置提供的,我们可以在源码里找到

                在.venv --> Lib --> site-packages -->  django --> contrib --> admin --> templates下

                提倡在项目的模块项目的templates下,通过优先级来实现修改模版

                方法如下:

                在项目下的templates下,新建admin目录,然后admin目录下创建要覆盖的模版名称

                从django源码里复制一份源码,贴进去,然后根据需求进行修改:

                从测试角度来进行删除代码:

5.Django5内置Auth认证系统

        在开发一个网站的时候,无可避免的需要设计实现网站的用户系统

        Django作为一个完美主义者的终极框架,内置了强大的用户认证系统--auth,默认使用 auth_user 表来存储用户数据

        5.1用户注册实现

                实现Auth认证系统里的用户注册的话,用的是auth模版models.py里定义的User模型

                在.venv --> Lib --> site-packages -->  django --> contrib --> auth下

                通过auth内置的User,可以直接操作用户相关功能

                在views中添加to_register和register两个方法

                

                增用户用的是create_user,判断用户是否存在通过filter

                在url中添加映射:

                在templates下新建auth,再新建login和register页面:

                login.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
登录页面
</body>
</html>

                register.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
</head>
<body>
<form action="/auth/register" method="post">
    {% csrf_token %}
    <table>
        <tr>
            <th>用户注册</th>
        </tr>
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username" value="{{ username }}"></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input type="password" name="password" value="{{ password }}"></td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="提交">
            </td>
            <td>
                <font color="red">{{ errorInfo }}</font>
            </td>
        </tr>
    </table>
</form>
</body>
</html>

                结果:

                auth_user表:

        5.2用户登录实现

                用户登录功能,后端验证主要通过auth模块提供的authenticate校验方法,以及login登录方法实现

                在views中添加to_login和login方法:

                通过auth.authenticate校验用户是否已经存在

                校验用户成功后,返回的是一个封装好的用户对象;校验错误则返回None

                用户对象is_active方法判断用户是否激活

                通过调用auth.login,用户登录成功之后,返回给客户端登录的凭证或者说是令牌、随机字符串,则不需要去操作diango_session表,会自动创建session

                当执行完`auth.authenticate`和`auth.login`后,也就是登录成功后,就可以通过`request.user`直接获取到当前登录的用户对象数据

                登录成功的情况下,该方法获得的是登录用户对象

                登录不成功的情况下,该方法获得的是匿名对象`AnonymousUser`

                urls中添加映射:

                修改login.html页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>
<body>
<form action="/auth/login" method="post">
    {% csrf_token %}
    <table>
        <tr>
            <th>用户登录</th>
        </tr>
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username" value="{{ username }}"></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input type="password" name="password" value="{{ password }}"></td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="提交">

            </td>
            <td>
                <font color="red">{{ errorInfo }}</font>
            </td>
        </tr>
    </table>
</form>

</body>
</html>

                新增index页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网站首页</title>
</head>
<body>
网站首页,欢迎: {{ request.user }}
</body>
</html>

                结果:

                账号密码正确:

                账号密码错误:

        5.3用户修改密码实现

                用户修改密码主要通过request.user对象的set_password实现,当然校验原密码用check_password,设置完后,需要保存,调用save()方法

                在views中添加setPwd方法:

                urls添加映射:

                新增setPwd.html页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改密码</title>
</head>
<body>
<form action="/auth/setPwd" method="post">
    {% csrf_token %}
    <table>
        <tr>
            <th>修改密码</th>
        </tr>
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username" value="{{ request.user }}" readonly></td>
        </tr>
        <tr>
            <td>原密码:</td>
            <td><input type="password" name="oldPwd" value="{{ oldPwd }}"></td>
        </tr>
        <tr>
            <td>新密码:</td>
            <td><input type="password" name="newPwd" value="{{ newPwd }}"></td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="提交">
            </td>
            <td>
                <font color="red">{{ errorInfo }}</font>
            </td>
        </tr>
    </table>
</form>
</body>
</html>

                结果:

                原密码错误:

                原密码正确:

        5.4用户注销实现

                用户注销通过auth.logout方法实现

                用户登录后进入主页,显示注销功能;如果用户没登录,则显示登录功能;

                views中实现Logout方法:

                实现主页跳转方法to_index:

                ulrs中添加映射:

                修改index页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
欢迎
{% if request.user.is_authenticated %}
    {{ request.user }}
    <a href="/auth/logout">注销</a>
    {% else %}
    <a href="/tologin">登录</a>
{% endif %}
</body>
</html>

                通过is_authenticated()方法可以判断用户是否登录认证

                结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值