Flask, Python, Restful-Example, API

Django, Flask, Bottle, WSGI, CGI…
Antworten
mignoncharly
User
Beiträge: 8
Registriert: Freitag 6. September 2019, 07:23

Moin!
bin mit Flask schon seit 1 Monat beschäftigt aber seit gestern versuche ich das Beispiele hier https://flask-restful.readthedocs.io/en ... ll-example in meiner gebastelten (mit Hilfe eines Tuto)Webapp zu testen aber ich bekomme immer Fehler wegen nicht gefundene Modulen und möchte gern wissen wo kommt was hin. Vielen Dank

__init__.py

Code: Alles auswählen

.
.
.
from flask import Flask
from flask_restful import reqparse, abort, Api, Resource
from webapp.routes import PostList, Postss #doenst work
from routes import  PostList, Postss #doesnt work

app = Flask(__name__)

api = Api(app)
#setup the Api resource routing here
api.add_resource(PostList, '/posts')
api.add_resource(Postss, '/posts/<post_id>')
routes.py

Code: Alles auswählen

POSTS = {
    'post1': {'task': 'Build an API'},
    'post2': {'task': 'Test it'},
    'post3': {'task': 'Deploy it, lol!'},
}

def abort_if_post_doesnt_exist(post_id):
    if post_id not in POSTS:
        abort(404, message="Post {} doesn't exist".format(post_id))
        
parser = reqparse.RequestParser()
parser.add_argument('task')

# Post
# shows a single post item and lets you delete a post item
class Postss(Resource):
    def get(self, post_id):
        abort_if_post_doesnt_exist(post_id)
        return POSTS[post_id]

    def delete(self, post_id):
        abort_if_post_doesnt_exist(post_id)
        del POSTS[post_id]
        return '', 204 #for content

    def put(self, post_id):
        args = parser.parse_args()
        task = {'task': args['task']}
        POSTS[post_id] = task
        return task, 201 #for created

# PostList
# shows a list of all posts, and lets you ADD POST to add new tasks
class PostList(Resource):
    def get(self):
        return POSTS

    def addpost(self):
        args = parser.parse_args()
        post_id = int(max(POSTS.keys()).lstrip('post')) + 1
        post_id = 'post%i' % post_id
        POSTS[post_id] = {'task': args['task']}
        return POSTS[post_id], 201
run.py

Code: Alles auswählen

from webapp import app

if __name__ == '__main__':
    app.run(debug=True)
VG
mignoncharly
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@mignoncharly: wie ist der exakte Fehler inklusive komplettem Traceback?

Wir wissen ja nicht, welche Module Du wie installierst hast.
mignoncharly
User
Beiträge: 8
Registriert: Freitag 6. September 2019, 07:23

Sirius3 hat geschrieben: Freitag 6. September 2019, 08:44 @mignoncharly: wie ist der exakte Fehler inklusive komplettem Traceback?

Wir wissen ja nicht, welche Module Du wie installierst hast.
Hey @Sirius3,

here we go, Thks

(env) C:\Users\...\flask_app>python run.py
Traceback (most recent call last):
File "run.py", line 1, in <module>
from webapp import app
File "C:\Users\...\flask_app\webapp\__init__.py", line 42, in <module>
from routes import PostList, Postss
ModuleNotFoundError: No module named 'routes'
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo liegt denn die Datei routes.py? Soll das ein relativer Import sein?
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mignoncharly: Nun es gibt ja auch kein global installiertes `routes`-Modul. Genau so wenig wie ``import app`` funktionieren würde, weil es das auch nicht gibt. Nun schau Dir mal an wie Du `app` importierst, und überlege was das wohl für `routes` bedeuten mag.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
mignoncharly
User
Beiträge: 8
Registriert: Freitag 6. September 2019, 07:23

Sirius3 hat geschrieben: Freitag 6. September 2019, 09:57 Wo liegt denn die Datei routes.py? Soll das ein relativer Import sein?
Ja genau

Bild
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mignoncharly: Wenn das ein relativer Import sein soll, dann muss man den halt auch als relativen Import schreiben und nicht als absoluten. Python fängt da ja nicht an zu raten ob man mit einem absoluten Import nicht vielleicht eigentlich einen relativen gemeint hat. Den Unterschied gibt es ja gerade deswegen das man entscheiden kann ob man relativ oder absolut meint, und im Zweifelsfall sogar beides machen kann, wenn es Module mit gleichem Namen sowohl relativ als auch absolut gibt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
mignoncharly
User
Beiträge: 8
Registriert: Freitag 6. September 2019, 07:23

__blackjack__ hat geschrieben: Freitag 6. September 2019, 12:40 @mignoncharly: Wenn das ein relativer Import sein soll, dann muss man den halt auch als relativen Import schreiben und nicht als absoluten. Python fängt da ja nicht an zu raten ob man mit einem absoluten Import nicht vielleicht eigentlich einen relativen gemeint hat. Den Unterschied gibt es ja gerade deswegen das man entscheiden kann ob man relativ oder absolut meint, und im Zweifelsfall sogar beides machen kann, wenn es Module mit gleichem Namen sowohl relativ als auch absolut gibt.
Hey __blackjack__!

danke für deine Antwort. Das Problem wurde schon gelöst! :)
Ich hatte den Modul im falschen Skript importiert.
Danke an alle

VG
mignoncharly
Antworten