【问题标题】:the diffrence between api.add_resource(User, '/user/<int:user_id>') and <string:user_id> and <user_id> in flask restful?api.add_resource(User, '/user/<int:user_id>') 和 <string:user_id> 和 <user_id> 在烧瓶中的区别?
【发布时间】: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/&lt;int:user_id&gt;')

api.add_resource(User, '/user/&lt;string:user_id&gt;')

我不会有任何问题,并且会在 127.0.0.1:5000/user/1127.0.0.1:5000/user/184848484843848127.0.0.1:5000/user/kfkfkjgkg 上获得 json 响应

我的问题:

我的问题是,

我知道他们的角色是给人留下印象。我的问题是给出类型的意义何在。我看不到它可能有用的用例。我遇到的另一个问题是如何在 JSON fromat 而不是 HTML 表单中接收 404,以及如何覆盖此错误的默认值。

【问题讨论】:

    标签: python json flask flask-sqlalchemy flask-restful


    【解决方案1】:

    &lt;int:user_id&gt;&lt;string:user_id&gt; 的作用是您为传递的变量指定类型,而该变量只接受您指定的类型。如果您只输入".../&lt;user_id&gt;",默认类型将是字符串。

    在您的代码中,当您分配 &lt;int:user_id&gt; 并传递整数时,它完美地工作。当您将字符串传递给您的 Int 类型变量时,编译器无法识别并且您收到 HTML 错误。然后您将类型更改为编译器识别的字符串 (&lt;string:user_id&gt;),并从编译器获得响应。

    【讨论】:

    • 我对原始问题进行了编辑并添加了解释。
    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 2019-05-06
    • 2020-06-11
    • 2021-07-11
    • 1970-01-01
    • 2015-10-20
    • 2017-05-15
    • 2012-12-06
    相关资源
    最近更新 更多