jackfrued 6 лет назад
Родитель
Сommit
00a3941355

+ 27 - 27
Day36-40/36-38.关系型数据库MySQL.md

@@ -243,21 +243,21 @@ MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行
    -- 创建学院表
    create table tb_college
    (
-   collid		int auto_increment comment '编号',
-   collname	varchar(50) not null comment '名称',
-   intro	    varchar(500) default '' comment '介绍',
+   collid 		int auto_increment comment '编号',
+   collname 	varchar(50) not null comment '名称',
+   collintro 	varchar(500) default '' comment '介绍',
    primary key (collid)
    );
    
    -- 创建学生表
    create table tb_student
    (
-   stuid		int not null comment '学号',
-   stuname		varchar(20) not null comment '姓名',
-   sex		    boolean default 1 comment '性别',
-   birth	    date not null comment '出生日期',
-   addr		varchar(255) default '' comment '籍贯',
-   collid		int not null comment '所属学院',
+   stuid 		int not null comment '学号',
+   stuname 	varchar(20) not null comment '姓名',
+   stusex 		boolean default 1 comment '性别',
+   stubirth 	date not null comment '出生日期',
+   stuaddr 	varchar(255) default '' comment '籍贯',
+   collid 		int not null comment '所属学院',
    primary key (stuid),
    foreign key (collid) references tb_college (collid)
    );
@@ -265,10 +265,10 @@ MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行
    -- 创建教师表
    create table tb_teacher
    (
-   teaid		int not null comment '工号',
-   teaname		varchar(20) not null comment '姓名',
-   title	    varchar(10) default '助教' comment '职称',
-   collid		int not null comment '所属学院',
+   teaid 		int not null comment '工号',
+   teaname 	varchar(20) not null comment '姓名',
+   teatitle 	varchar(10) default '助教' comment '职称',
+   collid 		int not null comment '所属学院',
    primary key (teaid),
    foreign key (collid) references tb_college (collid)
    );
@@ -276,10 +276,10 @@ MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行
    -- 创建课程表
    create table tb_course
    (
-   couid		int not null comment '编号',
-   couname		varchar(50) not null comment '名称',
-   credit	    int not null comment '学分',
-   teaid		int not null comment '授课老师',
+   couid 		int not null comment '编号',
+   couname 	varchar(50) not null comment '名称',
+   coucredit 	int not null comment '学分',
+   teaid 		int not null comment '授课老师',
    primary key (couid),
    foreign key (teaid) references tb_teacher (teaid)
    );
@@ -287,11 +287,11 @@ MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行
    -- 创建选课记录表
    create table tb_record
    (
-   recid		int auto_increment comment '选课记录编号',
-   sid			int not null comment '选课学生',
-   cid			int not null comment '所选课程',
-   seldate		datetime default now() comment '选课时间日期',
-   score		decimal(4,1) comment '考试成绩',
+   recid 		int auto_increment comment '选课记录编号',
+   sid 		int not null comment '选课学生',
+   cid 		int not null comment '所选课程',
+   seldate 	datetime default now() comment '选课时间日期',
+   score 		decimal(4,1) comment '考试成绩',
    primary key (recid),
    foreign key (sid) references tb_student (stuid),
    foreign key (cid) references tb_course (couid),
@@ -548,13 +548,13 @@ MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行
 
    ```SQL
    -- 插入学院数据
-   insert into tb_college (collname, intro) values 
+   insert into tb_college (collname, collintro) values 
    ('计算机学院', '创建于1956年是我国首批建立计算机专业。学院现有计算机科学与技术一级学科和网络空间安全一级学科博士学位授予权,其中计算机科学与技术一级学科具有博士后流动站。计算机科学与技术一级学科在2017年全国第四轮学科评估中评为A;2019 U.S.News全球计算机学科排名26名;ESI学科排名0.945‰,进入全球前1‰,位列第43位。'),
    ('外国语学院', '1998年浙江大学、杭州大学、浙江农业大学、浙江医科大学四校合并,成立新的浙江大学。1999年原浙江大学外语系、原杭州大学外国语学院、原杭州大学大外部、原浙江农业大学公外部、原浙江医科大学外语教学部合并,成立浙江大学外国语学院。2003年学院更名为浙江大学外国语言文化与国际交流学院。'),
    ('经济管理学院', '四川大学经济学院历史悠久、传承厚重,其前身是创办于1905年的四川大学经济科,距今已有100多年的历史。已故著名经济学家彭迪先、张与九、蒋学模、胡寄窗、陶大镛、胡代光,以及当代著名学者刘诗白等曾先后在此任教或学习。在长期的办学过程中,学院坚持以马克思主义的立场、观点、方法为指导,围绕建设世界一流经济学院的奋斗目标,做实“两个伟大”深度融合,不断提高党的建设质量与科学推进一流事业深度融合。');
    
    -- 插入学生数据
-   insert into tb_student (stuid, stuname, sex, birth, addr, collid) values
+   insert into tb_student (stuid, stuname, stusex, stubirth, stuaddr, collid) values
    (1001, '杨逍', 1, '1990-3-4', '四川成都', 1),
    (1002, '任我行', 1, '1992-2-2', '湖南长沙', 1),
    (1033, '王语嫣', 0, '1989-12-3', '四川成都', 1),
@@ -571,10 +571,10 @@ MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行
    delete from tb_student where stuid=4040;
    
    -- 更新学生数据
-   update tb_student set stuname='杨过', addr='湖南长沙' where stuid=1001;
+   update tb_student set stuname='杨过', stuaddr='湖南长沙' where stuid=1001;
    
    -- 插入老师数据
-   insert into tb_teacher (teaid, teaname, title, collid) values 
+   insert into tb_teacher (teaid, teaname, teatitle, collid) values 
    (1122, '张三丰', '教授', 1),
    (1133, '宋远桥', '副教授', 1),
    (1144, '杨逍', '副教授', 1),
@@ -582,7 +582,7 @@ MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行
    (3366, '韦一笑', '讲师', 3);
    
    -- 插入课程数据
-   insert into tb_course (couid, couname, credit, teaid) values 
+   insert into tb_course (couid, couname, coucredit, teaid) values 
    (1111, 'Python程序设计', 3, 1122),
    (2222, 'Web前端开发', 2, 1122),
    (3333, '操作系统', 4, 1122),

+ 7 - 1
Day91-100/91.团队项目开发的问题和解决方案.md

@@ -1,6 +1,6 @@
 ## 团队项目开发的问题和解决方案
 
-我们经常听到个人开发和团队开发这两个词,所谓个人开发就是一个人把控产品的所有内容;而团队开发则是由多个人组团并完成产品的开发。要实施团队开发以下几点是必不可少的:
+个人开发和团队开发这两个词相信对大家来说并不陌生。所谓个人开发就是一个人把控产品的所有内容;而团队开发则是由多个人组团并完成产品的开发。要实施团队开发以下几点是不可或缺的:
 
 1. 对开发过程中的各种事件(例如:谁到什么时间完成了什么事情)进行管理和共享。
 2. 在团队内部共享各类工作成果以及新的知识技巧等。
@@ -10,6 +10,8 @@
 
 ### 团队项目开发常见问题
 
+团队开发相较于个人开发,容易遇到以下几个方面的问题。
+
 #### 问题1:传统的沟通方式无法确定处理的优先级
 
 例如:使用邮件进行沟通可能出现邮件数量太多导致重要的邮件被埋没,无法管理状态,不知道哪些问题已经解决,哪些问题尚未处理,如果用全文检索邮件的方式来查询相关问题效率过于低下。
@@ -107,6 +109,8 @@ tar -xvf git-2.23.0.tar
 yum -y install libcurl-devel
 ```
 
+> 说明:没有这个依赖库,git的网络功能将无法执行。
+
 安装前的配置。
 
 ```Shell
@@ -575,6 +579,8 @@ tar -xvf ZenTaoPMS.pro8.5.2.zbox_64.tar
 
 持续集成对于编译型语言的意义更大,对于Python这样的解释型语言,更多的时候是用于对接版本控制系统触发自动化测试并产生相应的报告。类似的功能也可以通过在Git服务上配置**Webhook**来完成,码云甚至可以直接对接[钉钉开放平台](<https://ding-doc.dingtalk.com/>)使用钉钉机器人来向项目相关人员发送即时消息。Gitlab也对CI和CD(持续交付)提供了支持,具体内容请大家参考[《GitLab CI/CD基础教程》](<https://blog.stdioa.com/2018/06/gitlab-cicd-fundmental/>)。
 
+
+
 > **说明**:
 >
 > 1. 关于敏捷开发的相关内容,有兴趣的读者可以阅读知乎上的[《这才是敏捷开发》](<https://zhuanlan.zhihu.com/p/33472102>)一文。

+ 5 - 0
Day91-100/94.网络API接口设计.md

@@ -137,3 +137,8 @@ API接口返回的数据通常都是**JSON**或**XML**格式,我们这里不
        /* ... */
    }
    ```
+
+
+
+> 提示:如果没有接口文档撰写经验,可以使用在线接口文档编辑平台RAP2或YAPI来进行接口文档撰写,也可以参考我的[《方天下(租房项目)接口文档》](../番外篇/方天下(租房项目)接口文档.md)来了解如何撰写接口文档。
+

+ 5 - 3
Day91-100/95.使用Django开发商业项目.md

@@ -1574,7 +1574,7 @@ class BlacklistPermission(permissions.BasePermission):
 
    ![](./res/rbac-full.png)
 
-2. ACL - 访问控制列表(每个用户绑定自己的访问白名单)。
+2. ACL - 访问控制列表(每个用户绑定自己的访问白名单或黑名单)。
 
 #### 访问限流
 
@@ -1616,7 +1616,7 @@ def example_view(request, format=None):
     # 此处省略下面的代码
 ```
 
-当然也可以通过继承`BaseThrottle`来自定义限流策略,通常需要重写`allow_request`和`wait`方法。
+当然也可以通过继承`SimpleRateThrottle`来自定义限流策略,通常需要重写`allow_request`和`wait`方法。
 
 ### 异步任务和计划任务
 
@@ -2272,9 +2272,11 @@ TOTAL                             267    176    34%
 
 4. 使用 - 在页面右侧可以看到一个调试工具栏,上面包括了执行时间、项目设置、请求头、SQL、静态资源、模板、缓存、信号等调试信息,查看起来非常的方便。
 
+5. 项目上线之前,请记住**去掉django-debug-toolbar相关的所有配置**。
+
 ### 部署相关
 
-请参考《Django项目上线指南》
+请参考[《项目部署上线和性能调优》](98.项目部署上线和性能调优.md)
 
 ### 性能相关
 

+ 1 - 1
Day91-100/96.软件测试和自动化测试.md

@@ -70,4 +70,4 @@ Selenium是实现Web应用程序的功能测试以及集成测试自动化的浏
 4. 在Jenkins的“系统管理”中选择“系统设置”并配置“Selenium Remote Control”下的“HTMLSuite Runner”。
 5. 新建测试用的Jenkins任务并进行配置,配置的内容包括:浏览器、起始URL、测试套件和测试结果输出文件。
 
-配置完成后,就可以执行Jenkins的“立即构建”了。
+配置完成后,就可以执行Jenkins的“立即构建”了。  

+ 3 - 1
Day91-100/98.项目部署上线和性能调优.md

@@ -271,7 +271,7 @@ pip install -r code/teamproject/requirements.txt
 5. 启动服务器。
 
    ```Shell
-   uwsgi --ini conf/uwsgi.ini
+   nohup uwsgi --ini conf/uwsgi.ini &
    ```
 
 ### Nginx的配置
@@ -756,6 +756,8 @@ class MasterSlaveRouter(object):
 
 [Supervisor](https://github.com/Supervisor/supervisor)是一个用Python写的进程管理工具,可以很方便的用来在类Unix系统下启动、重启(自动重启程序)和关闭进程,目前Supervisor暂时还没有提供对Python 3的支持,可以通过Python 2来安装和运行Supervisor,再通过Supervisor来管理Python 3的程序。
 
+> **提示**:还有一个和Supervisor功能类似的工具名为Circus,支持Python 3。
+
 1. 安装Supervisor。
 
    ```Shell

+ 545 - 0
番外篇/方天下(租房项目)接口文档.md

@@ -0,0 +1,545 @@
+## 方天下项目(租房网站)接口文档
+
+0. 用户登录 - **POST** `/api/login/`
+
+      开发者:骆昊
+
+      版本号:v1
+
+      最后修改时间:
+
+      接口说明:登录成功后,会在`tb_user_token`表中保存或更新用户令牌(token)。
+
+      使用帮助:测试数据库中预设了四个可供使用的账号,如下表所示。
+
+      | 用户名     | 用户口令 | 角色         |
+      | ---------- | -------- | ------------ |
+      | jackfrued  | 123456   | 管理员       |
+      | wangdachui | 123123   | 普通用户     |
+      | hellokitty | 123123   | 房地产经理人 |
+      | wuzetian   | 123456   | 房东         |
+
+      请求参数:
+
+      | 参数名   | 类型   | 是否必填 | 参数位置 | 说明     |
+      | -------- | ------ | -------- | -------- | -------- |
+      | username | 字符串 | 是       | 消息体   | 用户名   |
+      | password | 字符串 | 是       | 消息体   | 用户口令 |
+
+      响应信息:
+
+      - 登录成功:
+
+        ```JSON
+        {
+            "code": 30000,
+            "message": "用户登录成功",
+            "token": "f83e0f624e2311e9af1f00163e02b646"
+        }
+        ```
+
+      - 登录失败:
+
+        ```JSON
+        {
+            "code": 30001,
+            "message": "用户名或密码错误"
+        }
+        ```
+
+1. 发送短信验证码 - **GET** `/api/mobile_code/{国内手机号}/`
+
+   开发者:骆昊
+
+   版本号:v1
+
+   接口说明:给指定手机号发送短信验证码的接口,手机号必须是国内手机号,作为路径参数写到URL中。接口显示短信发送成功时,指定的手机号并不会收到短息,因为使用的三方短信平台赠送的测试短信已经用完了。
+
+   使用帮助:国内手机号暂不支持国际区号。
+
+   请求参数:暂无。
+
+   响应信息:
+
+   - 请求成功:
+
+     ```JSON
+     {
+         "code": 10001,
+         "msg": "短信验证码发送成功"
+     }
+     ```
+
+   - 两次请求间隔小于60秒:
+
+     ```JSON
+     {
+         "code": 10002,
+         "msg": "请不要在60秒以内重复发送手机验证码"
+     }
+     ```
+
+   - 手机号无效:
+
+     ```JSON
+     {
+         "code": 10003,
+         "msg": "请提供有效的手机号"
+     }
+     ```
+
+   - 短信服务平台故障:
+
+     ```JSON
+     {
+         "code": 10004,
+         "msg": "短信服务暂时无法使用"
+     }
+     ```
+
+2. 获取所有省级行政单位 - **GET** `/api/districts/`
+
+   开发者:骆昊
+
+   版本号:v1
+
+   接口说明:暂无。
+
+   使用帮助:暂无。
+
+   请求参数:暂无。
+
+   响应信息:
+
+   ```JSON
+   [
+       {
+           "distid": 110000,
+           "name": "北京市"
+       },
+       {
+           "distid": 120000,
+           "name": "天津市"
+       }
+   ]
+   ```
+
+3. 获取指定行政单位详情及其管辖的行政单位 - **GET** `/api/districts/{行政单位编号}/`
+
+   开发者:骆昊
+
+   版本号:v1
+
+   接口说明:通过URL参数指定行政单位编号,如果行政单位编号为省级行政单位编号,则返回该省以及该省所辖市级行政单位的信息;如果行政单位编号为市级行政单位编号,则返回该市以及该市所辖区县的信息;如果行政单位编号为区县一级行政单位编号,则返回该区县的信息,下级行政单位`cities`属性值为`[]`。
+
+   使用帮助:数据库中除四川省外其他行政单位的“intro”数据都没有录入,该字段可能为空字符串。
+
+   请求参数:暂无。
+
+   响应信息:
+
+   ```JSON
+   {
+       "distid": 510000,
+       "name": "四川省",
+       "intro": "位于中国西南地区内陆,东连重庆,南邻云南、贵州,西接西藏,北界陕西、甘肃、青海,四川省总面积48.6万平方千米,省会成都。截至2018年底,四川省下辖18个省辖市,3个自治州,17个县级市,108个县,4个自治县,54个市辖区。",
+       "cities": [
+           {
+               "distid": 510100,
+               "name": "成都市"
+           },
+           {
+               "distid": 510300,
+               "name": "自贡市"
+           },
+           {
+               "distid": 510400,
+               "name": "攀枝花市"
+           }
+       ]
+   }
+   ```
+
+4. 获取热门城市 - **GET** `/api/hotcities/`
+
+   开发者:骆昊
+
+   版本号:v1
+
+   接口说明:暂无。
+
+   使用帮助:暂无。
+
+   请求参数:暂无。
+
+   响应信息:
+
+   ```JSON
+   [
+       {
+           "distid": 110100,
+           "name": "北京市"
+       },
+       {
+           "distid": 120100,
+           "name": "天津市"
+       },
+       {
+           "distid": 130100,
+           "name": "石家庄"
+       }
+   ]
+   ```
+
+5. 分页获取房地产经理人信息 - **GET** `/api/agents/`
+
+   开发者:骆昊
+
+   版本号:v1
+
+   接口说明:经理人姓名按照前缀模糊匹配的方式进行处理;经理人服务星级是指经理人服务星级不得低于该星级;经理人是否持证只有0(未持证上岗)和1(持证上岗)两个选项。三个参数代表的筛选条件之间是而且的关系。返回结果为分页之后的房地产经理人信息。
+
+   使用帮助:暂无。
+
+   请求参数:
+
+   | 参数名 | 类型   | 是否必填 | 参数位置 | 说明                                |
+   | ------ | ------ | -------- | -------- | ---------------------------------|
+   | name   | 字符串 | 否       | 查询参数 | 经理人姓名                          |
+   | key    | 字符串 | 否       | 查询参数 | 经理人服务星级                      |
+   | cert   | 字符串 | 否       | 查询参数 | 经理人是否持证                      |
+   | page   | 整数   | 否       | 查询参数 | 页码,默认值为1                     |
+   | size   | 整数   | 否       | 查询参数 | 页面大小,默认值为5,最大值不超过50 |
+
+   响应信息:
+
+   ```JSON
+   {
+       "count": 1,
+       "next": null,
+       "previous": null,
+       "results": [
+           {
+               "agentid": 6,
+               "estates": [
+                   {
+                       "estateid": 11,
+                       "name": "灵芝新村",
+                       "hot": 20
+                   }
+               ],
+               "name": "肖利丽",
+               "tel": "13040813886",
+               "servstar": 4,
+               "realstar": 4,
+               "profstar": 4,
+               "certificated": false
+           }
+       ]
+   }
+   ```
+
+6. 新增房地产经理人 - **POST** `/api/agents/`
+
+   开发者:骆昊
+
+   版本号:v1
+
+   接口说明:暂无。
+
+   使用帮助:需要登录且拥有管理员权限,用户身份令牌在请求头中提供。
+
+   请求参数:
+
+   | 参数名       | 类型   | 是否必填 | 参数位置 | 说明             |
+   | ------------ | ------ | -------- | -------- | ---------------- |
+   | name         | 字符串 | 是       | 消息体   | 经理人姓名       |
+   | tel          | 字符串 | 是       | 消息体   | 经理人手机       |
+   | servstar     | 整数   | 否       | 消息体   | 默认值0          |
+   | realstar     | 整数   | 否       | 消息体   | 默认值0          |
+   | profstar     | 整数   | 否       | 消息体   | 默认值0          |
+   | certificated | 整数   | 否       | 消息体   | 默认值0          |
+   | token        | 字符串 | 是       | 请求头   | 用户身份认证令牌 |
+
+   响应信息:
+
+   - 新增成功 - 状态码**201**:
+
+     ```JSON
+     {
+         "agentid": 8,
+         "estates": [],
+         "name": "孙小美",
+         "tel": "13800991234",
+         "servstar": 0,
+         "realstar": 0,
+         "profstar": 0,
+         "certificated": false
+     }
+     ```
+
+   - 未提供身份认证信息 - 状态码**401**:
+
+     ```JSON
+     {
+         "detail": "不正确的身份认证信息。"
+     }
+     ```
+
+   - 当前用户没有操作权限 - 状态码**403**:
+
+     ```JSON
+     {
+         "detail": "您没有执行该操作的权限。"
+     }
+     ```
+
+7. 编辑房地产经理人信息 - **PUT** `/api/agents/{房地产经理人编号}/`
+
+    开发者:骆昊
+
+    版本号:v1
+
+    接口说明:暂无。
+
+    使用帮助:需要登录且拥有管理员权限,用户身份令牌在请求头中提供。
+
+    请求参数:
+
+    | 参数名       | 类型   | 是否必填 | 参数位置 | 说明             |
+    | ------------ | ------ | -------- | -------- | ---------------- |
+    | name         | 字符串 | 是       | 消息体   | 经理人姓名       |
+    | tel          | 字符串 | 是       | 消息体   | 经理人手机       |
+    | servstar     | 整数   | 否       | 消息体   | 默认值0          |
+    | realstar     | 整数   | 否       | 消息体   | 默认值0          |
+    | profstar     | 整数   | 否       | 消息体   | 默认值0          |
+    | certificated | 整数   | 否       | 消息体   | 默认值0          |
+    | token        | 字符串 | 是       | 请求头   | 用户身份认证令牌 |
+
+    响应信息:
+
+    - 更新成功 - 状态码**200**:
+      
+     ```JSON
+     {
+         "agentid": 1,
+         "estates": [
+             {
+                 "estateid": 1,
+                 "name": "今日家园",
+                 "hot": 20
+             },
+             {
+                 "estateid": 2,
+                 "name": "翡翠园",
+                 "hot": 30
+             },
+             {
+                 "estateid": 3,
+                 "name": "万科城市花园",
+                 "hot": 22
+             }
+         ],
+         "name": "袁晓梦",
+         "tel": "158173555285",
+         "servstar": 5,
+         "realstar": 4,
+         "profstar": 3,
+         "certificated": true
+     }
+     ```
+
+    - 未提供身份认证信息 - 状态码**403** - 与新增类同
+    - 当前用户没有操作权限 - 状态码**403** - 与新增类同
+
+8. 删除房地产经理人 - **DELETE** `/api/agents/{房地产经理人编号}/`
+
+    开发者:骆昊
+
+    版本号:v1
+
+    接口说明:暂无。
+
+    使用说明:暂无。
+
+    请求参数:
+
+    | 参数名 | 类型   | 是否必填 | 参数位置 | 说明             |
+    | ------ | ------ | -------- | -------- | ---------------- |
+    | token  | 字符串 | 是       | 请求头   | 用户身份认证令牌 |
+
+    响应信息:
+
+    - 删除成功 - 状态码**204**
+    - 未提供身份认证信息 - 状态码**403** - 与新增类同
+    - 当前用户没有操作权限 - 状态码**403** - 与新增类同
+
+9. 分页获取楼盘信息 - **GET** `/api/estates/`
+
+    开发者:骆昊
+
+    版本号:v1
+
+    接口说明:经理人姓名按照前缀模糊匹配的方式进行处理;经理人服务星级是指经理人服务星级不得低于该星级;经理人是否持证只有0(未持证上岗)和1(持证上岗)两个选项。三个参数代表的筛选条件之间是而且的关系。返回结果为分页之后的房地产经理人信息。
+
+    使用帮助:暂无。
+
+    请求参数:
+
+    | 参数名 | 类型   | 是否必填 | 参数位置 | 说明                                |
+    | ------ | ------ | -------- | -------- | ----------------------------------- |
+    | name   | 字符串 | 否       | 查询参数 | 楼盘名(模糊匹配)                  |
+    | dist   | 字符串 | 否       | 查询参数 | 楼盘所在地区编号                    |
+    | page   | 整数   | 否       | 查询参数 | 页码,默认值为1                     |
+    | size   | 整数   | 否       | 查询参数 | 页面大小,默认值为5,最大值不超过50 |
+
+    响应信息:
+
+    ```JSON
+    {
+        "count": 16,
+        "next": "https://120.77.222.217/api/estates/?page=2",
+        "previous": null,
+        "results": [
+            {
+                "estateid": 6,
+                "district": {
+                    "distid": 440303,
+                    "name": "罗湖区"
+                },
+                "agents": [
+                    {
+                        "agentid": 2,
+                        "name": "杨伟",
+                        "tel": "13352939550",
+                        "servstar": 3
+                    },
+                    {
+                        "agentid": 4,
+                        "name": "郭志鹏",
+                        "tel": "13686810707",
+                        "servstar": 4
+                    }
+                ],
+                "name": "幸福里",
+                "hot": 300,
+                "intro": ""
+            }
+        ]
+    }
+    ```
+
+10. 新增楼盘 - **POST** `/api/estates/`
+
+  开发者:骆昊
+
+  版本号:v1
+
+  接口说明:暂无。
+
+  使用帮助:需要登录且拥有管理员权限,用户身份令牌在请求头中提供。
+
+  请求参数:
+
+  | 参数名 | 类型   | 是否必填 | 参数位置 | 说明                     |
+  | ------ | ------ | -------- | -------- | ------------------------ |
+  | name   | 字符串 | 是       | 消息体   | 楼盘名称                 |
+  | hot    | 整数   | 否       | 消息体   | 楼盘热度,默认值0        |
+  | intro  | 字符串 | 否       | 消息体   | 楼盘介绍,默认值空字符串 |
+  | distid | 整数   | 是       | 消息体   | 楼盘所在地区编号         |
+  | token  | 字符串 | 是       | 请求头   | 用户身份认证令牌         |
+
+  响应信息:
+
+  - 新增成功 - 状态码**201**:
+     ```JSON
+     {
+         "estateid": 17,
+         "district": 510107,
+         "name": "世纪锦苑",
+         "hot": 100,
+         "intro": ""
+     }
+     ```
+
+  - 未提供身份认证信息 - 状态码**403**:
+     ```JSON
+     {
+         "detail": "请提供有效的身份认证信息"
+     }
+     ```
+
+  - 当前用户没有操作权限 - 状态码**403**:
+     ```JSON
+     {
+         "detail": "You do not have permission to perform this action."
+     }
+     ```
+
+11. 编辑楼盘信息 - **PUT** `/api/estates/{楼盘编号}`
+
+12. 删除楼盘信 - **DELETE** `/api/estates/{楼盘编号}`
+
+13. 获取所有户型信息 - **GET** `/api/housetypes/`
+
+14. 新增户型 - **POST** `/api/housetypes/`
+
+15. 编辑户型信息 - **PUT** `/api/housetypes/{户型编号}`
+
+16. 删除户型 - **DELETE** `/api/housetypes/{户型编号}`
+
+17. 分页获取房源信息 - **GET** `/api/houseinfos/`
+
+     开发者:骆昊
+
+     版本号:v1
+
+     接口说明:暂无。
+
+     使用帮助:暂无。
+
+     请求参数:    
+
+     | 参数名    | 类型   | 是否必填 | 参数位置 | 说明                                |
+     | --------- | ------ | -------- | -------- | ----------------------------------- |
+     | title     | 字符串 | 否       | 查询参数 | 房源标题关键词                      |
+     | dist      | 整数   | 否       | 查询参数 | 楼盘所在地区编号                    |
+     | min_price | 整数   | 否       | 查询参数 | 价格区间下限                        |
+     | max_price | 整数   | 否       | 查询参数 | 价格区间上限                        |
+     | type      | 整数   | 否       | 查询参数 | 户型编号                            |
+     | page      | 整数   | 否       | 查询参数 | 页码,默认值为1                     |
+     | size      | 整数   | 否       | 查询参数 | 页面大小,默认值为5,最大值不超过50 |
+
+     响应信息:
+     ```JSON
+     {
+         "count": 7,
+         "next": "http://localhost:8000/api/houseinfos/?dist=440303&page=2",
+         "previous": null,
+         "results": [
+     
+         ]
+     }
+     ```
+
+18. 查看房源详情 - **GET** `/api/houseinfos/{房源编号}`
+
+19. 新增房源 - **POST** `/api/houseinfos/`
+
+20. 编辑房源信息 - **PUT** `/api/houseinfos/{房源编号}`
+
+21. 删除房源 - **DELETE** `/api/houseinfos/{房源编号}`
+
+22. 随机获取指定数量的房源标签 - **GET** `/api/tags/`
+
+23. 分页查看房源标签 - **GET** `/api/tags/`
+
+24. 新增房源标签 - **POST** `/api/tags/`
+
+25. 删除房源标签 - **DELETE**  `/api/tags/{房源编号}`
+
+26. 查看房源的图片 - **GET** `/api/houseinfos/{房源编号}/photos/`
+
+27. 为房源添加图片 - **POST** `/api/houseinfos/{房源编号}/photos/`
+
+28. 删除房源图片 - **DELETE** `/api/houseinfos/{房源编号}/photos/{图片编号}`