Blandskron/m6-l5-p1-login-logout-django

GitHub: Blandskron/m6-l5-p1-login-logout-django

一个 Django 认证与授权教学项目,通过完整的登录、注册、分组、权限和视图保护功能演示 Web 应用中的用户管理机制。

Stars: 1 | Forks: 0

# Django 的认证与授权 这是一个以简单直观的方式实现 Django Auth 模型的教学项目:包含登录、登出、注册、会话、基础权限、分组、装饰器和 mixins。 ## 使用 Docker 运行 需要 Docker Desktop: ``` docker compose up --build ``` 然后访问: - 应用程序:http://localhost:8000/ - 后台管理:http://localhost:8000/admin/ - 教学用户名:`admin` - 教学密码:`Admin12345!` `sqlite_data` 卷用于持久化 SQLite 数据。`entrypoint.sh` 会执行数据库迁移,仅在超级用户不存在时创建它,并启动 Django。因此,安全地重启容器是没有问题的。 ## 本地运行 ``` python -m venv .venv # Windows: .venv\Scripts\activate # Linux/macOS: source .venv/bin/activate pip install -r requirements.txt cd loginlogout python manage.py migrate python manage.py runserver ``` ## 什么是 Django Auth `django.contrib.auth` 集成了用户、密码哈希处理、分组和权限功能。`AuthenticationMiddleware` 会暴露 `request.user`;session 用于在多次请求间识别用户,而 CSRF 则用于保护 POST 表单。Django 绝不会以明文形式存储密码,并且会应用在 `AUTH_PASSWORD_VALIDATORS` 中配置的验证器。 数据库迁移会创建 `auth_user`、`auth_group`、`auth_permission` 数据表、关系表、`django_content_type` 以及 `django_session`。由于不需要额外的字段,本项目使用了标准的 `User` 模型。 ## 登录与登出 `/login/` 和 `/logout/` 路由使用了 `LoginView` 和 `LogoutView`。登出操作需要使用 POST 请求并附带 CSRF token。相关配置如下: ``` LOGIN_URL = "/login/" LOGIN_REDIRECT_URL = "/dashboard/" LOGOUT_REDIRECT_URL = "/" ``` `/registro/` 路由使用了 `UserCreationForm`,会对密码进行验证,对新用户进行认证,并将其添加到 `Lectores` 组中。 ## 授权、权限与分组 认证回答的是“你是谁”;授权回答的则是“你能做什么”。在对 `RecursoEducativo` 模型进行迁移时,Django 会在 `auth_permission` 中创建基础权限: - `view_recursoeducativo` - `add_recursoeducativo` - `change_recursoeducativo` - `delete_recursoeducativo` 权限可以直接分配,也可以通过组来分配。`post_migrate` 信号会以幂等方式创建 `Lectores` 组,并为其分配 `view` 权限。你可以通过 `/permisos/` 查看已创建的权限;同时也可以在后台管理中对权限进行管理。 ## 装饰器与 mixins mixin 是一种可复用的类,用于为基于类的视图添加额外行为: - `LoginRequiredMixin` 要求用户必须已登录,并将匿名用户重定向到登录页面(同时附带 `next` 参数)。 - `PermissionRequiredMixin` 要求用户具备一个或多个指定的权限。 `DashboardMixinView` 演示了第一种用法,而 `RecursosMixinView` 则同时结合了这两种用法。用于创建和编辑的函数视图使用了 `@permission_required` 装饰器。经过身份验证但缺乏权限的用户会看到 `403.html` 模板,而匿名用户则会被重定向到登录页面。 ## 建议的演示流程 1. 注册一个账号,并检查是否能成功进入面板,以及是否属于 `Lectores` 组。 2. 打开 Recursos:通过组继承的权限允许你查看它们。 3. 尝试创建资源(Crear recurso):你会看到 403 错误,因为 `Lectores` 组没有 `add` 权限。 4. 以 `admin` 身份进入后台管理,分配权限或创建新组,然后重复上述操作。 5. 检查 `/permisos/`、`/dashboard-mixin/`,并通过 POST 请求登出。 ## 测试 ``` cd loginlogout python manage.py check python manage.py migrate python manage.py test ``` 测试覆盖了登录/登出、重定向、注册与分组、装饰器、两种 mixins 的使用、读取/创建/编辑权限,以及 403、404 错误和后台管理的访问情况。
标签:Django, Docker, Syscall, Web开发, 安全防御评估, 教学示例, 权限控制, 版权保护, 请求拦截, 逆向工具