【问题标题】:ImportError: cannot import name 'request' from 'flask'ImportError:无法从“flask”导入名称“request”
【发布时间】:2022-01-12 10:34:46
【问题描述】:

通过 Pycharm 运行 py 文件时出现以下错误:

ImportError: cannot import name 'request' from 'flask'

Traceback (most recent call last):
  File "/root/PycharmProjects/pythonProject/smilecook-test-L_1-4/resources/token.py", line 2, in <module>
    from flask import request
  File "/root/PycharmProjects/pythonProject/smilecook-test-L_1-4/venv/lib/python3.7/site-packages/flask/__init__.py", line 17, in <module>
    from werkzeug.exceptions import abort
  File "/root/PycharmProjects/pythonProject/smilecook-test-L_1-4/venv/lib/python3.7/site-packages/werkzeug/__init__.py", line 1, in <module>
    from .serving import run_simple as run_simple
  File "/root/PycharmProjects/pythonProject/smilecook-test-L_1-4/venv/lib/python3.7/site-packages/werkzeug/serving.py", line 16, in <module>
    import platform
  File "/usr/lib/python3.7/platform.py", line 116, in <module>
    import sys, os, re, subprocess
  File "/usr/lib/python3.7/subprocess.py", line 155, in <module>
    import threading
  File "/usr/lib/python3.7/threading.py", line 8, in <module>
    from traceback import format_exc as _format_exc
  File "/usr/lib/python3.7/traceback.py", line 5, in <module>
    import linecache
  File "/usr/lib/python3.7/linecache.py", line 11, in <module>
    import tokenize
  File "/usr/lib/python3.7/tokenize.py", line 35, in <module>
    from token import *
  File "/root/PycharmProjects/pythonProject/smilecook-test-L_1-4/resources/token.py", line 2, in <module>
    from flask import request
ImportError: cannot import name 'request' from 'flask' (/root/PycharmProjects/pythonProject/smilecook-test-L_1-4/venv/lib/python3.7/site-packages/flask/__init__.py)

Process finished with exit code 1

代码如下:

from http import HTTPStatus
from flask import request
from flask_restful import Resource
from flask_jwt_extended import (
    create_access_token,
    jwt_refresh_token_required,
    create_refresh_token,
    get_jwt_identity,
    jwt_required,
    get_raw_jwt
)

from utils import check_password
from models.user import User

black_list = set()


class TokenResource(Resource):

    def post(self):

        json_data = request.get_json()

        email = json_data.get('email')
        password = json_data.get('password')

        user = User.get_by_email(email=email)

        if not user or not check_password(password, user.password):
            return {'message': 'username or password is incorrect'}, HTTPStatus.UNAUTHORIZED

        access_token = create_access_token(identity=user.id, fresh=True)
        refresh_token = create_refresh_token(identity=user.id)

        return {'access_token': access_token, 'refresh_token': refresh_token}, HTTPStatus.OK


class RefreshResource(Resource):

    @jwt_refresh_token_required
    def post(self):
        current_user = get_jwt_identity()

        token = create_access_token(identity=current_user, fresh=False)

        return {'token': token}, HTTPStatus.OK


class RevokeResource(Resource):

    @jwt_required
    def post(self):
        jti = get_raw_jwt()['jti']

        black_list.add(jti)

        return {'message': 'Successfully logged out'}, HTTPStatus.OK

据我所知,Flask 请求对象包含客户端(例如浏览器)发送到应用程序的数据(URL 参数、POST 数据等) 如此处所述:is "from flask import request" identical to "import requests"?

【问题讨论】:

    标签: python-3.x flask token


    【解决方案1】:

    你有一个循环导入。这是因为您的token 模块隐藏了标准库模块。从追溯:

      File "/usr/lib/python3.7/tokenize.py", line 35, in <module>
        from token import *
      File "/root/PycharmProjects/pythonProject/smilecook-test-L_1-4/resources/token.py", line 2, in <module>
        from flask import request
    

    模块tokenize.py 正在寻找token.py 并获取您的文件而不是标准库文件。它注意到请求的导入是正在处理的导入并且失败。

    重命名你的文件token.py

    【讨论】:

    • 其实可以的...很棒
    猜你喜欢
    • 2018-08-10
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2021-06-28
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多