# DjangoJwt_Demo **Repository Path**: wu-juncheng256/django-jwt_-demo ## Basic Information - **Project Name**: DjangoJwt_Demo - **Description**: 在Django框架中使用,使用自建JWT,进行登录权限校验 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-15 - **Last Updated**: 2025-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JWT登录Demo项目 这是一个基于Django REST Framework的JWT登录演示项目,展示了如何实现JWT认证功能。 ## 项目特点 - **无数据库设计**:项目没有连接数据库,使用内存中的固定用户数据进行演示 - **固定用户登录**:使用预设的用户账号进行测试 - 用户名:`admin` - 密码:`123456` - **完整的JWT认证流程**:包括token生成、验证、过期处理等 - **详细的错误处理**:提供清晰的错误信息反馈 ## 环境设置 ### 1. 创建虚拟环境 ```bash # 创建虚拟环境 python -m venv venv # 激活虚拟环境 (macOS/Linux) source venv/bin/activate # 激活虚拟环境 (Windows) venv\Scripts\activate ``` ### 2. 安装依赖 ```bash pip install -r requirements.txt ``` ### 3. 运行项目 ```bash python manage.py runserver ``` ## JWT配置参数 在 `jwtDemo/settings.py` 文件中可以找到JWT相关配置: ```python # JWT加密key以及过期时间配置 SECRET_KEY = "django-insecure-i5lpcayye@xob%n*h&p)1erhuu9%!xisxocb3thvtkl!-6t689" KEY_TIME = 60 * 60 * 24 * 7 # 7天过期时间 ``` - `SECRET_KEY`:用于JWT token的签名和验证 - `KEY_TIME`:token的有效期(秒),当前设置为7天 ## 核心功能代码位置 ### 1. JWT认证核心代码 - **文件位置**:`DemoFile/authentications.py` - **主要功能**: - `JWTAuthentication`类:实现JWT认证逻辑 - `generate_jwt()`函数:生成JWT token - `SimpleUser`类:模拟用户对象 ### 2. 视图处理代码 - **文件位置**:`DemoFile/views.py` - **主要功能**: - `LoginView`:处理用户登录,返回JWT token - `HomeView`:公开接口,无需认证 - `ProfileView`:受保护接口,需要JWT认证 ### 3. URL路由配置 - **文件位置**:`DemoFile/urls.py` - **路由配置**: - `/api/login/`:登录接口 - `/api/home/`:首页接口 - `/api/profile/`:个人中心接口 ## 功能测试 ### 1. 登录获取Token ```bash curl -X POST http://127.0.0.1:8000/api/login/ \ -H "Content-Type: application/json" \ -d '{"username": "admin", "password": "123456"}' ``` **成功响应示例**: ```json { "message": "登录成功", "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...", "user": { "id": 1, "username": "admin" } } ``` ### 2. 访问公开接口 ```bash curl -X GET http://127.0.0.1:8000/api/home/ ``` ### 3. 访问受保护接口 ```bash curl -X GET http://127.0.0.1:8000/api/profile/ \ -H "Authorization: JWT " ``` ### 4. 测试错误场景 #### 使用错误的token: ```bash curl -X GET http://127.0.0.1:8000/api/profile/ \ -H "Authorization: JWT invalid_token" ``` #### 使用过期的token: - 可以在 `settings.py` 中将 `KEY_TIME` 设置为很小的值(如2秒)来测试过期场景 #### 错误的登录信息: ```bash curl -X POST http://127.0.0.1:8000/api/login/ \ -H "Content-Type: application/json" \ -d '{"username": "admin", "password": "wrong_password"}' ``` ## 错误处理 项目实现了完整的JWT错误处理机制: - **token解码失败**:返回"token解码失败!无效的token格式" - **token已过期**:返回"token已过期!" - **token无效**:返回"token无效!" - **用户不存在**:返回"用户不存在!" - **Authorization格式错误**:返回相应的格式错误提示 ## 项目结构 ``` msDemo/ ├── DemoFile/ # 主要应用目录 │ ├── authentications.py # JWT认证核心代码 │ ├── views.py # 视图处理 │ ├── urls.py # URL路由 │ └── models.py # 数据模型(本项目未使用) ├── jwtDemo/ # Django项目配置 │ ├── settings.py # 项目设置(包含JWT配置) │ └── urls.py # 主URL配置 ├── manage.py # Django管理脚本 ├── requirements.txt # 项目依赖 └── README.md # 项目说明文档 ``` ## 注意事项 1. **生产环境安全**: - 请更换 `SECRET_KEY` 为更安全的密钥 - 设置合适的token过期时间 - 启用HTTPS传输 2. **扩展建议**: - 可以集成真实的数据库 - 添加用户注册功能 - 实现token刷新机制 - 添加更多的权限控制 3. **调试工具**: - 项目包含了详细的错误日志 - 可以通过控制台查看认证过程的调试信息 ## 技术栈 - Python 3.12 - Django 5.2.6 - Django REST Framework 3.15.1 - PyJWT 2.10.1 --- 如有任何问题,请参考代码注释或提交Issue。