如何使用swagger的API接口获取数据并且封装


前言

提示:一共分为3个页面来进行跨域操作和接口封装

一、第一个页面http接口路径

示例:swagger是的一种工具,该工具是为了解决数据接口文档而创建的

在这里插入图片描述

module.exports = {
  devServer: {
    host: 'localhost',
    port: 8080,
    proxy: {
      '/api': {
        target: 'http://api.vikingship.xyz',//接口的域名
        changeOrigin: true,//跨域
        pathRewrites: {
          '/aip': '',
        },
      },
    },
  },
}

二、第二个页面

在这里插入图片描述

import axios from 'axios'
const axioss = new axios.create({

  timeout: 50000
});

export default axioss 

三、第三个页面代码封装

在这里插入图片描述
代码如下(示例):

import axioss from '../http/index'
export const reqHomeColumn = (page, size) => {
    return axioss.request({
        url: '/api/columns',
        method: 'get',
        params: {
            currentPage: page,
            pageSize: size
        }
    })
}
export const reqHome = (id) => {
    return axioss.request({
        url: `/api/columns/${id}`,
        method: 'get',
    })
}
export const req = (id) => {
    return axioss.request({
        url: `/api/columns/${id}/posts?currentPage={page}&pageSize={size}`,
        method: 'get',
    })
}

二、第二个页面数据渲染

  //获取数据,生命周期 - 创建完成(可以访问当前this实例)
  created() {
    reqHomeColumn(1, 6).then((res) => {
      console.log(res.data.data.list);
      this.layout = res.data.data.list;
    });
  },
  //详情页
    created() {
    console.log(this.$route.query.id);
    reqHome(this.$route.query.id).then((res) => {
      console.log(res.data.data);
      this.layout = res.data.data;
    });
    }

总结

这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了swagger的API接口获取数据并且封装的使用,而swagger能使我们快速便捷的找到数据接口。

~ 喜欢的小伙伴点个赞呗,评论区留下宝贵的意见-谢谢呐♥~
如果文章当中有问题,或者有什么好的意见,大家可以指出来,一起学习。
本文版权归作者所有,欢迎转载。

好的,下面是一个简单的基于Django框架的协同过滤推荐系统: ## 1. 数据源 本系统使用了MovieLens数据集,包含了电影评分数据,用户数据和电影数据。可以从官网下载:https://grouplens.org/datasets/movielens/latest/ ## 2. 安装依赖 本项目需要使用到以下Python库: - Django - django-rest-swagger - pandas - numpy - scikit-learn - mysql-connector-python 可以使用pip命令安装: ``` pip install Django django-rest-swagger pandas numpy scikit-learn mysql-connector-python ``` ## 3. 数据处理 在将数据导入数据库前,需要先进行一些数据处理。 首先,将下载的数据集解压到任意位置,然后将以下代码保存为一个Python脚本(如"data_process.py"): ```python import pandas as pd import mysql.connector # 读取数据 ratings = pd.read_csv('path/to/ratings.csv') movies = pd.read_csv('path/to/movies.csv') # 将电影名中的年份去除 movies['title'] = movies['title'].str.replace(r'\(\d+\)$', '') # 连接MySQL数据库 cnx = mysql.connector.connect(user='username', password='password', host='localhost', database='database_name') cursor = cnx.cursor() # 清空数据表 cursor.execute('TRUNCATE TABLE ratings') cursor.execute('TRUNCATE TABLE movies') # 将数据导入数据库 for index, row in ratings.iterrows(): cursor.execute('INSERT INTO ratings (user_id, movie_id, rating) VALUES (%s, %s, %s)', (row['userId'], row['movieId'], row['rating'])) for index, row in movies.iterrows(): cursor.execute('INSERT INTO movies (movie_id, title) VALUES (%s, %s)', (row['movieId'], row['title'])) # 提交更改并关闭连接 cnx.commit() cursor.close() cnx.close() ``` 其中,需要将"path/to/ratings.csv"和"path/to/movies.csv"替换为实际的数据文件路径,将"user_id"、"movie_id"和"rating"替换为实际的数据库字段名,将"username"、"password"和"database_name"替换为实际的数据库用户名、密码和数据库名。 然后运行此脚本,即可将数据导入MySQL数据库中。 ## 4. Django应用 创建一个Django应用,命名为"recommend": ``` $ django-admin startapp recommend ``` 在"recommend"文件夹下,创建以下文件: ### 4.1 models.py ```python from django.db import models class Rating(models.Model): user_id = models.IntegerField() movie_id = models.IntegerField() rating = models.FloatField() class Meta: db_table = 'ratings' class Movie(models.Model): movie_id = models.IntegerField(primary_key=True) title = models.CharField(max_length=255) class Meta: db_table = 'movies' ``` 这里定义了两个数据模型,分别对应数据库中的"ratings"表和"movies"表。 ### 4.2 serializers.py ```python from rest_framework import serializers from .models import Rating, Movie class RatingSerializer(serializers.ModelSerializer): class Meta: model = Rating fields = ('user_id', 'movie_id', 'rating') class MovieSerializer(serializers.ModelSerializer): class Meta: model = Movie fields = ('movie_id', 'title') ``` 这里定义了两个序列化器,用于将数据模型转换为JSON格式。 ### 4.3 views.py ```python from django.shortcuts import render from rest_framework.views import APIView from rest_framework.response import Response from .models import Rating, Movie from .serializers import RatingSerializer, MovieSerializer from sklearn.metrics.pairwise import cosine_similarity import numpy as np import mysql.connector class RecommendView(APIView): def get(self, request): # 连接MySQL数据库 cnx = mysql.connector.connect(user='username', password='password', host='localhost', database='database_name') cursor = cnx.cursor() # 查询所有电影ID cursor.execute('SELECT movie_id FROM movies') movies = [row[0] for row in cursor.fetchall()] # 查询所有用户ID cursor.execute('SELECT DISTINCT user_id FROM ratings') users = [row[0] for row in cursor.fetchall()] # 构建用户-电影评分矩阵 data = np.zeros((len(users), len(movies))) for i, user in enumerate(users): cursor.execute('SELECT movie_id, rating FROM ratings WHERE user_id = %s', (user,)) ratings = {row[0]: row[1] for row in cursor.fetchall()} for j, movie in enumerate(movies): if movie in ratings: data[i, j] = ratings[movie] # 计算相似度矩阵 sim = cosine_similarity(data) # 获取当前用户的推荐列表 user_id = request.query_params.get('user_id', None) if user_id is None: return Response({'error': 'user_id not provided'}) try: user_index = users.index(int(user_id)) except ValueError: return Response({'error': 'user_id not found'}) user_sim = sim[user_index] user_sim[user_index] = 0 top_indices = np.argsort(user_sim)[::-1][:10] top_movies = [movies[i] for i in top_indices] # 查询推荐电影的详细信息 cursor.execute('SELECT * FROM movies WHERE movie_id IN %s', (tuple(top_movies),)) movies = cursor.fetchall() # 关闭连接 cursor.close() cnx.close() # 将结果序列化为JSON格式并返回 serializer = MovieSerializer(movies, many=True) return Response(serializer.data) ``` 这里定义了一个名为"RecommendView"的视图,用于查询某个用户的推荐电影列表。该视图首先从数据库中查询所有电影ID和用户ID,然后构建用户-电影评分矩阵,使用余弦相似度计算相似度矩阵,最后根据当前用户的相似度向量获取其推荐列表,并查询推荐电影的详细信息,并将结果序列化为JSON格式返回。 ### 4.4 urls.py ```python from django.urls import path from .views import RecommendView from rest_framework_swagger.views import get_swagger_view schema_view = get_swagger_view(title='Recommend API') urlpatterns = [ path('', schema_view), path('recommend/', RecommendView.as_view()), ] ``` 这里定义了一个名为"RecommendView"的视图,用于查询某个用户的推荐电影列表。该视图首先从数据库中查询所有电影ID和用户ID,然后构建用户-电影评分矩阵,使用余弦相似度计算相似度矩阵,最后根据当前用户的相似度向量获取其推荐列表,并查询推荐电影的详细信息,并将结果序列化为JSON格式返回。 ### 4.5 settings.py ```python INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'rest_framework_swagger', 'recommend', ] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'database_name', 'USER': 'username', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '3306', } } REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema' } ``` 这里配置了应用依赖的库、数据库连接信息和REST框架的设置。 ## 5. 运行应用 使用以下命令启动Django服务: ``` $ python manage.py runserver ``` 然后访问"http://localhost:8000/"即可看到Swagger接口文档,并可以测试"recommend"接口
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奥佳博客(王小政)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值