Răsfoiți Sursa

#doc:readme文件更新

yangyi 1 săptămână în urmă
părinte
comite
80828ca722
1 a modificat fișierele cu 162 adăugiri și 13 ștergeri
  1. 162 13
      readme.md

+ 162 - 13
readme.md

@@ -211,7 +211,7 @@
       >
       >
       > 创建超级管理员用于登陆django的后台:`python manage.py createsuperuser `
       > 创建超级管理员用于登陆django的后台:`python manage.py createsuperuser `
 
 
-### 工作内容分工
+## 工作内容分工
 
 
 - 图片链接收集
 - 图片链接收集
 - 文章数据收集(html2markdown)
 - 文章数据收集(html2markdown)
@@ -222,13 +222,15 @@
 - 初始数据维护
 - 初始数据维护
 - 打包部署上线
 - 打包部署上线
 
 
-| 姓名 | 负责内容 | 备注 |
-| ---- | -------- | ---- |
-|      |          |      |
+| 姓名   | 负责内容             | 备注 |
+| ------ | -------------------- | ---- |
+| 黄略   | 总体设计、前后端开发 |      |
+| 杨昊廷 | 前后端开发           |      |
+| 李锐   | 数据采集、数据清洗   |      |
+| 朱启政 | 数据采集、数据清洗   |      |
+| 毕熙   | 数据录入、数据维护   |      |
 
 
-
-
-### 功能模块
+## 功能模块
 
 
 > 参考网站:[计算机学院官网](https://www-new.gwng.edu.cn/xkxy/main.psp)
 > 参考网站:[计算机学院官网](https://www-new.gwng.edu.cn/xkxy/main.psp)
 
 
@@ -254,18 +256,165 @@
   - 招生信息
   - 招生信息
   - 就业信息
   - 就业信息
 
 
-### 数据库设计
+## 数据库设计
 
 
 #### 概要设计
 #### 概要设计
 
 
-- 用户(**ID**,账号,密码,用户名,角色,头像)
-
-> 角色:管理员,用户
-
 - 文章(**ID**,标题,markdown内容,,html内容,时间,创建人,文章分类,封面)
 - 文章(**ID**,标题,markdown内容,,html内容,时间,创建人,文章分类,封面)
 
 
 > 文章分类:专业介绍,领导分工,学院学科建设带头人教师,计算机系教师,软件工程系教师,数字媒体技术系教师,物联网与网络工程系教师,数学教研室教师,党政学工队伍教师,教学科研,党建动态,团学动态,招生,就业
 > 文章分类:专业介绍,领导分工,学院学科建设带头人教师,计算机系教师,软件工程系教师,数字媒体技术系教师,物联网与网络工程系教师,数学教研室教师,党政学工队伍教师,教学科研,党建动态,团学动态,招生,就业
 
 
 - 首页轮播图(标题,链接,序号)
 - 首页轮播图(标题,链接,序号)
 
 
-#### 物理设计
+#### 物理设计
+
+项目设计了两个核心模型,均定义在 `common` 模块中:
+
+**Article(文章模型):** 存储所有模块的文章内容,通过 `category` 字段区分所属模块。内容以 Markdown 格式存储,请求时渲染为 HTML。
+
+| 字段             | 类型          | 说明                  |
+| ---------------- | ------------- | --------------------- |
+| title            | CharField     | 文章标题              |
+| markdown_content | TextField     | Markdown 格式内容     |
+| html_content     | TextField     | HTML 格式内容(预留) |
+| category         | CharField     | 文章分类(14 种)     |
+| cover            | URLField      | 封面图片链接          |
+| created_at       | DateTimeField | 创建时间              |
+| updated_at       | DateTimeField | 更新时间              |
+
+**Banner(轮播图模型):** 存储首页轮播图数据。
+
+| 字段  | 类型         | 说明     |
+| ----- | ------------ | -------- |
+| title | CharField    | 标题     |
+| url   | URLField     | 图片链接 |
+| order | IntegerField | 排序序号 |
+
+**数据库ER图:**
+
+```mermaid
+erDiagram
+    Article {
+        int id PK
+        string title
+        text markdown_content
+        text html_content
+        datetime created_at
+        datetime updated_at
+        string category
+        string cover
+    }
+    
+    Banner {
+        int id PK
+        string title
+        string url
+        int order
+    }
+```
+
+### 
+
+## 构建部署
+
+### 构建docker镜像及运行
+
+- dockerfile文件
+
+```dockerfile
+# 使用官方Python 3.9镜像作为基础
+FROM python:3.9-slim
+
+# 设置工作目录
+WORKDIR /app
+
+# 设置环境变量
+ENV PYTHONDONTWRITEBYTECODE=1 \
+    PYTHONUNBUFFERED=1 \
+    DJANGO_SETTINGS_MODULE=pythonweb.settings
+
+# 安装Python依赖
+RUN pip install --no-cache-dir Django Markdown
+
+# 复制项目文件
+COPY ./pythonweb .
+
+# 创建非root用户
+RUN useradd -m -u 1000 django && chown -R django:django /app
+USER django
+
+# 暴露端口
+EXPOSE 8000
+
+# 启动命令
+CMD ["python", "/app/pythonweb/manage.py", "runserver", "8000"]
+```
+
+使用`docker build ./ -t gwng-pythonweb:v1.0`命令构建docker镜像
+
+使用`docker run --name gwng -p 8000:8000 gwng-pythonweb:v1.0`命令运行
+
+### 申请域名SSL证书
+
+```shell
+#安装certbot
+apt install cerbot
+#使用certbot向letsencrypt申请SSL证书
+certbot certonly --webroot -w /home/nginx/www/ -d pythonweb.display.anyi.space
+```
+
+
+
+### 使用nginx反向代理
+
+```nginx
+upstream pythonwebServer{
+        server 127.0.0.1:8000;
+    }
+    
+server{
+    listen       80;
+    listen  [::]:80;
+    server_name  pythonweb.display.anyi.space;
+    client_max_body_size 1024m;
+
+    #certbot自动续签使用的验证路径映射
+    location ^~ /.well-known/acme-challenge/ {
+    root /home/nginx/www/;
+    }
+
+    location / {
+        proxy_pass http://pythonwebServer;
+        proxy_set_header HOST $host;
+        proxy_set_header X-Forwarded-Proto $scheme;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    }
+}
+
+server{
+    listen 443 ssl;
+    server_name pythonweb.display.anyi.space;
+    
+    ssl_certificate /etc/letsencrypt/live/pythonweb.display.anyi.space/fullchain.pem;
+    ssl_certificate_key /etc/letsencrypt/live/pythonweb.display.anyi.space/privkey.pem;
+    
+    ssl_session_cache shared:SSL:1m;
+    ssl_session_timeout 5m;
+    
+    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
+    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
+
+    ssl_prefer_server_ciphers on;
+
+    location / {
+        proxy_pass http://pythonwebServer;
+        proxy_set_header HOST $host;
+        proxy_set_header X-Forwarded-Proto $scheme;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    }
+
+}
+```
+