REST-Server-Problem

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
DMD-OL
User
Beiträge: 168
Registriert: Samstag 26. Dezember 2015, 16:21
Wohnort: Oldenburg (Oldenburg)

Dienstag 27. Juni 2017, 19:17

hi
ich versuche einen Rest-Server nach Tutorial:
http://www.dreamsyssoft.com/python-scri ... python.php
zu schreiben.
Die user_data.xml habe ich als Editor im gleichen Ordner gespeichert wie die .py (REST-Server.py).
Sind also im Ordner direkt untereinander :)
Nur habe ich jetzt gemerkt, dass die Benutzer in der .xml gar nicht geladen werden.

Code: Alles auswählen

#!/usr/bin/env python
import web
import xml.etree.ElementTree as ET

tree = ET.parse('user_data.xml')
root = tree.getroot()
print root

#urls = (
#    '/users', 'list_users',
#    '/users/(.*)', 'get_user'
#)

#app = web.application(urls, globals())

#class list_users:
#    def GET(self):
#    	output = 'users:[';
#    	for child in root:
#            print 'child', child.tag, child.attrib
#            output += str(child.attrib) + ','
#    	output += ']';
#        return output

#class get_user:
#    def GET(self, user):
#    	for child in root:
#    		if child.attrib['id'] == user:
#    		    return str(child.attrib)

#if __name__ == "__main__":
#    app.run()
Ich bin auf dieses Problem gekommen, da ich als Ausgabe nur 'http://0.0.0.0:8080/' erhalte.
Könnte mir da jemand helfen, wie ich die user erhalte bzw. ist das richtig, daß die User per App (Android Studio) erst gesendet
werden müssen?
Zuletzt geändert von Anonymous am Dienstag 27. Juni 2017, 19:50, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 2673
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 27. Juni 2017, 21:57

Nur weil die Dateien nebeneinander liegen sind relative Pfade nicht automatisch gültig. Die hängen vom "current working directory" ab, und das kann je nach dem wie du das Skript gestartet hast auch auf den Mond zeigen.

Ein

Code: Alles auswählen

os.path.join(os.path.dirname(__file__), "user-data.xml")
wirkt da Wunder.
BlackJack

Dienstag 27. Juni 2017, 22:06

@DMD-OL: Da ist ja fast alles auskommentiert, so wird das gar nichts machen. Ist vielleicht auch besser so, denn das Tutorial ist Murks. Da wird behauptet das würde JSON als Antwort liefern, was es ganz sicher nicht tut.
Benutzeravatar
noisefloor
User
Beiträge: 2359
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Mittwoch 28. Juni 2017, 06:54

Hallo,

hat zwar nicht direkt was mit der eigentlichen Fragestellung zu tun, aber ich würde auch die Wahl von web.py nochmal überdenken - das ist als Webframework IMHO nicht 1. oder 2. Wahl.

Einfache REST-APIs gehen gut mit Bottle. Schön ist hier, wenn man JSON senden will, dass Bottle ein Dict im Response direkt in JSON umwandelt. Ansonsten ist für REST-APIs hug, sehr schön, da sich damit von klein bis groß alles einfach umsetzen lässt.

Gruß, noisefloor
DMD-OL
User
Beiträge: 168
Registriert: Samstag 26. Dezember 2015, 16:21
Wohnort: Oldenburg (Oldenburg)

Mittwoch 28. Juni 2017, 15:42

hi
ich halte mich an das Tutorial:
https://blog.miguelgrinberg.com/post/de ... -and-flask
Soweit funktioniert alles.
An der Stelle:
Then open a new console window and run the following command:

Code: Alles auswählen

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
gelingt es mir nicht, curl in der zweiten cmd anzuwenden.
Wie kann man curl in der cmd nutzen?
Zuletzt geändert von Anonymous am Mittwoch 28. Juni 2017, 16:19, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

Mittwoch 28. Juni 2017, 16:20

@DMD-OL: Hast Du ``curl`` denn installiert? Tippst Du das Dollarzeichen ein?
Benutzeravatar
noisefloor
User
Beiträge: 2359
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Mittwoch 28. Juni 2017, 18:06

Hallo,
gelingt es mir nicht, curl in der zweiten cmd anzuwenden. Wie kann man curl in der cmd nutzen?
Was "gelingt denn nicht"?? Du hast doch eine Shell offen und das 1. Kommando erfolgreich abgesetzt, oder? Kommst du nicht zum Shell-Prompt zurück?

Gruß, noisefloor
Antworten