# user_center **Repository Path**: ppshux/user_center ## Basic Information - **Project Name**: user_center - **Description**: 锻炼写用户中心 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-04 - **Last Updated**: 2026-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # User Center 基于 Django 的用户中心后端:账号注册、登录(Session)、登出,以及用户资料模型(头像、性别、年龄等)。前端计划使用 **Vue 3**(与后端分离部署或分目录开发)。 ## 技术栈 ### 后端 - Python 3 - Django 5.2.x - SQLite(默认) - Pillow(`ImageField` 依赖) ### 前端(规划) - Vue 3 + Vite(推荐组合) - 与后端通过 JSON API 通信;当前认证方式为 **Session Cookie**,请求需携带凭证(见下文「与前端联调」)。 ## 本地运行(后端) ```bash cd backend python -m venv .venv # Windows: .venv\Scripts\activate # macOS/Linux: source .venv/bin/activate pip install "Django>=5.2,<6" Pillow python manage.py migrate python manage.py runserver ``` 默认开发地址: 管理后台:(需先 `python manage.py createsuperuser`) ## 配置说明 - 数据库文件:`backend/db.sqlite3`(迁移后生成) - 用户上传头像等媒体:`backend/media/`(`settings.py` 中 `MEDIA_ROOT` / `MEDIA_URL`) - 开发环境(`DEBUG=True`)下,`/media/` 由 `urls.py` 挂载;若前端与后端**不同源**,头像地址需拼成完整 URL(如 `http://127.0.0.1:8000` + `photo`)或由反向代理统一域名 - 当前 `ALLOWED_HOSTS` 仅包含 `127.0.0.1`,部署到其他域名或 IP 时需同步修改 ## HTTP API 基础路径:`/api/`(完整 URL 示例:`http://127.0.0.1:8000/api/login/`) 统一 JSON 响应结构: ```json { "status": 200, "message": "success", "data": null } ``` - `status`:与 HTTP 状态码一致(如 400、401、500) - 业务数据在 `data` 中;错误时多为 `message` 说明原因 所有下列接口均为 **`Content-Type: application/json`**,请求体为 JSON。 | 接口 | 方法 | 路径 | |------|------|------| | 注册 | POST | `/api/register/` | | 登录 | POST | `/api/login/` | | 登出 | POST | `/api/logout/` | ### 注册 - 请求体:`{ "username": "...", "password": "...", "confirm_password": "..." }`(`confirm_password` 必填,且须与 `password` 一致) - 密码经 Django `AUTH_PASSWORD_VALIDATORS` 校验,不通过时 **400**,`message` 为具体原因 - 成功:`data` 含 `id`、`username`;并自动创建关联 `UserProfile` ### 登录 - 请求体:`{ "username": "...", "password": "..." }` - 成功:服务端写入 **Session**,浏览器需保存并在后续请求中携带 **Cookie** - `data` 字段示例:`id`、`username`、`email`、`photo`(相对路径如 `/media/...` 或 `null`)、`gender`、`age` ### 登出 - 已登录:清除 Session,`message` 为 `success` - 未登录:**401**,`message` 为「未登录」 ## 与前端(Vue 3)联调说明 1. **Session 与跨域** 若 Vue 开发服务器与 Django **端口不同**(例如 `localhost:5173` 与 `127.0.0.1:8000`),属于跨站请求:必须在后端配置 **CORS**(如 `django-cors-headers`),并允许携带凭证(`Access-Control-Allow-Credentials`、明确的 `Allow-Origin` 不能用 `*`)。 另一种常见做法是:**Vite 开发代理**——浏览器只访问同源的前端地址,由 dev server 把 `/api` 转发到 Django,这样 Cookie 的域与页面一致,联调更简单。 2. **请求必须带 Cookie** 使用 `fetch` 时设置 `credentials: "include"`;使用 Axios 时设置 `withCredentials: true`。否则登录后登出、鉴权相关请求不会带上 Session。 3. **CSRF** 当前账号接口使用 `@csrf_exempt`,POST 可不传 CSRF;若日后收紧安全策略,前端需配合改为带 CSRF 或 Token 方案。 4. **头像 `photo` URL** 若 `photo` 为相对路径,在前后端不同源时,应用环境变量配置「API 根地址」再拼接,避免图片加载失败。 5. **生产环境** 建议最终由**同一域名**反向代理前端静态资源与 `/api`、`/media`,减少 Cookie 与 CORS 复杂度。 ## 项目结构(当前) ``` user_center/ ├── README.md └── backend/ ├── manage.py ├── backend/ # 项目配置(settings、urls) └── api/ # 应用:模型、账号视图、路由 ├── models/ ├── urls/ └── views/account/ ``` 前端工程可放在仓库根目录下的 `frontend/`(或独立仓库),与 `backend/` 并列。 ## 许可证 若需开源许可证,请在仓库中补充 `LICENSE` 文件。