FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口

Python88

针对上一篇FastAPI(六十二)实战开发《在线课程学习系统》需求分析需求的功能,我们对需要的接口进行梳理,大概的规划出来现有的接口,作为我们第一版的接口的设计出版,然后我们根据设计的接口。

2.1用户注册接口

路径:/user/register

请求方式:POST

请求格式:json

是否依赖登陆:否

参数:
参数名称参数含义参数是否必须参数类型username 用户名 8-16位是str password 密码,长度8-16位,md5加密是str role 类型,学生或者老师,默认:学生是str jobnum 工号,8位数字否int studentnum 学籍号,16位数字否int sex 性别,男女。是str age 年龄,必须大于18,小于65 是int

接口返回:json

{ "code":200, "data":'成功', "message":"成功"}

返回码说明
代码含义200 注册成功100101 注册失败100102 身份和对应号不匹配100103 年纪大小不符合100104 用户名重复100105 密码加密失败100106 用户名长度不符合

2.2登陆接口

路径:/user/login

请求方式:post

请求格式:json

是否依赖登陆:否

请求参数
字段含义是否必须类型username 用户名是str password 密码是str

返回例子

{ "code":200, "data":{   "token":""}, "message":"成功"}

返回状态码说明

代码含义200 成功100201 登陆失败100202 重复登陆100203 产生token失败100204 输入密码错误次数过多,账号暂时锁定,请30min再来登录100205 用户不存在100206 密码错误

2.3个人信息

路径:/user/info

请求方式:post

请求格式:json

请求参数:无

是否依赖登陆:是

返回格式:json

{ "code":200, "data":{   }, "message":"成功"}

返回状态码说明
代码含义200 成功

2.4 修改密码

路径:/user/changepassword

请求方式:post

请求格式:json

返回格式:json

是否依赖登陆:是
参数说明是否必须类型oldpassword 原密码是str newspassword 新密码是str

返回示例

{ "code":200, "data":'成功', "message":"成功"}

返回状态码说明
状态码含义200 成功100301 原密码校验失败100302 密码保存失败100303 新密码长度不匹配100304 新旧密码不能一样

2.5 留言

路径:/user/addmessage

请求方式:post

请求格式:json

是否依赖登陆:是

请求参数:
参数含义是否必须类型id 用户id 是int message 内容是str

返回格式:json

{ "code":200, "data":{   }, "message":"成功"}

返回状态码说明
状态码含义200 成功100501 自己不能给自己留言100502 留言长度在5-500个字符长度100503 留言用户不存在

2.6 查看留言

路径:/user/viewmessage

请求方式:get

请求格式:json

是否依赖登陆:是

请求参数:无

返回格式:json

{ "code":200, "data":{   }, "message":"成功"}

返回状态码说明
状态码含义200 成功

2.7留言列表

路径:/user/messagelist

请求方式:get

请求格式:json

是否依赖登陆:是

请求参数:无

返回格式:json

{ "code":200, "data":[   ], "message":"成功"}

返回状态码说明
状态码含义200 成功

2.8回复留言

路径:/user/rebackmessage/

请求方式:post

请求格式:json

是否依赖登陆:是

请求参数
参数含义是否必须类型id 留言的id 是int message 内容是str

返回格式:json

{ "code":200, "data":{}, "message":"成功"}

返回状态码说明
状态码含义200 成功100801 回复留言失败100802 回复留言内容不能为空100803 回复内容应该在5-500字100804 回复留言id不存在

2.9删除留言

路径:/user/deletemessage/{id}

请求方式:get

请求格式:json

是否依赖登陆:是

请求参数:
参数含义是否必须类型id 留言的id 是int

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

返回状态码说明
状态码含义200 成功100901 删除留言不存在100902 权限不足

2.10创建课程

路径:/course/create

请求方式:post

请求格式:json

是否依赖登陆:是

请求参数:
参数含义是否必须类型name 课程名称(长度2-50)是str icon 课程的icon 否str desc 描述否text catalog 目录否json onshelf 是否上架(0上架,1下架)是int

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功101002 课程名称不能重复101003 课程创建失败

2.11课程详情

路径:/course/detail/{id}

请求方式:get

请求格式:json

是否依赖登陆:是

请求参数
参数含义是否必须类型id 课程id 是int

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功101101 课程不存在

2.12 课程编辑

路径:/course/edit

请求方式:put

请求格式:json

是否依赖登陆:是

请求参数
参数含义是否必须类型name 课程名称(长度2-50)是str id 课程id 是int icon 课程icon 否str desc 课程描述否str catalog 课程目录否json onshelf 是否上架(0上架,1下架)是int

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功101201 课程id不存在101202 权限不足101203 课程名称不能重复

2.13 查看评论

路径:/course/viewcomments/{id}

请求方式:get

请求格式:无

是否依赖登陆:是

请求参数
参数含义是否必须类型id 课程id 是int

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功101301 课程id不存在

2.14评论

路径:/course/comments

请求方式:post

请求格式:json

是否依赖登陆:是

请求参数
参数含义是否必须类型id 课程id 是int content 评论内容是str

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功101401 课程id不存在101402 评论内容不能为空101403 评论失败101404 自己不能评论自己的课程

2.15 加入课程

路径:/course/add/{id}

请求方式:post

请求格式:json

是否依赖登陆:是

请求参数
参数含义是否必须类型id 课程id 是int

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功101501 课程id不存在101502 课程不能重复加入101503 自己不能加入自己的课程

2.16 退出课程

路径:/course/quit/{id}

请求方式:post

请求格式:json

是否依赖登陆:是

请求参数
参数含义是否必须类型id 课程id 是int

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功101601 课程id不存在101602 课程不在自己列表

2.17 课程列表

路径:/course/list

请求方式:get

请求格式:json

是否依赖登陆:是

请求参数:无

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功

2.18 课程列表(当前用户的课程)

路径:/course/courselist

请求方式:get

请求格式:json

是否依赖登陆:是

请求参数:

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功

2.19 推荐课程列表

路径:/course/recommend

请求方式:get

请求格式:json

是否依赖登陆:是

请求参数:无

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功

2.20 课程点赞

路径:/course/like/{id}

请求方式:get

请求格式:json

是否依赖登陆:是

请求参数
参数含义是否必须类型id 课程id 是int

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}
2.21 课程上架

路径:/course/onshelf/{id}

请求方式:get

请求格式:json

是否依赖登陆:是

请求参数
参数含义

是否必须
类型id 课程id 是int

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功102101 课程不存在102102 课程已经上架102103 自己只能上架自己的课程102104 权限不足

2.22 课程下架

路径:/course/offshelf/{id}

请求方式:get

请求格式:json

是否依赖登陆:是

请求参数
参数含义是否必须类型id 课程id 是int

返回格式:json

{ "code":200, "data":"ok", "message":"成功"}

状态码说明
状态码含义200 成功102201 课程不存在102202 课程已经下架102203 自己只能下架自己的课程102204 权限不足

对应的接口第一版本已经梳理完毕,下次,我们分享需要的数据库的设计。

后记

文章首发在公众号,欢迎关注。

FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口

Original: https://www.cnblogs.com/leiziv5/p/15583704.html
Author: 北漂的雷子
Title: FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口



相关阅读1

Title: 【爬虫实例3】异步爬取大量数据

1、导入模块

import requests
import csv
from concurrent.futures import ThreadPoolExecutor

2、先获取第一个页面的内容

分析得到该页面的数据是从 getPriceData.html页面获取,并保存在csv文件中
FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口

得到url地址后,提取第一个页面内容

def download(url, num):
    resp = requests.post(url).json()
    for i in resp['list']:
        temp = [i['prodName'], i['lowPrice'], i['highPrice'], i['avgPrice'], i['place'], i['unitInfo'], i['pubDate']]
        csvwrite.writerow(temp)

if __name__ == "__main__":
    url = 'http://www.xinfadi.com.cn/getPriceData.html'
    download(url)
    print('success')

此为第一个页面信息提取:
FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口

3、获取更多的信息

分析页面数据显示规律,请求地址时页面携带页码和需要显示数据的条数,一共17362页,每页20条数据
FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口

设置100个线程提取17362页数据,同时每次请求时传入页码

def download(url, num):
    data = {
        "limit": 20,
        "current": num
    }
    resp = requests.post(url, data=data).json()
    for i in resp['list']:
        temp = [i['prodName'], i['lowPrice'], i['highPrice'], i['avgPrice'], i['place'], i['unitInfo'], i['pubDate']]
        csvwrite.writerow(temp)
    print(f'{num}页提取完成')

if __name__ == "__main__":
    url = 'http://www.xinfadi.com.cn/getPriceData.html'
    # 设置100个线程
    with ThreadPoolExecutor(100) as t:
        for i in range(1, 17363):
            t.submit(download(url, i))
    print('success')

4、完整代码

4、完整代码

# 1、提取单页面

import requests
import csv
from concurrent.futures import ThreadPoolExecutor

f = open("data.csv", mode="w", encoding="utf-8")
csvwrite = csv.writer(f)

def download(url, num):
    data = {
        "limit": 20,
        "current": num
    }
    resp = requests.post(url, data=data).json()
    for i in resp['list']:
        temp = [i['prodName'], i['lowPrice'], i['highPrice'], i['avgPrice'], i['place'], i['unitInfo'], i['pubDate']]
        csvwrite.writerow(temp)
    print(f'{num}页提取完成')

if __name__ == "__main__":
    url = 'http://www.xinfadi.com.cn/getPriceData.html'
    # 设置100个线程
    with ThreadPoolExecutor(100) as t:
        for i in range(1, 17363):
            t.submit(download(url, i))
    print('success')

以下为第1页~第199页数据:
FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口

Original: https://www.cnblogs.com/nnguhx/p/16585560.html
Author: 柠檬!
Title: 【爬虫实例3】异步爬取大量数据

相关阅读2

Title: 用python爬了上千万条招聘信息后,最终分析出python要学这些才能就业...

话说年末了,有工作的要考虑明年跳槽,没工作的要考虑明年找工作,那么都想好怎么搞了吗?

FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口
不知道怎么了解?没事,来,我们用python一键查看并分析!

; 一、准备前戏

1、使用的软件

python 3.8
pycharm 2021专业版 激活码

2、使用的内置模块

pprint >>> # 格式化输入模块
csv >>> # 保存csv文件
re >>> # re 正则表达式
time >>> # 时间模块

3、要安装的第三方模块

requests >>> # 数据请求模块

win + R 输入cmd 输入安装命令 pip install 模块名 ,如果出现爆红, 可能是因为网络连接超时,切换国内镜像源即可。

二、思路流程

爬虫就是模拟浏览器,对于服务器发送请求,得到它返回响应的数据。

数据来源分析

首先确定目标,分析数据内容,可以从什么地方获取。

数据是通过哪个url地址发送什么请求方式,携带了那些请求头,然后得到数据(通过开发者工具进行抓包分析)

我们分析数据,是分析服务器返回数据,而不是元素面板,elements 是元素面板,前端代码渲染之后的内容。
FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口

代码实现步骤

  1. 发送请求,对于我们刚刚分析的到url(数据包)地址发送请求,post请求,请求参数, header请求头;
  2. 获取数据,获取响应体的数据内容,服务器返回的数据;
  3. 解析数据,提取我们想要的内容,根据返回的数据,选择对应最适合的解析方式去提取数据;
  4. 保存数据,保存本地数据库/文本/表格数据;
  5. 多页爬取;
我还给大家准备了这些资料,直接在群里就可以免费领取了。
一群:872937351 (群满了的话加二群)
二群:924040232
python学习路线汇总
精品Python学习书籍100本
Python入门视频合集
Python实战案例
Python面试题
Python相关软件工具/pycharm永久激活

三、代码部分

兄弟们,最最最喜欢的环节到了,上代码。
FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口

import requests  # 数据请求模块
import pprint  # 格式化输入模块
import csv   # 保存csv文件
import time # 时间模块

打开文件 等会进行保存 mode 是保存方式 a 追加写入
f = open('拉勾.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '公司名字',
    '城市',
    '薪资',
    '经验',
    '学历',
    '详情页',
])
csv_writer.writeheader()  # 写入表头
for page in range(1, 11):
    # 1. 发送请求 字符串格式化输出 {}占位符
    print(f'===================正在爬取第{page}页的数据内容===================')
    time.sleep(2) # 延时2秒钟
    url = 'https://www.lagou.com/jobs/v2/positionAjax.json'  # 确定请求的url地址
    # headers 请求头  爬虫就是模拟浏览器 对于服务器发送请求, 得到他返回响应数据
    # headers 作用 伪装python代码的  把python代码伪装成浏览器 去发送请求  简单反爬一种手段
    # user-agent 用户代理 浏览器的身份标识
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
    }
    # data 请求参数, post请求 需要传递一个from data表单数据
    # pycharm使用的小技巧一: 快速批量替换 选中 ctrl + R 输入正则表达式匹配规则
    # pycharm使用的小技巧二: 翻译插件 可以去安装
    data = {
        'first': 'true',
        'needAddtionalResult': 'false',
        'city': '全国',
        'px': 'new',
        'pn': page,
        'fromSearch': 'true',
        'kd': 'python',
    }
    # 通过requests这个模块里面post请求方法 对于url地址发送请求, 并且给传递一个data请求参数, headers 请求头, 最后response变量接收
    response = requests.post(url=url, data=data, headers=headers)
    #  放回的结果 response 对象 200 状态码 表示请求成功
    # 2. 获取数据 response.json() 获取json字典数据 response.text 获取文本数据(字符串数据) response.content 二进制数据
    # print(response.text)
    # pprint.pprint(response.json())
    # 3. 解析数据 字典数据类型, 解析数据 提取内容 可以根据键值对取值  根据冒号左边的内容, 提取冒号右边的内容
    # 根据冒号左边的内容, 提取冒号右边的内容
    result = response.json()['content']['positionResult']['result']
    # pprint.pprint(result)
    for index in result:  # for循环 遍历 提取列表里面每一个元素
        title = index['positionName']  # 标题
        company_name = index['companyFullName']  # 公司名字
        city = index['city']  # 城市
        money = index['salary']  # 薪资
        workYear = index['workYear']  # 经验
        edu = index['education']  # 学历
        href = f'https://www.lagou.com/wn/jobs/{index["positionId"]}.html'
        # json.loads() 字符串数据转字典
        dit = {
            '标题': title,
            '公司名字': company_name,
            '城市': city,
            '薪资': money,
            '经验': workYear,
            '学历': edu,
            '详情页': href,
        }
        csv_writer.writerow(dit)
        print(dit)

兄弟们觉得还行的话,记得三连哈~

Original: https://www.cnblogs.com/hahaa/p/15745641.html
Author: 轻松学Python
Title: 用python爬了上千万条招聘信息后,最终分析出python要学这些才能就业...

相关阅读3

Title: Python爬取网易云歌曲评论,做词云分析

前言

emmmm 没什么说的,想说的都在代码里

环境使用

  • Python 3.8 解释器 3.10
  • Pycharm 2021.2 专业版
  • selenium 3.141.0

本次要用到selenium模块,所以请记得提前下载好浏览器驱动,配置好环境

代码实现

先是安装、导入所需模块

from selenium import webdriver

1. 创建一个浏览器对象

driver = webdriver.Chrome()

2. 执行自动化

driver.get('https://music.163.com/#/song?id=488249475')
下拉页面, 直接下拉到页面的底部
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight'
driver.execute_script(js)

3.解析数据

divs = driver.find_elements_by_css_selector('.itm')

保存数据

翻页
for page in range(10):
保存为txt文件
with open('contend.txt', mode='a', encoding='utf-8') as f:
    f.write(cnt + '\n')

运行代码得到结果

; 再做个词云

导入相关模块

import jieba

读取文件数据

with open('contend.txt', mode='r', encoding='utf-8') as f:
    txt = f.read()
print(txt)

词云图 分词

txt_list = jieba.lcut(txt)
print('分词结果:', txt_list)

合并

string_ = ' '.join(txt_list)

创建词云图

wc = wordcloud.WordCloud(
    width=1000,

最后效果

Original: https://www.cnblogs.com/qshhl/p/16318953.html
Author: 松鼠爱吃饼干
Title: Python爬取网易云歌曲评论,做词云分析