用Flask搭建一个web应用(六)---使用restfulapi写一个模型接口

话不多说

安装flask-restful

pip3 install flask-restful

 实现

models.py

class Article(db.Model):
    # 定义表名
    __tablename__ = 'article'
    # 定义字段
    # db.Column 表示是一个字段
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), unique=True)
    content = db.Column(db.Text)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)

app.py

引入flask-restful

from flask import Flask, render_template, session, redirect, url_for, flash
from flask_restful import Api, Resource
from forms import LoginForm
from flask import jsonify, request
from flask_admin import Admin
from models import Article

所有博客信息

@api.resource('/api/v1/blog')
class BlogApi(Resource):
    def __init__(self):
        super().__init__()
        self.result = {
            'method': '',
            'vaesion': 'v1',
            'data': '',
        }

    # 定义返回的数据
    def create_data(self, blog):
        result_data = {
            'id': blog.id,
            'title': blog.title,
            'content': blog.content,
        }
        return result_data

    def get(self):
        data = request.args
        id = data.get('id')
        result_data = {}
        if id:
            leave = Article.query.get(int(id))
            if leave is not None:
                try:
                    result_data = self.create_data(leave)
                    self.result["code"] = 200
                except:
                    self.result["code"] = 400
        else:
            try:
                blogs = Article.query.all()
                result_data = []
                for leave in blogs:
                    one = self.create_data(leave)
                    result_data.append(one)
                self.result["code"] = 200
            except:
                self.result["code"] = 400
        self.result['method'] = 'get'
        self.result['data'] = result_data
        return jsonify(self.result)

打开postman请求一下

{
  "code": 200,
  "data": [
    {
      "content": "kkkkk",
      "id": 3,
      "title": "这是第二篇Flask博客"
    },
    {
      "content": "hgjhgjgjhg",
      "id": 5,
      "title": "这是第四篇Flask博客"
    }
  ],
  "method": "get",
  "vaesion": "v1"
}

单个博客信息

这里写了get和delete两种方法

@api.resource('/api/v1/blog/<int:post_id>')
class BlogSingleApi(Resource):
    def __init__(self):
        super().__init__()
        self.result = {
            'method': '',
            'version': 'v1',
            'data': '',
        }

    # 定义返回的数据
    def create_data(self, blog):
        result_data = {
            'id': blog.id,
            'title': blog.title,
            'content': blog.content,
        }
        return result_data

    def get(self, post_id):
        """
        从数据库中获取数据
        :return: 返回获取到的数据,200:获取成功,400:获取失败
        """
        result_data = {}
        if post_id:
            leave = Article.query.get(int(post_id))
            if leave is not None:
                try:
                    result_data = self.create_data(leave)
                    self.result["code"] = 200
                except:
                    self.result["code"] = 400
            else:
                self.result["code"] = "该文章不存在"
        else:
            blogs = Article.query.all()
            result_data = []
            for leave in blogs:
                one = self.create_data(leave)
                result_data.append(one)
        self.result['method'] = 'get'
        self.result['data'] = result_data
        return jsonify(self.result)

    def delete(self, post_id):
        """
        负责删除数据
        :return: 返回数据保存的状态,200:保存成功,400:保存失败
        """
        self.result["method"] = "delete"
        if post_id:
            leave = Article.query.get(int(post_id))
            if leave is not None:
                try:
                    db.session.delete(leave)
                    db.session.commit()
                    self.result["code"] = 200
                except:
                    self.result["code"] = 400
            else:
                self.result["code"] = 400
                self.result["msg"] = "该文章不存在"
        else:
            blogs = Article.query.all()
            result_data = []
            for leave in blogs:
                one = self.create_data(leave)
                result_data.append(one)

        return jsonify(self.result)
发布了233 篇原创文章 · 获赞 85 · 访问量 153万+

猜你喜欢

转载自blog.csdn.net/ssjdoudou/article/details/104160454