Flask, écrire dans un fichier les infos reçus via "POST"

Flayme -  
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   -

Bonjour,

Je ne comprends pas pourquoi quand je lance ce code:

from flask import Flask, request
app = Flask(__name__)

@app.route('/', methods=['POST'])
def server():
    data = request.get_json()
    with open("db_game.py", "w") as f:
        f.write(data)

... et qu'après je lance le code suivant :

import requests as rq
import json

BASE = "http://flayme.pythonanywhere.com/"

response = rq.post(BASE, json.dumps({"data": "test"}))

... il n'y a rien qui s'affiche dans le dossier db_game.py.

J'utilise flask sur pythonanywhere, et quand je vais sur mon site ça m'écrit :

405 Method Not Allowed
Method Not Allowed
The method is not allowed for the requested URL.

Merci d'avance pour votre aide

A voir également:

3 réponses

mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 

Bonjour,

D'après cette discussion, ce pourrait dû au / en trop à la fin de la déclaration de la variable BASE. As-tu essayé ?

Bonne chance

0
Flayme
 
import requests
import json

URL = "http://flayme.pythonanywhere.com"
PARAMS = '{"data":"test"}'
response = requests.post(url=URL, json=PARAMS)
print(response.content)

reponse.content renvoie :

b'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n<title>500 Internal Server Error</title>\n<h1>Internal Server Error</h1>\n<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>\n'

Je pense que ça vient de mon programme Flask ou de pythonanywhere (comme le dit l'erreur)

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour,

as-tu fait fonctionner l'exemple "hello world"?

Si je compare ton code à cet exemple, j'ai l'impression qu'il y manque plusieurs éléments essentiels.

0
Flayme
 

L'exemple "hello world" marche:

l'exemple "hello world":

from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def server():
    return "Hello world"

résultat sur la page web:

Hello world

résultat sur le programme suivant:

import requests
import json

URL = "http://flayme.pythonanywhere.com"
response = requests.get(URL)
print(response.content)
b'Hello world'

C'est donc mon programme qui marche pas.

Comment le faire fonctionner (je suis un débutant en Flask)

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Flayme
 

Pourquoi as-tu supprimé le "return" de ta fonction server()?

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

Ceci fonctionne chez moi:

import flask
app = flask.Flask(__name__)

@app.route('/', methods=['POST'])
def server():
    data = flask.request.get_json()
    print("data:",data)
    return "bien reçu: " + data
        
app.run(host='0.0.0.0', port=81)
import requests 
import json

d=json.dumps({"un": "deux"})
response = requests.post("http://127.0.0.1:81", json=d)
print (response.text)
0
Flayme
 

Avec ton programme je reçois aussi le "bien reçu: {"un": "deux"}"

Mais comment je fais pour stocker cela dans un fichier texte?

J'ai essayé ce code mais ça ne marche pas:

import flask
app = flask.Flask(__name__)

@app.route('/', methods=['POST'])
def server():
    data = flask.request.get_json()
    with open("db_game.txt", "a") as f:
        f.write(data)
    print("data:",data)
    return "bien reçu: " + data

Celui-ci non plus :

import flask
app = flask.Flask(__name__)

@app.route('/', methods=['POST'])
def server():
    data = flask.request.get_json()
    with open("db_game.txt", "w") as f:
        f.write(data)
    print("data:",data)
    return "bien reçu: " + data

Pourquoi ça ne marche pas, comment je peux faire?

Est-ce que tu peux tester mon code et me dire si ça écrit dans ton fichier texte.

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Flayme
 

Chez moi, cela écrit bien dans le fichier texte.
Que vois-tu?  Le fichier texte reste vide, ou n'est pas créé?
Es-tu certain de regarder au bon endroit?
As-tu testé un programme tout simple qui écrivait dans un fichier?

0
Flayme > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
  • Le fichier reste vide
  • Oui
  • Oui:
print("start")
with open("db_game.txt", "w") as f:
    f.write("test")
print('finish')

Ce programme écrit bien dans le fichier mais il faut attendre que python charge (sur pythonanywhere), je pense que le problème vient donc de pythonanywhere.

Connaissez-vous des sites pour héberger mon site programme flask gratuitement ?

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Flayme
 

Je ne connais pas d'hébergeur gratuit qui permette d'utiliser un programme Python comme serveur Web.
 

0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

As-tu regardé celui-ci ?

0