【发布时间】:2021-08-17 02:01:18
【问题描述】:
我有app.py:
from resources.user import User
from flask import Flask
from flask_restful import Api
from db import db
db.init_app(app)
api.add_resource(User, '/user/<int:user_id>')
在resources/user.py
from flask_restful import Resource
from models.user import UserModel
class User(Resource):
@classmethod
def get(cls, user_id: int):
user = UserModel.find_by_id(user_id)
if not user:
return {"message": 'User not found'}, 404
return user.json()
在models/user
from db import db
class UserModel(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80))
password = db.Column(db.String(80))
def __init__(self, username, password):
self.username = username
self.password = password
def json(self):
return {
'id': self.id,
'username': self.username
}
@classmethod
def find_by_id(cls, _id):
return cls.query.filter_by(id=_id).first()
在db.py:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
我的问题:
当我向127.0.0.1:5000/user/1 发送一个get 请求时,我得到一个json 响应,状态码为200 一切正常。
当我向 127.0.0.1:5000/user/10000078373 发送 get 请求时,我收到一个 json 响应“未找到用户”,并且状态码 404 一切正常,因为用户 10000078373 不存在。
但是,当我向127.0.0.1:5000/user/sdffsdf 发送一个获取请求时,我不得到一个 json 响应;我收到一个 HTML 响应:
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try
again.</p>
我期待一个 HTML 响应,因为我需要一个返回 json 而不是 HTML 的 restful api。
如果我做出改变
api.add_resource(User, '/user/<int:user_id>')
到
api.add_resource(User, '/user/<string:user_id>')
我不会有任何问题,并且会在 127.0.0.1:5000/user/1 和 127.0.0.1:5000/user/184848484843848 和 127.0.0.1:5000/user/kfkfkjgkg 上获得 json 响应
我的问题:
我的问题是, 我知道他们的角色是给人留下印象。我的问题是给出类型的意义何在。我看不到它可能有用的用例。我遇到的另一个问题是如何在 JSON fromat 而不是 HTML 表单中接收 404,以及如何覆盖此错误的默认值。
【问题讨论】:
标签: python json flask flask-sqlalchemy flask-restful