Rumah  >  Soal Jawab  >  teks badan

Selesaikan masalah permintaan POST dalam Flask dan Python

<p>我正在编写一个Flask的POST请求处理程序来添加一个CLIENT。</p> <pre class="brush:php;toolbar:false;">app = Flask(__name__) CORS(apl) @app.post("/api/clients/") def addClient(): data = open('./src/clients.json', 'w+') pelanggan = json.load(data) req = json.loads(request.data) clients.append(req) json.dump(pelanggan, data) data.close() return req</pre> <p>但是当我在浏览器中执行这个Javascript的<kod>fetch()</code> API时:</p> <pre class="brush:php;toolbar:false;">let u = "http://url/api/clients/n1/" biarkan b = { "pelanggan": "n1", "butiran": { "alamat1": "Baris1", "alamat2": "line2", "bandar": "bandar", "e-mel": "@", "gst": "gstno" } } const addStudent = async (kami, c) => { respons const = tunggu ambil(kami, { kaedah: "POST", tajuk: { "Jenis Kandungan": "aplikasi/json", }, badan: c, }); data const = menunggu respons.json(); console.log(data); }; addStudent(u, b);</pre> <p>浏览器控制台显示以下错误:</p> <blockquote> <p>访问'url/api/clients/'的fetch被阻止了,因为源'null'没有'Access-Control-Allow-Origin'头。如果一个不透的源'null'没有'Access-Control-Allow-Origin'头。如果一个不透的一个不透的源请将请求的模式设置为'no-cors'以禁用CORS获取资源。</p> </blockquote> <p>Sebagai rujukan, ini ialah ralat yang disebut dalam baris arahan Flask: </p> <blockquote> <p>127.0.0.1 - - [26 Mac 2023 18:09:05] "POST /api/clients/ HTTP/1.1" 500 - Traceback (panggilan terbaharu terakhir): Fail 'E:All_CodesWEB_DEVexcel-o-metervenvlibsite-packagesflaskapp.py', talian 2551, <strong>Call</strong> kembalikan self.wsgi_app(environment, start_response) Fail "E:All_CodesWEB_DEVexcel-o-metervenvlibsite-packagesflaskapp.py", baris 2531, dalam wsgi_app respons = self.handle_exception(e) Fail 'E:All_CodesWEB_DEVexcel-o-metervenvlibsite-packagesflask_corsextension.py', baris 165, dalam wrapped_function Kembalikan cors_after_request(app.make_response(f(*args, **kwargs))) Fail "E:All_CodesWEB_DEVexcel-o-metervenvlibsite-packagesflaskapp.py", baris 2528, dalam wsgi_app respons = self.full_dispatch_request() Fail "E:All_CodesWEB_DEVexcel-o-metervenvlibsite-packagesflaskapp.py", baris 1825, dalam full_dispatch_request rv = self.handle_user_exception(e) Fail 'E:All_CodesWEB_DEVexcel-o-metervenvlibsite-packagesflask_corsextension.py', baris 165, dalam wrapped_function Kembalikan cors_after_request(app.make_response(f(*args, **kwargs)))</p> </blockquote> <p><strong>Adakah saya perlu menambah pengepala khusus seperti yang dinyatakan di atas, atau adakah saya mengalami pepijat pada bahagian Flask? </strong> Baris terakhir dalam baris arahan nampaknya memberikan ralat CORS. </p>
P粉476475551P粉476475551413 hari yang lalu533

membalas semua(1)saya akan balas

  • P粉459578805

    P粉4595788052023-09-03 12:52:58

    Bolehkah anda mencubanya dan menyemaknya?

    Kaedah 1

    Pasang flask-cors

    pip install -U flask-cors

    Kemudian selepas aplikasi dimulakan, mulakan flask-cors dengan parameter lalai:

    from flask import Flask
     from flask_cors import CORS 
    
     app = Flask(__name__)
     CORS(app)
    
     @app.route("/")
     def helloWorld():
      return "Hello, cross-origin-world!"

    Dikemas kini

    Kaedah 2

    Jika anda tidak mahu menggunakan sebarang pakej tambahan, anda juga boleh melakukannya

    @app.route('your own route', methods=['GET'])
     def yourMethod(params):
       response = flask.jsonify({'somekey': 'somevalue'})
       # 注意:理想情况下,'*' 应该被替换为你的主机来源
       response.headers.add('Access-Control-Allow-Origin', '*') 
       return response

    Saya cadangkan sila cuba gunakan kod berikut untuk menentukan titik akhir anda

    @app.route("/api/clients/", methods=['POST'])

    bukannya

    @app.post("/api/clients/")

    Pautan rujukan - Kaedah http flask

    balas
    0
  • Batalbalas