# 同趣U (InterestU) - 大学生兴趣社交平台

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
<!-- 可根据实际情况添加CI/CD等徽章 -->

**同趣U (InterestU)** 是一款专为在校大学生设计的移动社交应用，旨在帮助他们基于共同的兴趣爱好轻松发现伙伴、组织活动、拓展社交圈，让大学生活更加丰富多彩。

## 项目组成

本项目仓库包含以下主要部分：

*   **`tongqu_backend_v2/`**: Django后端服务项目。
*   **`同趣U.html`**: (早期的静态页面原型)


## 后端项目 (`tongqu_backend_v2/`)

这是“同趣U”应用的后端服务部分，基于Django和Django REST framework构建。

### 项目背景 (后端)

为前端App提供稳定、高效、安全的接口支持，解决大学生在兴趣社交中遇到的信息不对称、平台错位、连接障碍、活动分散等痛点。

### 核心目标 (后端)

*   **用户管理与认证：** 提供安全可靠的用户注册、登录、资料管理、JWT认证等功能。
*   **兴趣系统：** 允许用户定义和关联兴趣标签，为匹配提供基础。
*   **小组/圈子系统：** 支持用户创建、加入、管理兴趣小组，并在组内互动。
*   **内容发布：** 允许用户在小组内发布帖子/动态。
*   **匹配与发现：** 基于兴趣等因素推荐用户。
*   **数据持久化：** 使用PostgreSQL数据库。
*   **API接口：** 提供清晰、规范的RESTful API供前端App调用。

### 主要功能 (当前进度)

*   **用户系统 (v0.2):**
    *   自定义用户模型 (`CustomUser`)，包含邮箱、手机号、昵称、头像、简介、学校等。
    *   使用 `CustomUserManager` 处理用户创建。
    *   **API (DRF + SimpleJWT):**
        *   用户注册 (含头像上传，返回JWT)。
        *   用户登录 (邮箱+密码，返回JWT Access/Refresh Token)。
        *   刷新Access Token。
        *   获取/更新当前登录用户个人资料 (需认证，支持头像和兴趣标签更新)。
*   **兴趣标签系统 (v0.1):**
    *   `InterestTag` 模型。
    *   `CustomUser` 与 `InterestTag` 多对多关联。
    *   Admin后台管理兴趣标签。
    *   **API:**
        *   获取兴趣标签列表 (只读)。
        *   获取单个兴趣标签详情 (只读)。
*   **匹配与发现 (v0.1 - 初步):**
    *   **API:**
        *   获取与当前登录用户有共同兴趣的推荐用户列表 (需认证，显示共同兴趣标签)。
*   **兴趣圈子/小组系统 (v0.2):**
    *   `Group` 模型 (名称、描述、封面、创建者、兴趣标签等)。
    *   `Membership` (中间) 模型管理用户与小组的多对多关系 (含加入时间)。
    *   Admin后台管理小组和成员关系。
    *   **API:**
        *   创建小组 (需认证，创建者自动成为成员并可关联兴趣标签，支持封面上传)。
        *   获取小组列表 (公开可读)。
        *   获取单个小组详情 (公开可读)。
        *   用户加入小组 (需认证)。
        *   用户退出小组 (需认证)。
        *   获取当前用户加入的小组列表 (需认证)。
*   **小组内帖子/动态功能 (v0.1):**
    *   `Post` 模型 (关联小组、作者，含标题、内容)。
    *   Admin后台管理帖子。
    *   **API (集成在GroupViewSet及独立的PostViewSet中):**
        *   在指定小组内创建帖子 (`POST /api/v1/groups/<group_pk>/create-post/`，需认证，作者自动设置为当前用户)。
        *   获取指定小组内的帖子列表 (`GET /api/v1/groups/<group_pk>/posts/`，需认证)。
        *   获取所有帖子列表 (`GET /api/v1/posts/`，需认证)。
        *   获取单个帖子详情 (`GET /api/v1/posts/<post_pk>/`，需认证)。
        *   更新自己的帖子 (`PUT/PATCH /api/v1/posts/<post_pk>/`，需认证且为作者)。
        *   删除自己的帖子 (`DELETE /api/v1/posts/<post_pk>/`，需认证且为作者)。
        *   通过 `/api/v1/posts/` 路径创建帖子的权限已限制为管理员，并提示使用小组接口。

### 技术栈 (后端)

*   **后端框架:** Python 3.x, Django 5.2.x, Django REST framework
*   **数据库:** PostgreSQL
*   **认证:** JWT (JSON Web Tokens) via djangorestframework-simplejwt
*   **图片处理:** Pillow
*   **Web服务器 (部署时):** Gunicorn (或 uWSGI)
*   **反向代理 (部署时):** Nginx
*   **版本控制:** Git

### 环境搭建与运行 (后端 `tongqu_backend_v2/` 目录内)

1.  **前提条件:**
    *   Python 3.8+
    *   PostgreSQL 12+
    *   Git
2.  **克隆仓库 (如果从远程开始):**
    ```bash
    # 如果将 D:\new_projects 作为仓库根，则克隆整个项目
    git clone http://git.fmode.cn:3000/0225015/tongquU.git
    cd tongquU/tongqu_backend_v2 # 进入后端项目目录
    ```
3.  **创建并激活Python虚拟环境:**
    ```bash
    python -m venv venv
    # Windows PowerShell:
    .\venv\Scripts\Activate.ps1
    # Linux/macOS:
    # source venv/bin/activate
    ```
4.  **安装依赖:**
    ```bash
    pip install -r requirements.txt
    ```
5.  **配置数据库:**
    *   确保PostgreSQL服务正在运行。
    *   在PostgreSQL中创建一个数据库 (例如 `tongqu_v2_db`)。
    *   修改 `tongqu_backend_v2/config/settings.py` 文件，配置 `DATABASES` 部分。
6.  **进行数据库迁移:**
    ```bash
    python manage.py makemigrations
    python manage.py migrate
    ```
7.  **创建超级用户:**
    ```bash
    python manage.py createsuperuser
    ```
8.  **运行开发服务器:**
    ```bash
    python manage.py runserver
    ```
    服务将在 `http://127.0.0.1:8000/` 启动。

### API 端点前缀 (后端)

*   所有用户账户相关API: `/api/v1/accounts/`
*   所有小组相关API: `/api/v1/groups/`
*   所有帖子直接操作API: `/api/v1/posts/`
*   (兴趣标签API通过 `/api/v1/accounts/tags/` 访问)

*(更详细的API文档后续会通过Swagger/OpenAPI提供)*

## 如何贡献

*(保持你之前的贡献说明即可，或者根据需要修改)*
我们欢迎各种形式的贡献！如果您对本项目感兴趣，可以通过以下方式参与：
1.  **Fork** 本仓库 (如果项目公开)
2.  创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
3.  提交您的更改 (`git commit -m 'Add some AmazingFeature'`)
4.  将您的更改推送到分支 (`git push origin feature/AmazingFeature`)
5.  开启一个 **Pull Request**

请确保您的代码遵循项目的编码规范，并添加必要的测试。

## 许可证

本项目采用 [MIT许可证](LICENSE.md)。