Я совсем новичок в веб-разработке, и я застрял.
Я использую Flask и Nextjs для создания приложения, которое отображает сетку данных и позволяет пользователям делать примечания к данным. очков и отправить их обратно на сервер. Я могу отлично отображать данные, поэтому функция GET работает, но я добавил кнопку «Сохранить изменения», которая представляет собой запрос POST, и она продолжает выдавать мне CORS или 500 INTERNAL SERVER ERROR.
Прикрепил пару изображений с консоли и Сети. Дайте мне знать, если мне нужно добавить что-нибудь, что поможет с решением.
Вот мой текущий код. Закомментированные строки — это другие варианты решений CORS, которые я пробовал, но у меня не сработало.
Flask app.py
from flask import Flask, jsonify, request, make_response, Response
from flask_cors import CORS, cross_origin
import sqlalchemy as sa
import pandas as pd
import pyodbc
import json
from os import environ
app = Flask(__name__) # create app instance
# enable cors
cors = CORS(app, resources=r'/api/*', headers='Content-Type', origins='http://localhost:3000')
# app.config['CORS_HEADERS'] = 'Content-Type'
sqlalchemy_engine = 'connection string'
engine = sa.create_engine(sqlalchemy_engine, echo=False)
# create a route (api endpoint to get and post the data)
@app.route('/api/assetrentals', methods=['GET','POST','OPTIONS'])
@cross_origin(origin='*')
def asset_rental_data():
if request.method == 'GET':
# res = make_response('')
# res.headers.add('Access-Control-Allow-Origin', '*')
conn = engine.connect()
statement = sa.text("""
SELECT * FROM shortTermAssetRentals
""")
results = conn.execute(statement)
df = pd.DataFrame(results)
df['rental_start_date'] = df['rental_start_date'].astype(str)
df['rental_end_date'] = df['rental_end_date'].astype(str)
df.sort_values(by=['rental_start_date','ra_number'], axis=0, ascending=False, inplace=True, ignore_index=True)
return jsonify(json.loads(df.to_json(orient='records')))
elif request.method == 'POST':
# res = make_response('')
# res.headers.add('Access-Control-Allow-Origin', '*')
# Just trying to display the data first, then worry about sending to server
print(request.get_json())
else:
# res = make_response('')
# res.headers.add('Access-Control-Allow-Origin', '*')
return 'Error'
# code required to run the app
# remove debug=True from production
if __name__ == '__main__':
app.run(debug=True, port=8080)
# to run the app in terminal: python app.py
Я совсем новичок в веб-разработке, и я застрял. Я использую Flask и Nextjs для создания приложения, которое отображает сетку данных и позволяет пользователям делать примечания к данным. очков и отправить их обратно на сервер. Я могу отлично отображать данные, поэтому функция GET работает, но я добавил кнопку «Сохранить изменения», которая представляет собой запрос POST, и она продолжает выдавать мне CORS или 500 INTERNAL SERVER ERROR. Прикрепил пару изображений с консоли и Сети. Дайте мне знать, если мне нужно добавить что-нибудь, что поможет с решением. Вот мой текущий код. Закомментированные строки — это другие варианты решений CORS, которые я пробовал, но у меня не сработало. Flask app.py [code]from flask import Flask, jsonify, request, make_response, Response from flask_cors import CORS, cross_origin import sqlalchemy as sa import pandas as pd import pyodbc import json from os import environ
app = Flask(__name__) # create app instance # enable cors cors = CORS(app, resources=r'/api/*', headers='Content-Type', origins='http://localhost:3000') # app.config['CORS_HEADERS'] = 'Content-Type'
# create a route (api endpoint to get and post the data) @app.route('/api/assetrentals', methods=['GET','POST','OPTIONS']) @cross_origin(origin='*') def asset_rental_data(): if request.method == 'GET': # res = make_response('') # res.headers.add('Access-Control-Allow-Origin', '*') conn = engine.connect() statement = sa.text(""" SELECT * FROM shortTermAssetRentals """) results = conn.execute(statement) df = pd.DataFrame(results) df['rental_start_date'] = df['rental_start_date'].astype(str) df['rental_end_date'] = df['rental_end_date'].astype(str) df.sort_values(by=['rental_start_date','ra_number'], axis=0, ascending=False, inplace=True, ignore_index=True) return jsonify(json.loads(df.to_json(orient='records'))) elif request.method == 'POST': # res = make_response('') # res.headers.add('Access-Control-Allow-Origin', '*')
# Just trying to display the data first, then worry about sending to server print(request.get_json())
else: # res = make_response('') # res.headers.add('Access-Control-Allow-Origin', '*') return 'Error'
# code required to run the app # remove debug=True from production if __name__ == '__main__': app.run(debug=True, port=8080)
# to run the app in terminal: python app.py [/code] Вот моя сетка Nextjs [code]'use client'; import React, { useState, useEffect } from 'react'; import { AgGridReact } from 'ag-grid-react'; import { ColDef } from 'ag-grid-community' import 'ag-grid-community/styles/ag-grid.css'; import 'ag-grid-community/styles/ag-theme-quartz.css'; import { Button } from '@headlessui/react'; import { CheckCircleIcon } from '@heroicons/react/16/solid'; import NextCors from 'nextjs-cors';