Python新手求助:Pycharm环境配置问题及Flask路由中methods参数详解

1,
本机环境:
anaconda3,其 python 版本是 3.7
python3.5
pycharm 社区版 2018

Pycharm Setting 里 project interpreter 明明已经选择了 anaconda3,也安装了 flask 模块,为什么编译的时候还是报错没有 flask 模块 ( ImportError: No module named ‘flask’ ) 。
反倒在 cmd 里 pip install flask (即在 python3.5 安装了 flask )之后就可以了,那是不是意味 pycharm 的运行环境指向了 python3.5 ,但是我明明以及在 project interpreter 已经选择了 anaconda3 啊!

2,
from flask import Flask
app = Flask(name)
@app.route(’/’,methods=[‘post’]) #methods=[‘get’,‘post’]
def hello_world():
return ‘Hllo1’
if name == ‘main’:
app.run()

这是源码,运行会报错 Method Not Allowed The method is not allowed for the requested URL.
只要改成 methods=[‘get’,‘post’] 就没问题。
为什么?是不是我运行环境的问题,请大家帮忙试试,源码只有几行而已
Python新手求助:Pycharm环境配置问题及Flask路由中methods参数详解


1 回复

帖子回复:

哥们,你这问题分两块,咱们拆开说。

1. Pycharm环境配置(通用思路) 新手在Pycharm里配环境,最稳的流程是:

  1. 创建新项目时,别直接用系统Python。在New Project弹窗里,找到Python Interpreter,选New environment,用Virtualenv。解释器路径让它自动生成,别动。
  2. 已有项目换环境:打开File -> Settings -> Project: [你的项目名] -> Python Interpreter。点右上角齿轮选Add,然后重复上面的步骤,新建一个虚拟环境。关键点:确保项目根目录下有个requirements.txt,配好环境后直接在Pycharm的终端里pip install -r requirements.txt,别手动瞎装包。
  3. 检查Pycharm右下角,确认当前选中的解释器是你刚配的那个虚拟环境,名字通常像venv

2. Flask路由的 methods 参数 这玩意儿很简单,就是告诉Flask这个视图函数能接受哪种HTTP请求。不写的话,默认只接受GET

直接看代码例子最清楚:

from flask import Flask, request

app = Flask(__name__)

# 示例1:默认只接受GET请求(不写methods参数)
@app.route('/page1')
def page1():
    return 'This only works with GET requests.'

# 示例2:明确指定接受GET和POST
@app.route('/page2', methods=['GET', 'POST'])
def page2():
    if request.method == 'POST':
        return 'You sent a POST request!'
    return 'This is a GET request page.'

# 示例3:只接受POST(常见于表单提交或API端点)
@app.route('/submit', methods=['POST'])
def submit():
    data = request.form.get('data')
    return f'Received: {data}'

# 示例4:RESTFul风格常用方法
@app.route('/api/item/<int:id>', methods=['GET', 'PUT', 'DELETE'])
def handle_item(id):
    if request.method == 'GET':
        return f'Fetching item {id}'
    elif request.method == 'PUT':
        return f'Updating item {id}'
    elif request.method == 'DELETE':
        return f'Deleting item {id}'

if __name__ == '__main__':
    app.run(debug=True)

关键点

  • methods参数的值是个列表,哪怕只指定一个方法也要写成列表,比如methods=['POST']
  • request.method来判断当前是哪种请求,然后写对应的逻辑。
  • 如果客户端用了一个你没在methods列表里允许的方法(比如向只接受GET的路由发POST),Flask会直接返回一个405 Method Not Allowed错误。

总结:Pycharm环境用虚拟环境隔离,Flask路由的methods参数就是个定义HTTP方法白名单的列表。

回到顶部